X-Git-Url: http://git.localhorst.tv/?a=blobdiff_plain;f=src%2Floader%2FCompiler.h;fp=src%2Floader%2FCompiler.h;h=d2f036115733d2237f8f07508166c7135ff8f92b;hb=587a9fc38235475f1c25424bee3e3aeb892a25e2;hp=0000000000000000000000000000000000000000;hpb=7df7c6eca83c2b5c0ee17c55340d8863f9d638f5;p=l2e.git diff --git a/src/loader/Compiler.h b/src/loader/Compiler.h new file mode 100644 index 0000000..d2f0361 --- /dev/null +++ b/src/loader/Compiler.h @@ -0,0 +1,90 @@ +/* + * Compiler.h + * + * Created on: Sep 11, 2012 + * Author: holy + */ + +#ifndef LOADER_COMPILER_H_ +#define LOADER_COMPILER_H_ + +#include +#include +#include +#include + +namespace loader { + +class Interpreter; + +class Compiler { + +public: + explicit Compiler(const Interpreter &intp); + ~Compiler() { } +private: + Compiler(const Compiler &); + Compiler &operator =(const Compiler &); + +public: + void Write(std::ostream &); + + struct Export { + int nameOffset; + int typeId; + int dataOffset; + }; + + struct External { + int nameOffset; + int referenceOffset; + int inlined; + }; + + struct ImageProperties { + Uint32 flags; + int width; + int height; + int depth; + Uint32 rmask; + Uint32 gmask; + Uint32 bmask; + Uint32 amask; + }; + +private: + void WriteHeader(std::ostream &); + void WriteExports(std::ostream &); + void WriteExternals(std::ostream &); + void WriteExportStrings(std::ostream &); + void WriteExternalStrings(std::ostream &); + void WriteImages(std::ostream &); + void WriteObjects(std::ostream &); + + void Write(std::ostream &, const char *data, int amount); + void Pad(std::ostream &, int to); + static int Remaining(int value, int alignment); + + int ReferenceOffset(int typeId, int objectId, std::ptrdiff_t fieldOffset) const; + int ObjectOffset(int typeId, int objectId) const; + int TypeOffset(int typeId) const; + +private: + const Interpreter &intp; + + int cursor; + + int exportsOffset; + int externalsOffset; + int externalStringsOffset; + int exportStringsOffset; + int imagesOffset; + int objectsOffset; + + std::map objectOffsets; + +}; + +} + +#endif /* LOADER_COMPILER_H_ */