diff options
author | cathook <b01902109@csie.ntu.edu.tw> | 2014-05-02 04:10:56 +0800 |
---|---|---|
committer | cathook <b01902109@csie.ntu.edu.tw> | 2014-05-02 04:10:56 +0800 |
commit | 33d419e4d54d969798af80f05e05f0c447a99594 (patch) | |
tree | c78355a2d334e34df865aca865dbb4864a85820c /meowpp/oo/ObjPort.hpp | |
parent | d2d7a49563a8f04bd07264a4a989d5656313d375 (diff) | |
download | meow-33d419e4d54d969798af80f05e05f0c447a99594.tar meow-33d419e4d54d969798af80f05e05f0c447a99594.tar.gz meow-33d419e4d54d969798af80f05e05f0c447a99594.tar.bz2 meow-33d419e4d54d969798af80f05e05f0c447a99594.tar.lz meow-33d419e4d54d969798af80f05e05f0c447a99594.tar.xz meow-33d419e4d54d969798af80f05e05f0c447a99594.tar.zst meow-33d419e4d54d969798af80f05e05f0c447a99594.zip |
big change about dir structure
Diffstat (limited to 'meowpp/oo/ObjPort.hpp')
-rw-r--r-- | meowpp/oo/ObjPort.hpp | 47 |
1 files changed, 47 insertions, 0 deletions
diff --git a/meowpp/oo/ObjPort.hpp b/meowpp/oo/ObjPort.hpp new file mode 100644 index 0000000..d458adf --- /dev/null +++ b/meowpp/oo/ObjPort.hpp @@ -0,0 +1,47 @@ +#include "ObjPort.h" + +#include "ObjSelector.h" +#include "ObjBase.h" + +#include <cstdio> + +namespace meow{ + template<size_t sid> + inline ObjPort::ObjBase* read(FILE* __f, bool __binary){ + char name[1024]; + unsigned int fg; + if(__binary){ + size_t len; + if(fread(&len, sizeof(size_t), 1, __f) < 1) return NULL; + if(fread(name, sizeof(char), len, __f) < len) return NULL; + if(fread(&fg, sizeof(unsigned int), 1, __f) < 1) return NULL; + name[len] = '\0'; + }else{ + fscanf(__f, "%s %u", name, &fg); + } + ObjBase* ret = Selector<sid>(name); + if(ret->read(__f, __binary, fg) == false){ + delete ret; + ret = NULL; + } + return ret; + } + + + template<size_t sid> + inline ObjPort::bool write(FILE* __f, bool __binary, + ObjBase* __obj, unsigned int __fg){ + std::string name = Selector<sid>::find(__obj); + if(__binary){ + size_t len = name.size(); + if(fwrite(&len, sizeof(size_t), 1, __f) < 1) return false; + if(fwrite(name.c_str(), sizeof(char), len, __f) < len) return false; + if(fwrite(&__fg, sizeof(unsigned int), 1, __f) < len) return false; + }else{ + if(fprintf(__f, "%s %u\n", name.c_str(), __fg) < 2) return false; + } + return __obj->write(__f, __binary, __fg); + } +} + +#endif // oo_ObjPort_H__ |