26 vector<CHECDataBlock *>::iterator iter;
28 for (iter = DB.begin(); iter != DB.end(); iter++) {
42 snprintf(fname,
sizeof(fname),
"%s", file_name);
43 fp = fopen(fname,
"w");
45 if (!fp)
return false;
47 vector<CHECDataBlock *>::iterator iter;
49 for (iter = DB.begin(); iter != DB.end(); iter++) {
72 char *c = (
char *)fmt;
75 size_t len = snprintf(line,
sizeof(line),
"%s", name);
77 for (
int i = 0; i < n; i++, c++) {
78 len += snprintf(line + len,
sizeof(line) - len,
",%s=", va_arg(va,
char *));
82 snprintf(s,
sizeof(s),
"%d", va_arg(va,
int));
87 ftos(va_arg(va,
double), s);
91 snprintf(s,
sizeof(s),
"%s", va_arg(va,
char *));
97 len += snprintf(line + len,
sizeof(line) - len,
"%s", s);
100 fprintf(fp,
"%s\n", line);
112 char *c = (
char *)fmt;
115 size_t len = snprintf(line,
sizeof(line),
"!");
117 for (
int i = 0; i < n; i++, c++) {
118 if (i != 0) len += snprintf(line + len,
sizeof(line) - len,
",");
119 len += snprintf(line + len,
sizeof(line) - len,
"%s=", va_arg(va,
char *));
123 snprintf(s,
sizeof(s),
"%d", va_arg(va,
int));
128 ftos(va_arg(va,
double), s);
132 snprintf(s,
sizeof(s),
"%s", va_arg(va,
char *));
138 len += snprintf(line + len,
sizeof(line) - len,
"%s", s);
141 fprintf(fp,
"%s\n", line);
155 char *c = (
char *)fmt;
161 for (
int i = 0; i < n; i++, c++) {
162 if (i != 0) len += snprintf(line + len,
sizeof(line) - len,
",");
166 snprintf(s,
sizeof(s),
"%d", va_arg(va,
int));
171 ftos(va_arg(va,
double), s);
175 snprintf(s,
sizeof(s),
"%s", va_arg(va,
char *));
181 len += snprintf(line + len,
sizeof(line) - len,
"%s", s);
184 fprintf(fp,
"%s\n", line);
194 char *c = (
char *)fmt;
196 size_t len = strlen(data_line_buffer);
198 for (
int i = 0; i < n; i++, c++) {
201 snprintf(s,
sizeof(s),
"%d", va_arg(va,
int));
206 ftos(va_arg(va,
double), s);
210 snprintf(s,
sizeof(s),
"%s", va_arg(va,
char *));
216 len += snprintf(data_line_buffer + len,
sizeof(data_line_buffer) - len,
"%s,", s);
223 int len = strlen(data_line_buffer);
224 char *p = &data_line_buffer[len - 1];
227 while (p >= data_line_buffer) {
232 }
else if (*p ==
' ') {
242 fprintf(fp,
"%s\n", data_line_buffer);
243 ClearDataLineBuffer();
252 return AddLoad(file_name);
257 fg_header_pushed =
false;
258 snprintf(fname,
sizeof(fname),
"%s", file_name);
259 fp = fopen(fname,
"r");
261 if (!fp)
return false;
264 char header_name[256];
267 while (ReadLine(line)) {
268 if (!GetHeaderName(line, header_name)) {
273 if (strcmp(header_name,
"!END") == 0)
break;
275 block = CreateDataBlock(header_name);
282 if (!block->
Read(
this, line)) {
298 if (fg_header_pushed) {
299 snprintf(s, size,
"%s", header_line_buffer);
300 fg_header_pushed =
false;
304 while (fgets(s, size, fp)) {
305 if (s[0] == 0 || s[0] ==
'#' || s[0] ==
'\r' || s[0] ==
'\n')
continue;
307 if (s[0] ==
'!' && s[1] ==
'!')
continue;
317 snprintf(header_line_buffer,
sizeof(header_line_buffer),
"%s", s);
318 fg_header_pushed =
true;
327 #define is_separator(x) \
328 (x == ',' || x == ' ' || x == '\t' || x == '\r' || x == '\n')
329 char *p = (
char *)header_line;
333 if (*p !=
'!')
return false;
335 char *bp = header_name;
365 static bool get_param_token(
char *&p,
char *token) {
366 #define is_separator(x) \
367 (x == ',' || x == ' ' || x == '\t' || x == '\r' || x == '\n')
371 if (!*p)
return false;
384 if (!*p)
return false;
398 const int max_param_n = 40;
399 char param_name[max_param_n][20];
400 void *param[max_param_n];
401 int param_n = strlen(fmt);
405 for (i = 0; i < param_n; i++) {
406 snprintf(param_name[i],
sizeof(param_name[i]),
"%s", va_arg(va,
char *));
407 param[i] = va_arg(va,
void *);
411 ip = (
int *)param[i];
422 while (get_param_token(p, p_token)) {
426 for (i = 0; i < param_n; i++) {
427 if (strcmp(p_str, param_name[i]) == 0)
break;
430 if (i == param_n)
return false;
435 ip = (
int *)param[i];
441 if (!get_param_token(p, eq_token) || eq_token[0] !=
'=') {
446 if (!get_param_token(p, v_token)) {
453 if (sscanf(v_token,
"%s", (
char *)(param[i])) != 1) {
461 if (sscanf(v_token,
"%d", (
int *)(param[i])) != 1) {
469 if (sscanf(v_token,
"%lf", (
double *)(param[i])) != 1) {
489 bool fg = vParseParameter(line, rcode, fmt, va);
496 char *p = header_line;
499 if (*p ==
',' || *p ==
'\r' || *p ==
'\n') {
508 bool fg = vParseParameter(p, rcode, fmt, va);
516 if (!ReadLine(line))
return false;
524 bool fg = vParseParameter(p, rcode, fmt, va);
539 if (!ReadLine(line))
return false;
541 if (line[0] ==
'!') {
546 const int max_param_n = 100;
548 int param_n = strlen(fmt);
549 void *param[max_param_n];
553 for (i = 0; i < param_n; i++) {
554 param[i] = va_arg(va,
void *);
559 char *token = strtok(line,
",\r\n");
562 while (token && i < param_n) {
565 if (sscanf(token,
"%d", (
int *)(param[i])) != 1)
return false;
570 if (sscanf(token,
"%lf", (
double *)(param[i])) != 1)
return false;
575 if (sscanf(token,
"%s", (
char *)(param[i])) != 1)
return false;
584 token = strtok(0,
",\r\n");
593 char *token = strtok(line,
",\r\n");
596 if (sscanf(token,
"%lf", &
data[n]) != 1)
return -(n + 1);
599 token = strtok(0,
",\r\n");
607 char *token = strtok(line,
",\r\n");
610 if (sscanf(token,
"%d", &
data[n]) != 1)
return -(n + 1);
613 token = strtok(0,
",\r\n");
625 vector<CHECDataBlock *>::iterator iter;
627 for (iter = hd->
DB.begin(); iter != hd->
DB.end(); iter++) {
628 if ((*iter)->data_type == data_type) {
629 T block = (T)(*iter);
631 if (strcmp(block->name, name) == 0) {
641 return hecdata_get<CHECDB_Material *>(
this,
HECDB_MATERIAL, name);
645 return hecdata_get<CHECDB_NGroup *>(
this,
HECDB_NGROUP, name);
649 return hecdata_get<CHECDB_EGroup *>(
this,
HECDB_EGROUP, name);
653 return hecdata_get<CHECDB_SGroup *>(
this,
HECDB_SGROUP, name);
657 vector<CHECDataBlock *>::iterator iter;
659 for (iter = DB.begin(); iter != DB.end(); iter++) {
660 if ((*iter)->data_type !=
HECDB_NODE)
continue;
664 if (nitem)
return nitem;
671 vector<CHECDataBlock *>::iterator iter;
673 for (iter = DB.begin(); iter != DB.end(); iter++) {
678 if (eitem)
return eitem;
685 vector<CHECDataBlock *>::iterator iter;
687 for (iter = DB.begin(); iter != DB.end(); iter++) {
CHECDataBlock * CreateHECDataBlock(const char *header_name)
T hecdata_get(CHECData *hd, int data_type, const char *name)
virtual bool Read(class CHECData *hecd, char *header_line)=0
virtual int ParseIntDataArray(char *line, int *data)
virtual void WriteDataLine()
virtual class CHECDB_Node::CNodeItem * GetNodeItem(int id)
virtual bool ReadData(int *rcode, const char *fmt,...)
virtual void WriteParameter(const char *fmt="",...)
virtual bool ParseParameter(char *line, int *rcode, const char *fmt,...)
virtual int GetElemType(int id)
virtual bool vParseParameter(char *line, int *rcode, const char *fmt, va_list va)
virtual class CHECDB_SGroup * GetSGroup(const char *name)
virtual int ParseDoubleDataArray(char *line, double *data)
virtual bool Save(const char *file_name)
virtual bool ParseHeader(char *header_line, int *rcode, const char *fmt,...)
std::vector< CHECDataBlock * > DB
virtual bool AddLoad(const char *file_name)
virtual void StoreDataBlock(CHECDataBlock *block)
virtual bool Load(const char *file_name)
virtual class CHECDB_Element::CElemItem * GetElemItem(int id)
virtual void WriteData(const char *fmt,...)
virtual class CHECDB_Material * GetMaterial(const char *name)
virtual bool ReadLine(char *s, int size=256)
virtual bool ReadParameter(int *rcode, const char *fmt,...)
virtual void WriteHeader(const char *name, const char *fmt="",...)
virtual void ClearDataLineBuffer()
virtual void AddDataLineItems(const char *fmt,...)
virtual class CHECDB_EGroup * GetEGroup(const char *name)
virtual class CHECDB_NGroup * GetNGroup(const char *name)
virtual void WriteLine(const char *s)
virtual void PushReadLine(const char *s)
virtual bool GetHeaderName(const char *header_line, char *header_name)
virtual CHECDataBlock * CreateDataBlock(const char *header_name)
void cleanup_token(char *s)
void ftos(double x, char *s)