summaryrefslogtreecommitdiff
path: root/i/marvin/src/data/data_buffer.hh
blob: 7b71a4db0bb56b6e61e987f0d235a6f4780f70ba (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
#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: <dufourj@efrei.fr>
// }}}

#include "data_input.hh"
#include "data_output.hh"

#include <stdint.h> 		// 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