SIS
Symmetric Index Structures
|
00001 #ifndef VOIDSEQUENCEADAPTER_HPP 00002 #define VOIDSEQUENCEADAPTER_HPP 00003 00004 #include "../cppbase.hpp" 00005 00006 #include <cassert> 00007 #include <iostream> 00008 #include <fstream> 00009 #include <istream> 00010 #include <string> 00011 00012 #include "VoidSequenceAdapterBase.hpp" 00013 00014 #define ENCODING_PLAIN (0) 00015 #define ENCODING_UTF8 (1) 00016 00017 #define mVoidSequenceElement( voidseq, position ) ((voidseq)->seq + ((position)*(voidseq)->elementSize)) 00018 00019 namespace lmu { namespace cis { namespace sis { 00020 00021 00032 00033 class VoidSequenceAdapter : public virtual VoidSequenceAdapterBase { 00034 00035 UINT elementSize_; 00036 VoidSequence* C_VoidSequence; 00037 UINT symbolSize_ = 1; 00038 UINT bitsPerSymbol_ = 8; 00039 UINT encoding_ = ENCODING_PLAIN; 00040 public: 00053 VoidSequenceAdapter() 00054 : VoidSequenceAdapter(1) { 00055 if (DEBUG_LEVEL > 5) std::cerr << "VoidSequenceAdapter()" << std::endl; 00056 } 00057 00067 VoidSequenceAdapter(UINT elementSize) 00068 : elementSize_(elementSize) 00069 , C_VoidSequence(VoidSequenceInit(elementSize)) { 00070 if (DEBUG_LEVEL > 5) std::cerr << "VoidSequenceAdapter(UINT elementSize)" << std::endl; 00071 } 00072 00074 VoidSequenceAdapter(const std::string& input) 00075 : VoidSequenceAdapter(1, input.c_str()) { 00076 if (DEBUG_LEVEL > 5) std::cerr << "VoidSequenceAdapter(const std::string& input)" << std::endl; 00077 } 00078 00080 // VoidSequenceAdapter(const S8* input) 00081 // : VoidSequenceAdapter(1, input) { 00082 // if (DEBUG_LEVEL > 5) std::cerr << "VoidSequenceAdapter(const S8* input)" << std::endl; 00083 // } 00084 00090 VoidSequenceAdapter(UINT elementSize, const S8* input) 00091 : VoidSequenceAdapter(1) { 00092 if (DEBUG_LEVEL > 5) std::cerr << "VoidSequenceAdapter(UINT elementSize, const S8* input)" << std::endl; 00093 Add(input); 00094 } 00095 00097 VoidSequenceAdapter(const VoidSequenceAdapter&) = delete; 00098 00100 VoidSequenceAdapter(VoidSequenceAdapter&&) = delete; 00101 00103 VoidSequenceAdapter& operator=(const VoidSequenceAdapter&) = delete; 00104 00111 virtual ~VoidSequenceAdapter() { 00112 if (DEBUG_LEVEL > 5) std::cerr << "virtual ~VoidSequenceAdapter()" << std::endl; 00113 VoidSequenceFree(C_VoidSequence); 00114 } 00115 00123 virtual void Add(const S8* input); 00125 virtual inline void Add(const std::string& input) { Add(input.c_str()); } 00126 00128 virtual void Add(const void* elementToAdd); 00129 00131 virtual void Set( UINT position, const void * element ); 00132 virtual void Write( FILE * fp, UINT * sizes, UINT numberOfSizes ); 00133 virtual VoidSequence * Read( FILE * fp ); 00134 virtual VoidSequence * Read( const S8* fn ); 00135 virtual inline VoidSequence * Read( const std::string& fn ) { return Read(fn.c_str()); } 00136 virtual void Shrink(); 00137 virtual void Append( const VoidSequence * s ); 00138 virtual void Append( const VoidSequenceAdapter& s ); 00139 virtual void Cpy( VoidSequence * dest, const VoidSequence * src ); 00140 00141 virtual VoidSequence* get() const; 00142 // VoidSequence&& get() { return std::move(C_VoidSequence); } 00143 virtual VoidSequence* dollarize(VoidSequence * line); 00144 virtual VoidSequenceAdapter& dollarizer(); 00145 virtual VoidSequence* dollarize() const; 00146 00147 virtual const S8* print() const; 00148 virtual void clear(); 00149 virtual void* at(UINT position = 0); 00150 virtual UINT length(); 00151 private: 00152 virtual void Print( std::ostream& os ) const { os << print(); } 00153 virtual void ReadAll( std::istream& is) { //TODO 00154 00155 // prepare to add document to structure 00156 // do a super fast read 00157 // std::ifstream is(doc, std::ios::binary); 00158 // 00159 00160 if (!is) 00161 std::cerr << "Error with stream " << std::endl; 00162 assert(is.good()); 00163 00164 is.seekg (0, std::ios::end); 00165 UINT length = is.tellg(); 00166 is.seekg (0, std::ios::beg); 00167 00168 // allocate memory: 00169 char* buffer = new char [length]; 00170 is.read(buffer,length); 00171 // is.close(); 00172 this->Add(buffer); 00173 } 00174 virtual void ReadOne( std::ifstream& is) {} 00175 00176 00177 }; 00178 00179 class VoidSequenceAdapterDollarized 00180 : public virtual VoidSequenceAdapter 00181 // , public virtual VoidSequenceAdapterBase 00182 { 00183 public: 00184 //TODO Add assertion for dollarization 00185 VoidSequenceAdapterDollarized() : VoidSequenceAdapterDollarized(1) {} 00186 VoidSequenceAdapterDollarized(UINT elementSize) 00187 : VoidSequenceAdapter(elementSize) { 00188 if (DEBUG_LEVEL > 5) std::cerr << "VoidSequenceAdapterDollarized()" << std::endl; 00189 } 00190 00192 // VoidSequenceAdapterDollarized(const S8* input) 00193 // : VoidSequenceAdapter(input) { 00194 // if (DEBUG_LEVEL > 5) std::cerr << "VoidSequenceAdapterDollarized::VoidSequenceAdapterDollarized(const S8* input)" << std::endl; 00195 // dollarizer(); 00196 // } 00197 VoidSequenceAdapterDollarized(const std::string& input) 00198 : VoidSequenceAdapter(input) { 00199 if (DEBUG_LEVEL > 5) std::cerr << "VoidSequenceAdapterDollarized::VoidSequenceAdapterDollarized(const std::string& input)" << std::endl; 00200 dollarizer(); 00201 } 00202 virtual ~VoidSequenceAdapterDollarized() { 00203 if (DEBUG_LEVEL > 5) std::cerr << "virtual ~VoidSequenceAdapterDollarized()" << std::endl; 00204 } 00205 virtual void Add(const S8* input) { 00206 if (DEBUG_LEVEL > 5) std::cerr << "virtual void VoidSequenceAdapterDollarized::Add(const S8* input)" << std::endl; 00207 VoidSequenceAdapter::Add(input); 00208 dollarizer(); 00209 } 00210 }; 00211 00212 }}} /* End of namespace lmu::cis::sis */ 00213 00214 #endif /* end of include guard: VOIDSEQUENCEADAPTER_HPP */