Limbo
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
GdsReader.h
Go to the documentation of this file.
1 
8 #ifndef _GDSPARSER_GDSREADER_H
9 #define _GDSPARSER_GDSREADER_H
10 
11 #include <string>
12 #include <vector>
13 #include <istream>
15 #include <limbo/string/String.h>
16 
17 using std::string;
18 using std::vector;
19 
21 namespace GdsParser
22 {
23 
34 
40 {
41  public:
46  virtual void bit_array_cbk(GdsRecords::EnumType record_type, GdsData::EnumType data_type, vector<int> const& vBitArray) = 0;
51  virtual void integer_2_cbk(GdsRecords::EnumType record_type, GdsData::EnumType data_type, vector<int> const& vInteger) = 0;
56  virtual void integer_4_cbk(GdsRecords::EnumType record_type, GdsData::EnumType data_type, vector<int> const& vInteger) = 0;
61  virtual void real_4_cbk(GdsRecords::EnumType record_type, GdsData::EnumType data_type, vector<double> const& vFloat) = 0;
66  virtual void real_8_cbk(GdsRecords::EnumType record_type, GdsData::EnumType data_type, vector<double> const& vFloat) = 0;
71  virtual void string_cbk(GdsRecords::EnumType record_type, GdsData::EnumType data_type, string const& str) = 0;
74  virtual void begin_end_cbk(GdsRecords::EnumType record_type) = 0;
75 };
76 
82 {
83  public:
88  virtual void bit_array_cbk(const char* ascii_record_type, const char* ascii_data_type, vector<int> const& vBitArray) = 0;
93  virtual void integer_2_cbk(const char* ascii_record_type, const char* ascii_data_type, vector<int> const& vInteger) = 0;
98  virtual void integer_4_cbk(const char* ascii_record_type, const char* ascii_data_type, vector<int> const& vInteger) = 0;
103  virtual void real_4_cbk(const char* ascii_record_type, const char* ascii_data_type, vector<double> const& vFloat) = 0;
108  virtual void real_8_cbk(const char* ascii_record_type, const char* ascii_data_type, vector<double> const& vFloat) = 0;
113  virtual void string_cbk(const char* ascii_record_type, const char* ascii_data_type, string const& str) = 0;
116  virtual void begin_end_cbk(const char* ascii_record_type) = 0; // begin or end indicater of a block
117  private:
121  virtual void bit_array_cbk(GdsRecords::EnumType record_type, GdsData::EnumType data_type, vector<int> const& vBitArray);
122  virtual void integer_2_cbk(GdsRecords::EnumType record_type, GdsData::EnumType data_type, vector<int> const& vInteger);
123  virtual void integer_4_cbk(GdsRecords::EnumType record_type, GdsData::EnumType data_type, vector<int> const& vInteger);
124  virtual void real_4_cbk(GdsRecords::EnumType record_type, GdsData::EnumType data_type, vector<double> const& vFloat);
125  virtual void real_8_cbk(GdsRecords::EnumType record_type, GdsData::EnumType data_type, vector<double> const& vFloat);
126  virtual void string_cbk(GdsRecords::EnumType record_type, GdsData::EnumType data_type, string const& str);
127  virtual void begin_end_cbk(GdsRecords::EnumType record_type); // begin or end indicater of a block
129 };
130 
131 // inline redirection from enum callbacks to ascii callbacks
132 inline void GdsDataBase::bit_array_cbk(GdsRecords::EnumType record_type, GdsData::EnumType data_type, vector<int> const& vBitArray)
133 {this->bit_array_cbk(gds_record_ascii(record_type), gds_data_ascii(data_type), vBitArray);}
134 inline void GdsDataBase::integer_2_cbk(GdsRecords::EnumType record_type, GdsData::EnumType data_type, vector<int> const& vInteger)
135 {this->integer_2_cbk(gds_record_ascii(record_type), gds_data_ascii(data_type), vInteger);}
136 inline void GdsDataBase::integer_4_cbk(GdsRecords::EnumType record_type, GdsData::EnumType data_type, vector<int> const& vInteger)
137 {this->integer_4_cbk(gds_record_ascii(record_type), gds_data_ascii(data_type), vInteger);}
138 inline void GdsDataBase::real_4_cbk(GdsRecords::EnumType record_type, GdsData::EnumType data_type, vector<double> const& vFloat)
139 {this->real_4_cbk(gds_record_ascii(record_type), gds_data_ascii(data_type), vFloat);}
140 inline void GdsDataBase::real_8_cbk(GdsRecords::EnumType record_type, GdsData::EnumType data_type, vector<double> const& vFloat)
141 {this->real_8_cbk(gds_record_ascii(record_type), gds_data_ascii(data_type), vFloat);}
142 inline void GdsDataBase::string_cbk(GdsRecords::EnumType record_type, GdsData::EnumType data_type, string const& str)
143 {this->string_cbk(gds_record_ascii(record_type), gds_data_ascii(data_type), str);}
144 inline void GdsDataBase::begin_end_cbk(GdsRecords::EnumType record_type) // begin or end indicater of a block
145 {this->begin_end_cbk(gds_record_ascii(record_type));}
146 
150 {
151  public:
156  ~GdsReader();
157 
160  bool operator()(const char* filename);
163  bool operator()(std::istream& fp);
164 
165  protected:
170  void find_record_type (int numeric, GdsRecords::EnumType& record_name, int& expected_data_type);
174  void find_data_type (int numeric, GdsData::EnumType& data_name);
179  void print_bit_array_comments (GdsRecords::EnumType enum_record_type, int bit_array, int indent_amount);
180 
185  const char* gds_read(std::istream& fp, int& no_read, std::size_t n);
186 
188  char* m_buffer;
189  char* m_bptr;
190  std::size_t m_bcap;
191  std::size_t m_blen;
192 };
193 
197 bool read(GdsDataBaseKernel& db, std::istream& fp);
201 bool read(GdsDataBaseKernel& db, string const& filename);
202 
203 } // namespace GdsParser
204 
205 #endif
GdsDataBaseKernel & m_db
database
Definition: GdsReader.h:187
virtual void real_4_cbk(const char *ascii_record_type, const char *ascii_data_type, vector< double > const &vFloat)=0
4-byte floating point number callback
virtual void integer_4_cbk(const char *ascii_record_type, const char *ascii_data_type, vector< int > const &vInteger)=0
4-byte integer callback
virtual void bit_array_cbk(GdsRecords::EnumType record_type, GdsData::EnumType data_type, vector< int > const &vBitArray)=0
bit array callback
enum of GDSII records and data types
virtual void bit_array_cbk(const char *ascii_record_type, const char *ascii_data_type, vector< int > const &vBitArray)=0
bit array callback
EnumType
enum type of data type
Definition: GdsRecords.h:222
virtual void string_cbk(GdsRecords::EnumType record_type, GdsData::EnumType data_type, string const &str)=0
string callback
char * m_bptr
start position in buffer
Definition: GdsReader.h:189
std::size_t m_blen
current buffer size, from m_bptr to m_buffer+m_bcap
Definition: GdsReader.h:191
const char * gds_data_ascii(int data_type)
Definition: GdsRecords.h:347
GdsDataBase redirects callbacks of GdsDataBaseKernel to ascii callbacks
Definition: GdsReader.h:81
virtual void real_4_cbk(GdsRecords::EnumType record_type, GdsData::EnumType data_type, vector< double > const &vFloat)=0
4-byte floating point number callback
virtual void real_8_cbk(GdsRecords::EnumType record_type, GdsData::EnumType data_type, vector< double > const &vFloat)=0
8-byte floating point number callback
bool operator()(const char *filename)
read from file
virtual void integer_2_cbk(const char *ascii_record_type, const char *ascii_data_type, vector< int > const &vInteger)=0
2-byte integer callback
virtual void string_cbk(const char *ascii_record_type, const char *ascii_data_type, string const &str)=0
string callback
GdsReader(GdsDataBaseKernel &db)
constructor
virtual void real_8_cbk(const char *ascii_record_type, const char *ascii_data_type, vector< double > const &vFloat)=0
8-byte floating point number callback
void find_data_type(int numeric, GdsData::EnumType &data_name)
find data type
namespace for Limbo.GdsParser
Definition: GdsIO.h:19
virtual void integer_2_cbk(GdsRecords::EnumType record_type, GdsData::EnumType data_type, vector< int > const &vInteger)=0
2-byte integer callback
char * m_buffer
buffer for reading file
Definition: GdsReader.h:188
Kernel callbacks for GdsReader. These callbacks use enum for record_type and data_type, which is faster than ascii callbacks.
Definition: GdsReader.h:39
const char * gds_record_ascii(int record_type)
Definition: GdsRecords.h:329
virtual void begin_end_cbk(const char *ascii_record_type)=0
begin or end indicator of a block
void find_record_type(int numeric, GdsRecords::EnumType &record_name, int &expected_data_type)
find record
~GdsReader()
destructor
Check string is integer, floating point, number... Convert string to upper/lower cases.
EnumType
enum type of GDSII records
Definition: GdsRecords.h:23
virtual void integer_4_cbk(GdsRecords::EnumType record_type, GdsData::EnumType data_type, vector< int > const &vInteger)=0
4-byte integer callback
std::size_t m_bcap
buffer capacity
Definition: GdsReader.h:190
void print_bit_array_comments(GdsRecords::EnumType enum_record_type, int bit_array, int indent_amount)
print comments
virtual void begin_end_cbk(GdsRecords::EnumType record_type)=0
begin or end indicator of a block
const char * gds_read(std::istream &fp, int &no_read, std::size_t n)
bool read(GdsDriverDataBase &db, string const &filename)
API function for GdsDriver.