#include "ObjPort.h" #include "ObjSelector.h" #include "ObjBase.h" #include namespace meow{ template 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(name); if(ret->read(__f, __binary, fg) == false){ delete ret; ret = NULL; } return ret; } template inline ObjPort::bool write(FILE* __f, bool __binary, ObjBase* __obj, unsigned int __fg){ std::string name = Selector::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__