FrontISTR  5.7.1
Large-scale structural analysis program with finit element method
CNFData.h
Go to the documentation of this file.
1 /*****************************************************************************
2  * Copyright (c) 2019 FrontISTR Commons
3  * This software is released under the MIT License, see LICENSE.txt
4  *****************************************************************************/
5 /*
6  CNFData Ver. 3.6
7 */
8 
9 #ifndef CNFDataH
10 #define CNFDataH
11 
12 #ifndef TRUE
13 #define TRUE 1
14 #define FALSE 0
15 #endif
16 
17 #include <set>
18 #include <assert.h>
19 #include <stdio.h>
20 #include <string.h>
21 
22 #include "CNFMessage.h"
23 #include "CNFDataBlock.h"
24 #include "CNFDB_100.h"
25 #include "CNFDB_402.h"
26 #include "CNFDB_403.h"
27 #include "CNFDB_404.h"
28 #include "CNFDB_405.h"
29 #include "CNFDB_408.h"
30 #include "CNFDB_506.h"
31 #include "CNFDB_507.h"
32 #include "CNFDB_601.h"
33 
34 const double DefaultCNFDataVersion = 8.0;
35 
36 // results of ReadLine method
37 const int READLINE_SUCESS = 1;
38 const int READLINE_SEPARATOR = -1;
39 const int READLINE_EOF = -2;
40 const int READLINE_ERROR = 0;
41 
43 const int NFD_SupportedBlockList[] = {100, 402, 403, 404, 405,
44  408, 506, 507, 601};
45 
46 class CNFData {
47  public:
48  double version; // set by instance of CNFDB_100
49  char title[256]; // set by instance of CNFDB_100
50 
51  CNFData();
52  CNFData(const char* fname);
53  virtual ~CNFData();
54 
55  virtual void Clear();
56  virtual void Load(const char* fname);
57  virtual void Save(const char* fname);
58 
59  public:
60 //-----------------------------------------------------
61 // Individual DataBlock Storage and Utilities
62 // CAUTION) No storage for CNFDB_100
63 //-----------------------------------------------------
64 
65 #define GENRATE_CODE(x) \
66  std::vector<CNFDB_##x*> DB_##x; \
67  void Clear_##x();
68 
69  GENRATE_CODE(402)
70  GENRATE_CODE(403)
71  GENRATE_CODE(404)
72  GENRATE_CODE(405)
73  GENRATE_CODE(408)
74  GENRATE_CODE(506)
75  GENRATE_CODE(507)
76  GENRATE_CODE(601)
77 #undef GENRATE_CODE
78 
79  public:
80  //-----------------------------------------------------
81  // DataBlock Utilities
82  //-----------------------------------------------------
83  virtual CNFDataBlock* CreateDataBlock(int block_id);
84  virtual void StoreDataBlock(CNFDataBlock* block);
85  virtual void SkipDataBlock();
86  //-----------------------------------------------------
87  // Basic Input/Output Methods
88  //-----------------------------------------------------
89  char neu_file[256];
90  FILE* log_fp;
91  FILE* fp;
92  int line;
93  char line_buff[512];
95  // fmt: I:integer, B:bool, F:float
96  int EndOfFile() { return feof(fp); }
97  void ReadRecStart(char* buff);
98  int ReadRecNext(char type, void* value);
99  void ReadRecord(char* buff, const char* fmt, ...);
100  int ReadLine(char* buff, int size = 255);
101  void ReadLineEx(char* buff, int size = 255);
102  void ReadStr(char* buff, char* s, int size);
103  void PushBackLine(char* buff);
104  void ReadMultRec(char type, int n_in_rec, int val_n, void* val);
105 
106  void WriteStr(FILE* fp, const char* s);
107  void WriteData(FILE* fp, const char* fmt, ...);
108  void WriteBlockSeparator(FILE* fp);
109 
110  bool WriteDataBlock(FILE* fp, int id);
111 
112  //-----------------------------------------------------
113  // Report Status
114  //-----------------------------------------------------
115  void WriteSummary(FILE* fp = 0);
116 
117  protected:
118  char rec_buff[256];
121 
122  virtual void PrintMessage(const char* msg);
123 
124  protected:
126 };
127 
128 #endif
const double DefaultCNFDataVersion
Definition: CNFData.h:34
const int READLINE_EOF
Definition: CNFData.h:39
const int NFD_SupportedBlockListSize
Definition: CNFData.h:42
const int READLINE_ERROR
Definition: CNFData.h:40
const int NFD_SupportedBlockList[]
Definition: CNFData.h:43
const int READLINE_SUCESS
Definition: CNFData.h:37
const int READLINE_SEPARATOR
Definition: CNFData.h:38
#define GENRATE_CODE(x)
Definition: CNFData.h:65
int fg_rec_first
Definition: CNFData.h:119
int ReadRecNext(char type, void *value)
Definition: CNFData.cpp:265
char title[256]
Definition: CNFData.h:49
virtual CNFDataBlock * CreateDataBlock(int block_id)
Definition: CNFData.cpp:184
void WriteStr(FILE *fp, const char *s)
Definition: CNFData.cpp:452
int rec_column
Definition: CNFData.h:120
void ReadStr(char *buff, char *s, int size)
Definition: CNFData.cpp:373
bool WriteDataBlock(FILE *fp, int id)
Definition: CNFData.cpp:535
virtual void Save(const char *fname)
Definition: CNFData.cpp:152
int fg_line_buff_empty
Definition: CNFData.h:94
CNFData()
Definition: CNFData.cpp:15
std::set< int > non_supported_block_list
Definition: CNFData.h:125
virtual void PrintMessage(const char *msg)
Definition: CNFData.cpp:247
void ReadLineEx(char *buff, int size=255)
Definition: CNFData.cpp:367
double version
Definition: CNFData.h:48
virtual void SkipDataBlock()
Definition: CNFData.cpp:235
int line
Definition: CNFData.h:92
virtual void StoreDataBlock(CNFDataBlock *block)
Definition: CNFData.cpp:207
void WriteBlockSeparator(FILE *fp)
Definition: CNFData.cpp:533
int EndOfFile()
Definition: CNFData.h:96
void WriteData(FILE *fp, const char *fmt,...)
Definition: CNFData.cpp:486
void PushBackLine(char *buff)
Definition: CNFData.cpp:389
char line_buff[512]
Definition: CNFData.h:93
virtual void Clear()
Definition: CNFData.cpp:30
void ReadRecord(char *buff, const char *fmt,...)
Definition: CNFData.cpp:308
char rec_buff[256]
Definition: CNFData.h:118
virtual ~CNFData()
Definition: CNFData.cpp:28
FILE * fp
Definition: CNFData.h:91
FILE * log_fp
Definition: CNFData.h:90
void WriteSummary(FILE *fp=0)
Definition: CNFData.cpp:581
void ReadRecStart(char *buff)
Definition: CNFData.cpp:259
virtual void Load(const char *fname)
Definition: CNFData.cpp:66
void ReadMultRec(char type, int n_in_rec, int val_n, void *val)
Definition: CNFData.cpp:394
int ReadLine(char *buff, int size=255)
Definition: CNFData.cpp:336
char neu_file[256]
Definition: CNFData.h:89