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