43 store.reserve(length);
45 for(
int i = 0; i < length; ++i)
store.push_back(packet[i]);
58 unsigned char *p_a =
reinterpret_cast<unsigned char*
>(&a);
80 return static_cast<unsigned int>(std::distance(
store.begin(),
iter_));
101 throw std::invalid_argument(
"Storage::readChar(): invalid position");
113 store.push_back(value);
125 int i =
static_cast<int>(
readChar());
126 if (i < 128)
return i;
127 else return (i - 256);
137 if (value < -128 || value > 127)
139 throw std::invalid_argument(
"Storage::writeByte(): Invalid value, not in [-128, 127]");
141 writeChar( static_cast<unsigned char>( (value+256) % 256 ) );
152 return static_cast<int>(
readChar());
162 if (value < 0 || value > 255)
164 throw std::invalid_argument(
"Storage::writeUnsignedByte(): Invalid value, not in [0, 255]");
166 writeChar( static_cast<unsigned char>( value ));
179 StorageType::const_iterator
end =
iter_;
180 std::advance(end, len);
181 const std::string tmp(
iter_, end);
194 writeInt(static_cast<int>(s.length()));
196 store.insert(
store.end(), s.begin(), s.end());
208 std::vector<std::string> tmp;
211 for (
int i = 0; i < len; i++)
226 writeInt(static_cast<int>(s.size()));
227 for (std::vector<std::string>::const_iterator it = s.begin(); it!=s.end() ; it++)
245 unsigned char *p_value =
reinterpret_cast<unsigned char*
>(&value);
254 if (value < -32768 || value > 32767)
256 throw std::invalid_argument(
"Storage::writeShort(): Invalid value, not in [-32768, 32767]");
259 short svalue =
static_cast<short>(value);
260 unsigned char *p_svalue =
reinterpret_cast<unsigned char*
>(&svalue);
276 unsigned char *p_value =
reinterpret_cast<unsigned char*
>(&value);
285 unsigned char *p_value =
reinterpret_cast<unsigned char*
>(&value);
301 unsigned char *p_value =
reinterpret_cast<unsigned char*
>(&value);
310 unsigned char *p_value =
reinterpret_cast<unsigned char*
>(&value);
318 unsigned char *p_value =
reinterpret_cast<unsigned char*
>(&value);
327 unsigned char *p_value =
reinterpret_cast<unsigned char*
>(&value);
336 store.insert(
store.end(), &(packet[0]), &(packet[length]));
344 std::copy(packet.begin(), packet.end(), std::back_inserter(
store));
354 iter_ =
store.begin();
361 if (std::distance(iter_,
store.end()) < static_cast<int>(num))
363 std::ostringstream msg;
364 msg <<
"tcpip::Storage::readIsSafe: want to read " << num <<
" bytes from Storage, " 365 <<
"but only " << std::distance(iter_,
store.end()) <<
" remaining";
366 throw std::invalid_argument(msg.str());
383 const unsigned char *
end = &(begin[
size]);
387 store.insert(
store.end(), std::reverse_iterator<const unsigned char *>(
end), std::reverse_iterator<const unsigned char *>(begin));
388 iter_ =
store.begin();
398 for (
int i = 0; i <
size; ++i)
403 for (
int i = size - 1; i >= 0; --i)
412 static const int width = 2;
414 std::ostringstream dump;
417 dump.setf(std::ostream::hex | std::ostream::showbase | std::ostream::internal);
420 for(StorageType::const_iterator it =
store.begin(); it !=
store.end(); ++it)
423 if (it !=
store.begin())
425 dump << std::setw(width) << static_cast<int>(*it);
433 #endif // BUILD_TCPIP
void init()
Used in constructors to initialize local variables.
virtual std::vector< std::string > readStringList()
virtual unsigned int position() const
virtual double readDouble()
StorageType::size_type size() const
virtual void writePacket(unsigned char *packet, int length)
void checkReadSafe(unsigned int num) const
Check if the next num bytes can be read safely.
virtual void writeUnsignedByte(int)
virtual unsigned char readChar()
virtual void writeInt(int)
void writeByEndianess(const unsigned char *begin, unsigned int size)
Write size elements of array begin according to endianess.
virtual int readUnsignedByte()
virtual void writeChar(unsigned char)
Storage()
Standard Constructor.
void readByEndianess(unsigned char *array, int size)
Read size elements into array according to endianess.
StorageType::const_iterator end() const
virtual void writeByte(int)
virtual void writeStringList(const std::vector< std::string > &s)
virtual void writeShort(int)
virtual std::string readString()
virtual void writeStorage(tcpip::Storage &store)
virtual void writeFloat(float)
virtual void writeString(const std::string &s)
StorageType::const_iterator iter_
unsigned char readCharUnsafe()
Read a byte without validity check.
virtual float readFloat()
StorageType::const_iterator begin() const
virtual void writeDouble(double)
std::string hexDump() const
Dump storage content as series of hex values.