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