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
00026
00027
00028
00029
00030
00031
00032
00033
00034
00035
00036
00037
00038
00039
00040
00041
00042
00043 #ifndef INCLUDED_DASHEL_PRIVATE_H
00044 #define INCLUDED_DASHEL_PRIVATE_H
00045
00046 #include "dashel.h"
00047 #include <cstring>
00048 #include <cstdlib>
00049 #include <sstream>
00050 #include <vector>
00051 #include <cassert>
00052
00053 namespace Dashel
00054 {
00056 class ExpandableBuffer
00057 {
00058 private:
00059 unsigned char* _data;
00060 size_t _size;
00061 size_t _pos;
00062
00063 public:
00065 ExpandableBuffer(size_t size = 0);
00067 ~ExpandableBuffer();
00069 void clear();
00071 void add(const void* data, const size_t size);
00072
00074 unsigned char* get() { return _data; }
00076 size_t size() const { return _pos; }
00078 size_t reservedSize() const { return _size; }
00079 };
00080
00082 class MemoryPacketStream: public PacketStream
00083 {
00084 protected:
00086 ExpandableBuffer sendBuffer;
00088 std::deque<unsigned char> receptionBuffer;
00089
00090 public:
00092 MemoryPacketStream(const std::string& protocolName) : Stream(protocolName), PacketStream(protocolName) { }
00093
00094 virtual void write(const void *data, const size_t size);
00095
00096 virtual void flush() { }
00097
00098 virtual void read(void *data, size_t size);
00099 };
00100
00101
00102 template<typename T> T ParameterSet::get(const char *key) const
00103 {
00104 T t;
00105 std::map<std::string, std::string>::const_iterator it = values.find(key);
00106 if(it == values.end())
00107 {
00108 std::string r = std::string("Parameter missing: ").append(key);
00109 throw Dashel::DashelException(DashelException::InvalidTarget, 0, r.c_str());
00110 }
00111 std::istringstream iss(it->second);
00112 iss >> t;
00113 return t;
00114 }
00115
00116
00118 typedef enum {
00119 EvData,
00120 EvPotentialData,
00121 EvClosed,
00122 EvConnect,
00123 } EvType;
00124 }
00125
00126 #endif