00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025 #ifndef __ZUtil_TS__
00026 #define __ZUtil_TS__
00027 #include "zconfig.h"
00028
00029 #include "ZTypes.h"
00030
00031 #include <map>
00032 #include <stdexcept>
00033
00034 class ZTuple;
00035 class ZStreamR;
00036 class ZStreamRPos;
00037 class ZStreamWPos;
00038 class ZStrimU;
00039 class ZStrimW;
00040
00041 namespace ZUtil_TS {
00042
00043 class Ex_Base : public runtime_error
00044 {
00045 protected:
00046 Ex_Base(const char* what);
00047 Ex_Base(const std::string& what);
00048 };
00049
00050 class Ex_MagicTextMissing : public Ex_Base
00051 {
00052 public:
00053 Ex_MagicTextMissing();
00054 };
00055
00056 class Ex_IDInvalid : public Ex_Base
00057 {
00058 public:
00059 Ex_IDInvalid();
00060 };
00061
00062 class Ex_IDOutOfSequence : public Ex_Base
00063 {
00064 public:
00065 Ex_IDOutOfSequence();
00066 };
00067
00068 class Ex_IDOutOfBounds : public Ex_Base
00069 {
00070 public:
00071 Ex_IDOutOfBounds();
00072 };
00073
00074 class Ex_IDDuplicate : public Ex_Base
00075 {
00076 public:
00077 Ex_IDDuplicate();
00078 };
00079
00080 class Ex_OversizedStream : public Ex_Base
00081 {
00082 public:
00083 Ex_OversizedStream();
00084 };
00085
00086 class Ex_MalformedText : public Ex_Base
00087 {
00088 public:
00089 Ex_MalformedText(const char* what);
00090 Ex_MalformedText(const std::string& what);
00091 };
00092
00093
00094 #pragma mark -
00095 #pragma mark * ZUtil_TS::Source
00096
00097 class Source
00098 {
00099 public:
00100 virtual bool Get(uint64& oID, ZTuple& oTuple) = 0;
00101 };
00102
00103
00104 #pragma mark -
00105 #pragma mark * ZUtil_TS::Sink
00106
00107 class Sink
00108 {
00109 public:
00110 virtual bool Set(uint64 iID, const ZTuple& iTuple) = 0;
00111 virtual void Clear() = 0;
00112 };
00113
00114
00115 #pragma mark -
00116 #pragma mark * ZUtil_TS::Source_Map
00117
00118 class Source_Map : public Source
00119 {
00120 public:
00121 Source_Map(const std::map<uint64, ZTuple>& iMap);
00122
00123
00124 virtual bool Get(uint64& oID, ZTuple& oTuple);
00125
00126 private:
00127 std::map<uint64, ZTuple>::const_iterator fIter;
00128 std::map<uint64, ZTuple>::const_iterator fEnd;
00129 };
00130
00131
00132 #pragma mark -
00133 #pragma mark * ZUtil_TS::Sink_Map
00134
00135 class Sink_Map : public Sink
00136 {
00137 public:
00138 Sink_Map(std::map<uint64, ZTuple>& oMap);
00139
00140
00141 virtual bool Set(uint64 iID, const ZTuple& iTuple);
00142 virtual void Clear();
00143
00144 private:
00145 std::map<uint64, ZTuple>& fMap;
00146 };
00147
00148
00149 #pragma mark -
00150 #pragma mark * ZUtil_TS
00151
00152 void sToStream(uint64 iNextUnusedID, Source& iSource, const ZStreamWPos& iStreamWPos);
00153 void sFromStream(Sink& iSink, uint64& oNextUnusedID, const ZStreamR& iStreamR);
00154
00155 void sToStrim(uint64 iNextUnusedID, Source& iSource, const ZStrimW& iStrimW);
00156 void sFromStrim(Sink& iSink, uint64& oNextUnusedID, const ZStrimU& iStrimU);
00157
00158 void sRead(const ZStreamRPos& iStreamRPos, uint64& oNextUnusedID, Sink& iSink);
00159
00160 }
00161
00162 #endif // __ZUtil_TS__