OpenLexocad  27.0
Writer.h
Go to the documentation of this file.
1 #ifndef __CA_Writer_H__
2 #define __CA_Writer_H__
3 
4 #include <Base/base_defines.h>
5 
6 #pragma warning(push)
7 #pragma warning(disable : 4100)
8 #pragma warning(disable : 4005)
9 
10 #include <Base/FileInfo.h>
11 #include <Base/GlobalAttachment.h>
12 #include <Base/GlobalSave.h>
13 #include <Base/String.h>
14 
15 #include <fstream>
16 #include <map>
17 #include <memory>
18 #include <set>
19 #include <string>
20 
21 #pragma warning(pop)
22 
23 namespace Base
24 {
25 class Persistance;
26 
28 {
29 protected:
30  struct FileEntry
31  {
34  };
35 
36 public:
39  : indent(0)
40  , _globalSave(0)
41  , _stream(0){
42 
43  };
44 
45  virtual ~AbstractWriter(){
46 
47  };
48 
49  typedef std::vector<FileEntry>::const_iterator ConstIterator;
50  virtual ConstIterator begin(void) const = 0;
51  virtual ConstIterator end(void) const = 0;
52  virtual void addFile(const Base::String& Name, Base::Persistance* Object) = 0;
53  virtual void unsetFilenames() = 0;
54  virtual const std::vector<Base::String>& getFilenames() const = 0;
55  virtual const char* ind(void) = 0;
56  virtual void incInd(void) = 0;
57  virtual void decInd(void) = 0;
58  virtual bool saveInline() = 0;
59 
60  virtual void set_GlobalSave(Base::GlobalSave* p) { _globalSave = p; };
61  virtual Base::GlobalSave* get_GlobalSave() { return _globalSave; };
62 
63  virtual int get_application_version() const = 0;
64  virtual int get_document_version() const = 0;
65  virtual int get_acis_document_version() const = 0;
66 
67  virtual void putNextEntry(const Base::String& entryName) = 0;
68 
69  virtual std::ios_base::fmtflags flags() = 0;
70  virtual std::streamsize precision() = 0;
71  virtual char fill() = 0;
72  virtual int width() = 0;
73  virtual void fill(char) = 0;
74  virtual void width(int) = 0;
75  virtual void flags(std::ios_base::fmtflags fl) = 0;
76  virtual void precision(std::streamsize sz) = 0;
77  virtual bool good() const = 0;
78  virtual void close(){};
79  virtual bool writeToFile() { return true; };
80  virtual uint64_t size() { return 0; }
81  virtual void write(const char* s, std::streamsize sz) = 0;
82 
83  template <typename T>
85  {
86  (*os._stream) << t;
87  return os;
88  }
89 
90  template <typename T>
92  {
93  (*os._stream) << t;
94  return os;
95  }
96 
97  friend Base::AbstractWriter& operator<<(Base::AbstractWriter& os, std::ostream& (*pf)(std::ostream&))
98  {
99  (*os._stream) << pf;
100  return os;
101  }
102 
103 
104  virtual void setComment(const std::string& comment) = 0;
105  virtual void setLevel(int level) = 0;
106 
107  virtual void appendWriter(std::shared_ptr<Base::AbstractWriter> p){};
108  virtual void setCurrentEntry(const Base::String& /*entryName*/){};
109 
110  virtual void addLargeFileToZip(Base::String entry, Base::String filename) = 0;
111 
112 
113 
114 protected:
115  std::vector<FileEntry> FileList;
116  std::vector<Base::String> FileNames;
117 
118  short indent;
120  std::ostream* _stream;
121 };
122 
123 
125 {
126 public:
127  Writer(const Base::String& FileName, int application_version, int document_version, int acis_document_version);
128  ~Writer();
129 
130  ConstIterator begin(void) const override { return FileList.begin(); };
131  ConstIterator end(void) const override { return FileList.end(); };
132  void addFile(const Base::String& Name, Base::Persistance* Object) override;
133  void unsetFilenames() override;
134  const std::vector<Base::String>& getFilenames() const override;
135  const char* ind(void) override;
136  void incInd(void) override;
137  void decInd(void) override;
138  bool saveInline() override { return false; };
139  int get_application_version() const override;
140  int get_document_version() const override;
141  int get_acis_document_version() const override;
142  void putNextEntry(const Base::String& entryName) override;
143  void setComment(const std::string& comment) override;
144  void setLevel(int level) override;
145  // std::ostream * getStream();
146  void close() override;
147  bool good() const override;
148 
149  std::ios_base::fmtflags flags() override;
150  std::streamsize precision() override;
151  char fill() override;
152  int width() override;
153  void fill(char) override;
154  void width(int) override;
155  void flags(std::ios_base::fmtflags fl) override;
156  void precision(std::streamsize sz) override;
157  void write(const char* s, std::streamsize sz) override;
159 
160 private:
161  int _application_version;
162  int _document_version;
163  int _acis_document_version;
164 };
165 
166 
168 {
169 public:
170  Stream(std::ostream& os);
171  ~Stream();
172 
173  void setSaveInline(bool onoff);
174  ConstIterator begin(void) const override { return FileList.begin(); }
175  ConstIterator end(void) const override { return FileList.end(); }
176  void addFile(const Base::String& Name, Base::Persistance* Object) override;
177  void unsetFilenames() override;
178  const std::vector<Base::String>& getFilenames() const override;
179  const char* ind(void) override;
180  void incInd(void) override;
181  void decInd(void) override;
182  bool saveInline() override;
183  int get_application_version() const override { return 1; };
184  int get_document_version() const override { return 1; };
185  int get_acis_document_version() const override { return 1; };
186  void putNextEntry(const Base::String& entryName) override;
187  void setComment(const std::string& comment) override;
188  void setLevel(int level) override;
189  void close() override;
190  bool good() const override;
191 
192  std::ios_base::fmtflags flags() override;
193  std::streamsize precision() override;
194  char fill() override;
195  int width() override;
196  void fill(char) override;
197  void width(int) override;
198  void flags(std::ios_base::fmtflags fl) override;
199  void precision(std::streamsize sz) override;
200  void write(const char* s, std::streamsize sz) override;
202 
203 private:
204  bool _saveInline;
205 };
206 
207 
208 
209 class Reader
210 {
211 public:
212  Reader(std::istream* is, Base::String filename, Base::GlobalAttachment* ga) : _stream(is), _filename(filename), _globalAttachment(ga){};
213  ~Reader(){};
214 
215  std::istream* getStream() { return _stream; }
216  Base::String getFilename() { return _filename; }
217  Base::GlobalAttachment* getGlobalAttachment() { return _globalAttachment; }
218 
219 private:
220  std::istream* _stream;
221  Base::String _filename;
222  Base::GlobalAttachment* _globalAttachment;
223 };
224 
225 } // namespace Base
226 
227 
228 #endif // __CA_Writer_H__
std::vector< FileEntry > FileList
Definition: Writer.h:115
bool saveInline() override
Definition: Writer.h:138
AbstractWriter()
opens the file and write the first file
Definition: Writer.h:38
short indent
Definition: Writer.h:118
void addLargeFileToZip(Base::String entry, Base::String filename) override
Definition: Writer.h:158
virtual bool writeToFile()
Definition: Writer.h:79
#define BASE_EXPORT
Definition: base_defines.h:12
Base::String FileName
Definition: Writer.h:32
virtual void close()
Definition: Writer.h:78
Definition: GlobalSave.h:10
A Utf-16 (windows) or ucs4 (unix) encoded string class.
Definition: String.h:29
Core::PropertyText comment
Definition: CoreDocument.h:157
ConstIterator end(void) const override
Definition: Writer.h:131
int get_acis_document_version() const override
Definition: Writer.h:185
Definition: Writer.h:209
friend Base::AbstractWriter & operator<<(Base::AbstractWriter &os, T &t)
Definition: Writer.h:84
std::ostream * _stream
Definition: Writer.h:120
virtual Base::GlobalSave * get_GlobalSave()
Definition: Writer.h:61
Persistance class and root of the type system.
Definition: Persistance.h:27
ConstIterator end(void) const override
Definition: Writer.h:175
std::istream * getStream()
Definition: Writer.h:215
Base::Persistance * Object
Definition: Writer.h:33
Core::PropertyText filename
Definition: CoreDocument.h:151
virtual void set_GlobalSave(Base::GlobalSave *p)
Definition: Writer.h:60
int get_document_version() const override
Definition: Writer.h:184
int get_application_version() const override
Definition: Writer.h:183
friend Base::AbstractWriter & operator<<(Base::AbstractWriter &os, const T &t)
Definition: Writer.h:91
Definition: GlobalAttachment.h:11
Definition: Writer.h:27
Definition: Writer.h:124
Reader(std::istream *is, Base::String filename, Base::GlobalAttachment *ga)
Definition: Writer.h:212
virtual uint64_t size()
Definition: Writer.h:80
Definition: Writer.h:167
Definition: Writer.h:30
Base::String getFilename()
Definition: Writer.h:216
ConstIterator begin(void) const override
Definition: Writer.h:130
virtual ~AbstractWriter()
Definition: Writer.h:45
ConstIterator begin(void) const override
Definition: Writer.h:174
Definition: AbstractXMLReader.h:8
virtual void setCurrentEntry(const Base::String &)
Definition: Writer.h:108
~Reader()
Definition: Writer.h:213
Base::GlobalSave * _globalSave
Definition: Writer.h:119
std::vector< FileEntry >::const_iterator ConstIterator
Definition: Writer.h:47
friend Base::AbstractWriter & operator<<(Base::AbstractWriter &os, std::ostream &(*pf)(std::ostream &))
Definition: Writer.h:97
Base::GlobalAttachment * getGlobalAttachment()
Definition: Writer.h:217
virtual void appendWriter(std::shared_ptr< Base::AbstractWriter > p)
Definition: Writer.h:107
void addLargeFileToZip(Base::String entry, Base::String filename) override
Definition: Writer.h:201
std::vector< Base::String > FileNames
Definition: Writer.h:116