Trading System API  3.0
Library for Simulating and Deploying Trading and Investment Strategies
TSAFile.h
1 
2 /* ===================================================================
3 *
4 * T R A D I N G S Y S T E M A P I ™
5 * Copyright © 1999 - 2014 by Peter Ritter ( TradingSystemAPI.com )
6 * A L L R I G H T S R E S E R V E D
7 *
8 * Consult your license regarding permissions and restrictions.
9 * You may obtain a copy of the License at:
10 * http://www.TradingSystemAPI.com/licenses/LICENSE-TSAPI-3.0.html
11 *
12 * ====================================================================
13 */
14 
15 #ifndef TSA_FILE__INCLUDED
16 #define TSA_FILE__INCLUDED
17 
18 #include <fstream>
19 #include <malloc.h>
20 #include <ostream>
21 #include <iostream>
22 #include <sstream>
23 #include <vector>
24 
25 #include "TSATypeDef.h"
26 #include "TSAVariant.h"
27 #include "TSAString.h"
28 #include "TSAOS.h"
29 
30 
31 namespace tsa {
32 
33  class date_time;
34  class variant;
35 
38 
39  /*
40  ** ================================================================
41  ** >>> class string_splitter <<<
42  ** ================================================================
43  */
46 
47  class dll_export string_splitter : public object {
48  protected:
49  char m_cSep;
50  std::vector<variant> m_tokens;
51  std::vector<size_t> m_sep_pos;
52  public:
54  string_splitter(void);
55 
57  virtual ~string_splitter(void);
58 
60  size_t split(const char* string_to_split, char separator);
61 
63  size_t split(const std::string& string_to_split, char separator);
64 
66  const variant& operator[](size_t index) const;
67 
70  size_t size(void) const;
71  };
72 
73  /*
74  ** ================================================================
75  ** >>> class file_parser <<<
76  ** ================================================================
77  */
78  class dll_export text_file_reader : public string_splitter {
79  tsa_declare_testable;
80  private:
81  std::string m_file_name;
82  std::fstream m_stream;
83  char m_rec_buff[20000];
84  public:
85  text_file_reader(void) {}; //IU
86  public:
89  text_file_reader(char separator, const os::path& file);
90 
92  virtual ~text_file_reader(void);
93 
95  void close(void);
96 
98  bool readline(void);
99 
101  const char* line_ptr(void) const;
102 
104  size_t field_count(void) const;
105 
107  const variant& operator[](size_t index) const;
108 
109  public:
110  // IU
111  void print_records(std::ostream& ByteStream, const tsa::string& sSourceFile, char cSep);
112  };
113 
115 
116 
117  enum mst {
118  nl //message stream line terminator
119  };
120 
121  /*
122  ** ================================================================
123  ** >>> class MessageStream <<<
124  ** ================================================================
125  */
126  class MessageStream {
127  private:
128  std::ostream* m_pStream;
129  public:
130  MessageStream(void);
131  ~MessageStream(void);
132  void operator= (std::ostream& stream);
133  void UnsetStream(void);
134  MessageStream& operator << (char);
135  MessageStream& operator << (unsigned char);
136  MessageStream& operator << (signed char);
137  MessageStream& operator << (const char*);
138  MessageStream& operator << (const unsigned char*);
139  MessageStream& operator << (const signed char*);
140  MessageStream& operator << (short _v);
141  MessageStream& operator << (unsigned short);
142  MessageStream& operator << (int _v);
143  MessageStream& operator << (unsigned int);
144  MessageStream& operator << (long _v);
145  MessageStream& operator << (unsigned long);
146  MessageStream& operator << (float);
147  MessageStream& operator << (double);
148  MessageStream& operator << (bool);
149  MessageStream& operator << (long double);
150  MessageStream& operator << (tsa::mst); //end lines with 'nl' (see enum above)
151  };
152 
153  /*
154  ** ================================================================
155  ** >>> class storage_stream <<<
156  ** ================================================================
157  */
158  class storage_stream : virtual public object {
159  tsa_declare_testable;
160  public:
161  virtual size_t tellp(void) = 0;
162  virtual void seekp(size_t offset) = 0;
163  };
164 
165  /*
166  ** ================================================================
167  ** >>> class out_storage_stream <<<
168  ** ================================================================
169  */
170  class out_storage_stream : public storage_stream {
171  tsa_declare_testable;
172  public:
173  out_storage_stream() {}
174  virtual ~out_storage_stream() {}
175  out_storage_stream& operator<< (int64_t _data);
176  out_storage_stream& operator<< (int _data);
177  out_storage_stream& operator<< (short _data);
178  out_storage_stream& operator<< (unsigned short _data);
179  out_storage_stream& operator<< (unsigned _data);
180  out_storage_stream& operator<< (uint64_t _data);
181  out_storage_stream& operator<< (float _data);
182  out_storage_stream& operator<< (double _data);
183  out_storage_stream& operator<< (bool _data);
184  out_storage_stream& operator<< (const tsa::string& _sStr);
185  out_storage_stream& operator<< (const std::string& _sStr);
186  out_storage_stream& operator<< (const variant& _Var);
187  out_storage_stream& operator<< (const date_time& _time);
188  virtual void write(const char* pData, size_t size) = 0;
189  };
190 
191  /*
192  ** ================================================================
193  ** >>> class ostringstream_base <<<
194  ** ================================================================
195  */
196  class ostringstream_base : public storage_stream {
197  tsa_declare_testable;
198  public:
199  ostringstream_base() {}
200  virtual ~ostringstream_base() {}
201 
202  ostringstream_base& operator<< (int _data);
203  ostringstream_base& operator<< (short _data);
204  ostringstream_base& operator<< (unsigned short _data);
205  ostringstream_base& operator<< (unsigned _data);
206  ostringstream_base& operator<< (uint64_t _data);
207  ostringstream_base& operator<< (int64_t _data);
208  ostringstream_base& operator<< (float _data);
209  ostringstream_base& operator<< (double _data);
210  ostringstream_base& operator<< (bool _data);
211  //ostringstream_base& operator<< (const tsa::string& _sStr);
212  ostringstream_base& operator<< (char _data);
213  ostringstream_base& operator<< (char* _data);
214  ostringstream_base& operator<< (const std::string& _data);
215  virtual void write(const char* pData, size_t size) = 0;
216  };
217 
218 
219  /*
220  ** ================================================================
221  ** >>> class in_storage_stream <<<
222  ** ================================================================
223  */
224  class in_storage_stream : public storage_stream {
225  tsa_declare_testable;
226  public:
227  in_storage_stream(void) {}
228  virtual ~in_storage_stream(void) {}
229 
230  in_storage_stream& operator>> (int&);
231  in_storage_stream& operator>> (int64_t&);
232  in_storage_stream& operator>> (short&);
233  in_storage_stream& operator>> (unsigned short&);
234  in_storage_stream& operator>> (unsigned&);
235  in_storage_stream& operator>> (uint64_t&);
236  in_storage_stream& operator>> (float&);
237  in_storage_stream& operator>> (double&);
238  in_storage_stream& operator>> (bool&);
239  in_storage_stream& operator>> (std::string&);
240  in_storage_stream& operator>> (string&);
241  in_storage_stream& operator>> (variant&);
242  in_storage_stream& operator>> (date_time&);
243  public:
244  virtual void read(char* pData, size_t size) = 0;
245  };
246 
247 
248  /*
249  ** ================================================================
250  ** >>> class io_file_storage_stream <<<
251  ** ================================================================
252  */
253 
254  class io_file_storage_stream : public out_storage_stream, public in_storage_stream {
255  std::fstream m_Stream;
256  string m_sFileName;
257  public:
258  io_file_storage_stream(const tsa::string& file_name, bool truncate = true);
259  io_file_storage_stream(void) {}
260  virtual ~io_file_storage_stream(void);
261  virtual void write(const char* data, size_t sz);
262  virtual void read(char* data, size_t sz);
263  void close(void);
264  bool is_open(void);
265  virtual size_t tellp(void);
266  virtual void seekp(size_t);
267  const tsa::string& GetFileName(void) const {
268  return m_sFileName;
269  }
270  };
271 
272  /*
273  ** ================================================================
274  ** >>> class in_file_storage_stream <<<
275  ** ================================================================
276  */
277 
278  class in_file_storage_stream : public in_storage_stream {
279  std::fstream m_Stream;
280  public:
281  in_file_storage_stream(const tsa::string& file_name);
282  virtual ~in_file_storage_stream(void);
283 
284  virtual void read(char* data, size_t sz);
285  void close(void);
286  bool is_open(void);
287  virtual size_t tellp(void);
288  virtual void seekp(size_t);
289  };
290 
291  /*
292  ** ================================================================
293  ** >>> class mem_buff <<<
294  ** ================================================================
295  */
296  class mem_buff : public object {
297  char* m_pBytes;
298  size_t m_size;
299  public:
300  mem_buff(size_t size = 0);
301  mem_buff(char* data, size_t size);
302  virtual ~mem_buff();
303  void reset(char* data, size_t size);
304  void resize(size_t size);
305  size_t size(void) const;
306  operator char* (void) const;
307  };
308 
309  /*
310  ** ================================================================
311  ** >>> class io_mem_storage_stream <<<
312  ** ================================================================
313  */
314  class io_mem_storage_stream : public out_storage_stream, public in_storage_stream {
315  private:
316  char* m_data_ptr;
317  size_t m_position;
318  size_t m_nBuffSize;
319  size_t m_nResizeIncr;
320  public:
321  io_mem_storage_stream(size_t reserve = 10000);
322  //copies the buffer
323  io_mem_storage_stream(const char* data, size_t size);
324  virtual ~io_mem_storage_stream(void);
325  virtual void write(const char* data, size_t size);
326  virtual void read(char*, size_t size);
327  virtual size_t tellp(void);
328  virtual void seekp(size_t _nPos);
329  void reserve(size_t);
330  size_t capacity(void) const;
331  void resize_increment(size_t _nIncr);
332  char* data(void) const;
333  std::string as_string(void);
334  };
335 
336  /*
337  ** ================================================================
338  ** >>> class ostringstream_base <<<
339  ** ================================================================
340  */
341  class ostringstream : public ostringstream_base {
342  private:
343  char* m_data_ptr;
344  size_t m_position;
345  size_t m_nBuffSize;
346  size_t m_nResizeIncr;
347  public:
348  ostringstream(size_t initialSize = 10000);
349  ostringstream(const char* data, size_t size);
350  virtual ~ostringstream(void);
351  virtual void write(const char* data, size_t size);
352  virtual size_t tellp(void);
353  virtual void seekp(size_t pos);
354  void reserve(size_t);
355  size_t capacity(void) const;
356  void resize_increment(size_t _nIncr);
357  char* data(void) const;
358  std::string as_string(void);
359  };
360 
361  /*
362  ** ================================================================
363  ** >>> class in_mem_storage_stream <<<
364  ** ================================================================
365  */
366  class in_mem_storage_stream : public in_storage_stream {
367  private:
368  const char* m_data_ptr;
369  size_t m_position;
370  size_t m_nBuffSize;
371  public:
372  in_mem_storage_stream(const char* pData, size_t size);
373  virtual ~in_mem_storage_stream(void);
374  virtual void seekp(size_t);
375  virtual void read(char*, size_t size);
376  virtual size_t tellp(void);
377  size_t capacity(void) const;
378  const char* data(void) const;
379  };
380 
381  /*
382  ** ================================================================
383  ** >>> class BLOB <<<
384  ** ================================================================
385  */
386  class BLOB : public io_mem_storage_stream {
387  public:
388  BLOB(void) {}
389  BLOB(size_t capacity) {
390  reserve(capacity);
391  }
392  ~BLOB(void) {}
393  };
394 
395 } //tsa
396 
397 #endif
Utility class to manipulate file system paths. This class is intended to fulfil the requirements of t...
Definition: TSAOS.h:36
Namespace for the &#39;Trading System API&#39; library.
Definition: original1.TSA3Core.cpp:20
variant objects can represent values of different types.
Definition: TSAVariant.h:140
Parent class for many library classes.
Definition: TSATypeDef.h:462
Support class for splitting &#39;record&#39; strings into &#39;fields&#39; using separator characters such as &#39;...
Definition: TSAFile.h:47
Class representing a gregorian-date and time-of-day combination. The time component has microsecond r...
Definition: TSATime.h:428