--- a/sources/network/bytestream.h Wed Jul 20 22:56:16 2016 +0300 +++ b/sources/network/bytestream.h Fri Jul 22 17:50:00 2016 +0300 @@ -40,119 +40,51 @@ MAX_NETWORK_STRING = 0x800 }; -// TODO: Make able to handle big-endian too +class IOError : public std::exception +{ + String m_message; + +public: + IOError(String message) : + m_message(message) {} + + const char* what() const throw() + { + return m_message; + } +}; + class Bytestream { public: - class IOError : public std::exception - { - String m_message; - - public: - IOError (String message) : - m_message (message) {} - - const char* what() const throw() - { - return m_message; - } - }; - - Bytestream (unsigned long length = 0x800); - Bytestream (const unsigned char* data, unsigned long length); - Bytestream (const Vector<unsigned char>& bytes); - Bytestream (const Bytestream& other); - ~Bytestream(); - - void clear(); - void grow_to_fit (unsigned long bytes); - void read (unsigned char* buffer, unsigned long length); - int8_t read_byte(); - int32_t read_long(); - int16_t read_short(); - String read_string(); - float read_float(); - void resize (unsigned long length); - void write (const unsigned char* val, unsigned int length); - void write_buffer (const Bytestream& other); - void write_buffer (const Vector<unsigned char>& other); - void write_byte (int8_t val); - void write_double (double val); - void write_float (float val); - void write_long (int32_t val); - void write_short (int16_t val); - void write_string (const String& val); - - Bytestream& operator= (const Bytestream& other); - - unsigned long allocated_size() const - { - return m_allocatedSize; - } + Bytestream(Vector<unsigned char>& data); - unsigned long bytes_left() const - { - return m_writtenLength - (m_cursor - &m_data[0]); - } - - inline unsigned char* data() - { - return m_data; - } - inline const unsigned char* data() const - { - return m_data; - } - - unsigned long position() const - { - return m_cursor - m_data; - } - - void rewind() - { - m_cursor = m_data; - } - - void seek (unsigned long pos) - { - m_cursor = m_data + pos; - } - - Vector<unsigned char> to_vector() const - { - return Vector<unsigned char> (m_data, m_writtenLength); - } - - unsigned long written_length() const - { - return m_writtenLength; - } - - unsigned char& operator[] (unsigned long idx) - { - return m_data[idx]; - } - - unsigned char operator[] (unsigned long idx) const - { - return m_data[idx]; - } + int bytesLeft() const; + Vector<unsigned char>::Iterator getCurrentIterator(); + int position() const; + Vector<unsigned char> readBuffer(int length); + int8_t readByte(); + int32_t readLong(); + int16_t readShort(); + String readString(); + float readFloat(); + void rewind(); + void seek(int position); + void write(const unsigned char* val, unsigned int length); + void writeBuffer(const Vector<unsigned char>& other); + void writeByte(int8_t value); + void writeDouble(double val); + void writeFloat(float value); + void writeLong(int32_t value); + void writeShort(int16_t value); + void writeString(const String& string); private: - unsigned char* m_data; - unsigned char* m_cursor; - unsigned long m_allocatedSize; - unsigned long m_writtenLength; + Vector<unsigned char>& m_data; + int m_position; - void init (const unsigned char* data, unsigned long length); - void write (unsigned char val); - void ensure_read_space (unsigned int bytes); - - unsigned long space_left() const - { - return m_allocatedSize - m_writtenLength; - } + int8_t read(); + void ensureReadSpace(int bytes); }; END_ZFC_NAMESPACE