Giri's C++ Support Library
C++ library providing everything you need to quickly create awesome applications.
Blob.h
Go to the documentation of this file.
1 
10 #ifndef SUPPORTLIB_BLOB_H
11 #define SUPPORTLIB_BLOB_H
12 #include "Object.h"
13 #include "Base64.h"
14 #include "FileSystem.h"
15 #include <vector>
16 #include <string>
17 #include <boost/iostreams/filter/gzip.hpp>
18 #include <boost/iostreams/filtering_stream.hpp>
19 namespace giri {
23  class Blob : private std::vector<char>, public Object<Blob>
24  {
25  public:
26  using std::vector<char>::push_back;
27  using std::vector<char>::pop_back;
28  using std::vector<char>::emplace_back;
29  using std::vector<char>::front;
30  using std::vector<char>::back;
31  using std::vector<char>::operator[];
32  using std::vector<char>::operator=;
33  using std::vector<char>::begin;
34  using std::vector<char>::end;
35  using std::vector<char>::cbegin;
36  using std::vector<char>::cend;
37  using std::vector<char>::crbegin;
38  using std::vector<char>::crend;
39  using std::vector<char>::assign;
40  using std::vector<char>::size;
41  using std::vector<char>::at;
42  using std::vector<char>::clear;
43  using std::vector<char>::empty;
44  using std::vector<char>::erase;
45  using std::vector<char>::insert;
46  using std::vector<char>::resize;
47  using std::vector<char>::reserve;
48  using std::vector<char>::iterator;
49  using std::vector<char>::const_iterator;
50  using std::vector<char>::data;
51  using std::vector<char>::vector;
52 
56  std::string toString() const {
57  return std::string(begin(), end());
58  }
59 
64  void loadString(const std::string& s) {
65  assign(s.begin(), s.end());
66  }
67 
75  bool toFile(const std::filesystem::path& file){
76  return FileSystem::WriteFile(file, *this);
77  }
78 
84  void loadFile(const std::filesystem::path& file) {
85  *this = FileSystem::LoadFile(file);
86  }
87 
91  std::string toBase64() const {
92  return Base64::Encode(*this);
93  }
94 
99  void loadBase64(const std::string& data) {
100  *this = Base64::Decode(data);
101  }
102 
106  void compress(){
107  boost::iostreams::filtering_istreambuf in;
108  in.push(boost::iostreams::gzip_compressor(boost::iostreams::zlib::best_compression));
109  in.push(boost::iostreams::array_source(data(), size()));
110  assign(std::istreambuf_iterator<char>{&in}, {});
111  }
112 
116  void decompress(){
117  boost::iostreams::filtering_istreambuf in;
118  in.push(boost::iostreams::gzip_decompressor(boost::iostreams::zlib::best_compression));
119  in.push(boost::iostreams::array_source(data(), size()));
120  assign(std::istreambuf_iterator<char>{&in}, {});
121  }
122  };
123 }
124 #endif //SUPPORTLIB_BLOB_H
Contains Base64 encoding/decoding algorithms.
Contains FileSystem I/O functions.
Base class of all classes.
Binary large object.
Definition: Blob.h:24
void loadString(const std::string &s)
Definition: Blob.h:64
void loadBase64(const std::string &data)
Definition: Blob.h:99
void compress()
Definition: Blob.h:106
std::string toString() const
Definition: Blob.h:56
bool toFile(const std::filesystem::path &file)
Definition: Blob.h:75
void decompress()
Definition: Blob.h:116
std::string toBase64() const
Definition: Blob.h:91
void loadFile(const std::filesystem::path &file)
Definition: Blob.h:84
Base Class of all classes.
Definition: Object.h:33
std::vector< char > Decode(const std::string &base64Data)
Definition: Base64.h:104
std::string Encode(const std::vector< char > &data)
Definition: Base64.h:60
std::vector< char > LoadFile(const std::filesystem::path &file)
Definition: FileSystem.h:44
bool WriteFile(const std::filesystem::path &file, const std::vector< char > &data)
Definition: FileSystem.h:68
Namespace for giri's C++ support library.
Definition: Base64.h:47