1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
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__
|