26 vector<CHECDataBlock *>::iterator iter;
28 for (iter =
DB.begin(); iter !=
DB.end(); iter++) {
42 strcpy(
fname, file_name);
45 if (!
fp)
return false;
47 vector<CHECDataBlock *>::iterator iter;
49 for (iter =
DB.begin(); iter !=
DB.end(); iter++) {
72 char *c = (
char *)fmt;
78 for (
int i = 0; i < n; i++, c++) {
79 strcpy(param, va_arg(va,
char *));
86 sprintf(s,
"%d", va_arg(va,
int));
91 ftos(va_arg(va,
double), s);
95 sprintf(s,
"%s", va_arg(va,
char *));
105 fprintf(
fp,
"%s\n", line);
117 char *c = (
char *)fmt;
123 for (
int i = 0; i < n; i++, c++) {
124 strcpy(param, va_arg(va,
char *));
126 if (i != 0) strcat(line,
",");
133 sprintf(s,
"%d", va_arg(va,
int));
138 ftos(va_arg(va,
double), s);
142 sprintf(s,
"%s", va_arg(va,
char *));
152 fprintf(
fp,
"%s\n", line);
166 char *c = (
char *)fmt;
171 for (
int i = 0; i < n; i++, c++) {
172 if (i != 0) strcat(line,
",");
176 sprintf(s,
"%d", va_arg(va,
int));
181 ftos(va_arg(va,
double), s);
185 sprintf(s,
"%s", va_arg(va,
char *));
195 fprintf(
fp,
"%s\n", line);
205 char *c = (
char *)fmt;
208 for (
int i = 0; i < n; i++, c++) {
211 sprintf(s,
"%d", va_arg(va,
int));
216 ftos(va_arg(va,
double), s);
220 sprintf(s,
"%s", va_arg(va,
char *));
244 }
else if (*p ==
' ') {
270 strcpy(
fname, file_name);
273 if (!
fp)
return false;
276 char header_name[256];
285 if (strcmp(header_name,
"!END") == 0)
break;
294 if (!block->
Read(
this, line)) {
316 while (fgets(s, size,
fp)) {
317 if (s[0] == 0 || s[0] ==
'#' || s[0] ==
'\r' || s[0] ==
'\n')
continue;
319 if (s[0] ==
'!' && s[1] ==
'!')
continue;
339#define is_separator(x) \
340 (x == ',' || x == ' ' || x == '\t' || x == '\r' || x == '\n')
341 char *p = (
char *)header_line;
345 if (*p !=
'!')
return false;
347 char *bp = header_name;
377static bool get_param_token(
char *&p,
char *token) {
378#define is_separator(x) \
379 (x == ',' || x == ' ' || x == '\t' || x == '\r' || x == '\n')
383 if (!*p)
return false;
396 if (!*p)
return false;
410 const int max_param_n = 40;
411 char param_name[max_param_n][20];
412 void *param[max_param_n];
413 int param_n = strlen(fmt);
417 for (i = 0; i < param_n; i++) {
418 strcpy(param_name[i], va_arg(va,
char *));
419 param[i] = va_arg(va,
void *);
423 ip = (
int *)param[i];
434 while (get_param_token(p, p_token)) {
438 for (i = 0; i < param_n; i++) {
439 if (strcmp(p_str, param_name[i]) == 0)
break;
442 if (i == param_n)
return false;
447 ip = (
int *)param[i];
453 if (!get_param_token(p, eq_token) || eq_token[0] !=
'=') {
458 if (!get_param_token(p, v_token)) {
465 if (sscanf(v_token,
"%s", (
char *)(param[i])) != 1) {
473 if (sscanf(v_token,
"%d", (
int *)(param[i])) != 1) {
481 if (sscanf(v_token,
"%lf", (
double *)(param[i])) != 1) {
508 char *p = header_line;
511 if (*p ==
',' || *p ==
'\r' || *p ==
'\n') {
553 if (line[0] ==
'!') {
558 const int max_param_n = 100;
560 int param_n = strlen(fmt);
561 void *param[max_param_n];
565 for (i = 0; i < param_n; i++) {
566 param[i] = va_arg(va,
void *);
571 char *token = strtok(line,
",\r\n");
574 while (token && i < param_n) {
577 if (sscanf(token,
"%d", (
int *)(param[i])) != 1)
return false;
582 if (sscanf(token,
"%lf", (
double *)(param[i])) != 1)
return false;
587 if (sscanf(token,
"%s", (
char *)(param[i])) != 1)
return false;
596 token = strtok(0,
",\r\n");
605 char *token = strtok(line,
",\r\n");
608 if (sscanf(token,
"%lf", &
data[n]) != 1)
return -(n + 1);
611 token = strtok(0,
",\r\n");
619 char *token = strtok(line,
",\r\n");
622 if (sscanf(token,
"%d", &
data[n]) != 1)
return -(n + 1);
625 token = strtok(0,
",\r\n");
637 vector<CHECDataBlock *>::iterator iter;
639 for (iter = hd->
DB.begin(); iter != hd->
DB.end(); iter++) {
640 if ((*iter)->data_type == data_type) {
641 T block = (T)(*iter);
643 if (strcmp(block->name, name) == 0) {
653 return hecdata_get<CHECDB_Material *>(
this,
HECDB_MATERIAL, name);
657 return hecdata_get<CHECDB_NGroup *>(
this,
HECDB_NGROUP, name);
661 return hecdata_get<CHECDB_EGroup *>(
this,
HECDB_EGROUP, name);
665 return hecdata_get<CHECDB_SGroup *>(
this,
HECDB_SGROUP, name);
669 vector<CHECDataBlock *>::iterator iter;
671 for (iter =
DB.begin(); iter !=
DB.end(); iter++) {
672 if ((*iter)->data_type !=
HECDB_NODE)
continue;
676 if (nitem)
return nitem;
683 vector<CHECDataBlock *>::iterator iter;
685 for (iter =
DB.begin(); iter !=
DB.end(); iter++) {
690 if (eitem)
return eitem;
697 vector<CHECDataBlock *>::iterator iter;
699 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
char data_line_buffer[256]
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)
char header_line_buffer[256]
char fname[mw_fname_size]
void cleanup_token(char *s)
void ftos(double x, char *s)