Limbo 3.5.4
Loading...
Searching...
No Matches
GdsReader.h
Go to the documentation of this file.
1
7
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
17using std::string;
18using std::vector;
19
21namespace 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
132inline 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);}
134inline 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);}
136inline 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);}
138inline 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);}
140inline 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);}
142inline 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);}
144inline 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:
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
197bool read(GdsDataBaseKernel& db, std::istream& fp);
201bool read(GdsDataBaseKernel& db, string const& filename);
202
203} // namespace GdsParser
204
205#endif
enum of GDSII records and data types
Check string is integer, floating point, number... Convert string to upper/lower cases.
GdsDataBase redirects callbacks of GdsDataBaseKernel to ascii callbacks.
Definition GdsReader.h:82
virtual void begin_end_cbk(const char *ascii_record_type)=0
begin or end indicator of a block
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 string_cbk(const char *ascii_record_type, const char *ascii_data_type, string const &str)=0
string callback
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
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 bit_array_cbk(const char *ascii_record_type, const char *ascii_data_type, vector< int > const &vBitArray)=0
bit array 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
Kernel callbacks for GdsReader. These callbacks use enum for record_type and data_type,...
Definition GdsReader.h:40
virtual void begin_end_cbk(GdsRecords::EnumType record_type)=0
begin or end indicator of a block
virtual void integer_2_cbk(GdsRecords::EnumType record_type, GdsData::EnumType data_type, vector< int > const &vInteger)=0
2-byte integer callback
virtual void integer_4_cbk(GdsRecords::EnumType record_type, GdsData::EnumType data_type, vector< int > const &vInteger)=0
4-byte integer callback
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
virtual void string_cbk(GdsRecords::EnumType record_type, GdsData::EnumType data_type, string const &str)=0
string callback
virtual void bit_array_cbk(GdsRecords::EnumType record_type, GdsData::EnumType data_type, vector< int > const &vBitArray)=0
bit array callback
bool operator()(const char *filename)
read from file
char * m_bptr
start position in buffer
Definition GdsReader.h:189
bool operator()(std::istream &fp)
read from stream
std::size_t m_bcap
buffer capacity
Definition GdsReader.h:190
GdsReader(GdsDataBaseKernel &db)
constructor
void print_bit_array_comments(GdsRecords::EnumType enum_record_type, int bit_array, int indent_amount)
print comments
GdsDataBaseKernel & m_db
database
Definition GdsReader.h:187
~GdsReader()
destructor
char * m_buffer
buffer for reading file
Definition GdsReader.h:188
const char * gds_read(std::istream &fp, int &no_read, std::size_t n)
void find_data_type(int numeric, GdsData::EnumType &data_name)
find data type
void find_record_type(int numeric, GdsRecords::EnumType &record_name, int &expected_data_type)
find record
std::size_t m_blen
current buffer size, from m_bptr to m_buffer+m_bcap
Definition GdsReader.h:191
namespace for Limbo.GdsParser
Definition GdsIO.h:20
bool read(GdsDriverDataBase &db, string const &filename)
API function for GdsDriver.
const char * gds_record_ascii(int record_type)
Definition GdsRecords.h:329
const char * gds_data_ascii(int data_type)
Definition GdsRecords.h:347
EnumType
enum type of data type
Definition GdsRecords.h:222
EnumType
enum type of GDSII records
Definition GdsRecords.h:23