X-Git-Url: https://git.localhorst.tv/?a=blobdiff_plain;f=src%2Floader%2FLoader.h;h=c962f206119a9b67f22d11d52b9b58b806004b2e;hb=8ef435410d1f8aff339e4afef87a5757e77eba45;hp=7717167e30361335b1cf1ac6478f5f39f6a7f8dc;hpb=d93a406fe997af6035ace4fa8720a5bde1743456;p=l2e.git diff --git a/src/loader/Loader.h b/src/loader/Loader.h index 7717167..c962f20 100644 --- a/src/loader/Loader.h +++ b/src/loader/Loader.h @@ -1,21 +1,16 @@ -/* - * Loader.h - * - * Created on: Sep 13, 2012 - * Author: holy - */ - #ifndef LOADER_LOADER_H_ #define LOADER_LOADER_H_ #include "ObjectFile.h" #include "TypeDescription.h" -namespace loader { - +#include #include #include #include +#include + +namespace loader { class Loader { @@ -26,19 +21,47 @@ public: public: void Load(const std::string &file); + const std::map &Exports() const { return exports; } + + std::ostream &Dump(std::ostream &) const; + private: - void LoadHeader(LoadedObjectFile &); - void LoadExports(LoadedObjectFile &); - void LinkExternals(LoadedObjectFile &); - void LoadImages(LoadedObjectFile &); - void LinkObjects(LoadedObjectFile &); - void LinkObject(LoadedObjectFile &, const TypeDescription &, char *object); + void LoadExports(char *src, Export *begin, Export *end); + void LoadExternals(char *src, External *begin, External *end); + void LoadImages(char *src, Image *begin, Image *end); + void LoadObjects(char *src, Object *begin, Object *end); + void LoadObject(char *src, char *dest, const TypeDescription &); + void LoadArrays(char *src, Array *begin, Array *end); + + void InitObjects(Object *begin, Object *end); + void InitObject(char *object, const TypeDescription &); + void InitArrays(Array *begin, Array *end); + + struct MissingExternal { + std::string identifier; + char *dest; + int typeId; + bool inlined; + }; + void LinkExternal(const MissingExternal &, const LoadedExport &); private: - std::map objectFiles; + std::map objectFiles; std::map exports; + std::map images; + std::vector unlinked; }; } -#endif /* LOADER_LOADER_H_ */ + + +namespace std { + +inline ostream &operator <<(ostream &o, const loader::Loader &l) { + return l.Dump(o); +} + +} + +#endif