OpenLexocad  28.0
MemoryWriter.h
Go to the documentation of this file.
1 #pragma once
2 #include <Base/Writer.h>
3 #include <map>
4 
5 
6 namespace Base
7 {
8 class Persistence;
9 
10 
11 class LX_BASE_EXPORT MemoryWriter : public AbstractWriter
12 {
13 public:
14  MemoryWriter(const Base::String& FileName, int application_version, int document_version, int acis_document_version);
15  virtual ~MemoryWriter();
16 
17  ConstIterator begin() const override { return FileList.begin(); }
18  ConstIterator end() const override { return FileList.end(); }
19  void addFile(const Base::String& Name, Base::Persistence* Object, const Base::String& Info = Base::String() ) override;
20  void unsetFilenames() override;
21  const std::vector<std::pair<Base::String, Base::String>> getFilenames() const override;
22  const char* ind() override;
23  void incInd() override;
24  void decInd() override;
25  bool saveInline() override { return false; };
26  int get_application_version() const override;
27  int get_document_version() const override;
28  int get_acis_document_version() const override;
29  void putNextEntry(const Base::String& entryName) override;
30  void setComment(const std::string& comment) override;
31  void setLevel(int level) override;
32  void close() override;
33  bool good() const override;
34 
35  void clear();
36  bool writeToFile() override;
37 
38  std::ios_base::fmtflags flags() override;
39  std::streamsize precision() override;
40  char fill() override;
41  int width() override;
42  void fill(char) override;
43  void width(int) override;
44  void flags(std::ios_base::fmtflags fl) override;
45  void precision(std::streamsize sz) override;
46  uint64_t size() override;
47 
48  void appendWriter(std::shared_ptr<Base::AbstractWriter> p) override;
49  void setCurrentEntry(const Base::String& entryName) override;
50  void write(const char* s, std::streamsize sz) override;
51  std::string getString();
52  std::string getStringWithSubWriters();
53 
54  void addLargeFileToZip(const Base::String& entry, const Base::String& filename) override;
55 
56 
57  void doWrite() override;
58 
59  template <typename T>
61  {
62  (*os._stream) << t;
63  os.doWrite();
64  return os;
65  }
66 
67  template <typename T>
69  {
70  (*os._stream) << t;
71  os.doWrite();
72  return os;
73  }
74 
75  friend Base::MemoryWriter& operator<<(Base::MemoryWriter& os, std::ostream& (*pf)(std::ostream&))
76  {
77  (*os._stream) << pf;
78  os.doWrite();
79  return os;
80  }
81 
82 
83 
84 private:
85  bool copyStreamToBuffer();
86  bool copyStreamToBuffer(std::stringstream* stream, std::shared_ptr<std::vector<char>> buffer);
87  void appendTo(Base::MemoryWriter& w);
88  int _application_version;
89  int _document_version;
90  int _acis_document_version;
91  Base::String _fileName;
92 
93  std::string _comment;
94  int _level = 0;
95 
96  std::map <Base::String, std::pair<std::stringstream*, std::shared_ptr<std::vector<char>>>> _entries;
97  std::vector<std::shared_ptr<Base::AbstractWriter>> _writer;
98  std::shared_ptr<std::vector<char>> _buffer;
99  std::vector<std::pair<Base::String, Base::String>> largeFiles;
100 
101 
102 
103 };
104 
105 } // namespace Base
Base::MemoryWriter::saveInline
bool saveInline() override
Definition: MemoryWriter.h:25
Base::MemoryWriter::incInd
void incInd() override
Base::MemoryWriter::get_acis_document_version
int get_acis_document_version() const override
Base::MemoryWriter::getStringWithSubWriters
std::string getStringWithSubWriters()
Base::MemoryWriter::flags
void flags(std::ios_base::fmtflags fl) override
Base::MemoryWriter::width
int width() override
Base::MemoryWriter::putNextEntry
void putNextEntry(const Base::String &entryName) override
Base::MemoryWriter::MemoryWriter
MemoryWriter(const Base::String &FileName, int application_version, int document_version, int acis_document_version)
Base::Persistence
Persistence class and root of the type system.
Definition: Persistence.h:22
Base::MemoryWriter::setCurrentEntry
void setCurrentEntry(const Base::String &entryName) override
Base::MemoryWriter::setLevel
void setLevel(int level) override
Base::AbstractWriter::_stream
std::ostream * _stream
Definition: Writer.h:107
Base::MemoryWriter::writeToFile
bool writeToFile() override
Base::MemoryWriter::get_document_version
int get_document_version() const override
Base::MemoryWriter::addFile
void addFile(const Base::String &Name, Base::Persistence *Object, const Base::String &Info=Base::String()) override
Base::MemoryWriter::precision
std::streamsize precision() override
Base::MemoryWriter::doWrite
void doWrite() override
Base::MemoryWriter::appendWriter
void appendWriter(std::shared_ptr< Base::AbstractWriter > p) override
Base::MemoryWriter::getFilenames
const std::vector< std::pair< Base::String, Base::String > > getFilenames() const override
Base::MemoryWriter::addLargeFileToZip
void addLargeFileToZip(const Base::String &entry, const Base::String &filename) override
Base::MemoryWriter::clear
void clear()
Base::MemoryWriter::operator<<
friend Base::MemoryWriter & operator<<(Base::MemoryWriter &os, std::ostream &(*pf)(std::ostream &))
Definition: MemoryWriter.h:75
Base::AbstractWriter
Definition: Writer.h:13
Base::MemoryWriter::good
bool good() const override
Base::MemoryWriter::operator<<
friend Base::MemoryWriter & operator<<(Base::MemoryWriter &os, const T &t)
Definition: MemoryWriter.h:68
Base::MemoryWriter::ind
const char * ind() override
Base::MemoryWriter::operator<<
friend Base::MemoryWriter & operator<<(Base::MemoryWriter &os, T &t)
Definition: MemoryWriter.h:60
Base::MemoryWriter::get_application_version
int get_application_version() const override
Writer.h
Base::MemoryWriter::width
void width(int) override
Base::MemoryWriter::close
void close() override
Base::MemoryWriter::fill
void fill(char) override
Base::MemoryWriter::~MemoryWriter
virtual ~MemoryWriter()
Base::MemoryWriter::getString
std::string getString()
Base::MemoryWriter::write
void write(const char *s, std::streamsize sz) override
Base::MemoryWriter::decInd
void decInd() override
Base::MemoryWriter::begin
ConstIterator begin() const override
Definition: MemoryWriter.h:17
Base::AbstractWriter::ConstIterator
std::vector< FileEntry >::const_iterator ConstIterator
Definition: Writer.h:32
Base::MemoryWriter::setComment
void setComment(const std::string &comment) override
Base::String
A Utf-16 (windows) or ucs4 (unix) encoded string class.
Definition: String.h:18
Base::MemoryWriter
Definition: MemoryWriter.h:12
Base::MemoryWriter::size
uint64_t size() override
Base::MemoryWriter::flags
std::ios_base::fmtflags flags() override
Base::MemoryWriter::precision
void precision(std::streamsize sz) override
Base::MemoryWriter::fill
char fill() override
Base::MemoryWriter::end
ConstIterator end() const override
Definition: MemoryWriter.h:18
Base
Definition: AbstractXMLReader.h:5
Base::MemoryWriter::unsetFilenames
void unsetFilenames() override