#ifndef data_buffer_hh #define data_buffer_hh // data_buffer.hh // robert - programme du robot 2005. {{{ // // Copyright (C) 2005 Dufour Jérémy // // This program is free software; you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation; either version 2 of the License, or // (at your option) any later version. // // This program is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with this program; if not, write to the Free Software // Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. // // Contact : // Web: %WEB% // Email: // }}} #include "data_input.hh" #include "data_output.hh" #include // uint8_t /// Classe contenant un buffer de données accessible en lecture et en /// écriture. class DataBuffer : public DataInput, public DataOutput { public: /// Type de données possible du buffer. enum dataType_e { NoType, Image, AskImage }; private: /// Buffer de données. uint8_t *buffer_; /// Taille alloué en mémoire pour le buffer. unsigned size_; /// Position du début et de la fin des données dans le buffer. unsigned headPos_, tailPos_; /// Type de données du buffer. dataType_e type_; /// Augmente la taille du buffer pour correspondre à size. void grow (const unsigned size); public: /// Constructeur par défaut. DataBuffer (void); /// Constructeur par recopie. DataBuffer (const DataBuffer &d); /// Constructeur avec données. DataBuffer (uint8_t *data, unsigned size, unsigned sizeAllocated, dataType_e type = NoType); /// Destructeur par défaut. ~DataBuffer (void) { delete [] buffer_; } /// Surcharge de l'opérateur d'affectation DataBuffer &operator= (const DataBuffer &d); /// Lit des données. Même convention que le read de la libc, mais lance /// une exception en cas d'erreur. unsigned read (uint8_t *buf, unsigned size); /// Écrit des données. Même convention que le write de la libc, mais lance /// une exception en cas d'erreur. void write (const uint8_t *buf, unsigned size); /// Taille utile du buffer. unsigned size (void) const { return tailPos_ - headPos_; } /// Echange les buffers. void swap (DataBuffer &d); /// Type de données du buffer. dataType_e type (void) const { return type_; } /// Change le type de données du buffer. void setType (const dataType_e type) { type_ = type; } /// Empty/clear the content of the buffer. void clear (void) { tailPos_ = headPos_ = 0; } }; #endif // data_buffer_hh