Coin Logo Coin3D is Free Software,
published under the BSD 3-clause license.
https://bitbucket.org/Coin3D/
http://www.kongsberg.com/kogt/
SbByteBuffer.h
1 /*
2  Defining Private variables in exactly one location, to keep them in
3  sync, remember to undefine this, so this is not visible outside this
4  header, unless included from an .icc file
5 */
6 /*
7  NOTE: This define is done outside the Header guard, and undefined in
8  the end. This is to make it possible to include this from an .icc
9  file, even if the header has been included from before.
10 */
11 #define SBBYTEBUFFER_PRIVATE_VARIABLES \
12  size_t size_; \
13  boost::shared_array<char> buffer; \
14  SbBool invalid; \
15  static SbByteBuffer invalidBuffer_;
16 
17 #ifndef COIN_SBBYTEBUFFER_H
18 #define COIN_SBBYTEBUFFER_H
19 
20 #include <cstring>
21 #include <Inventor/SbBasic.h>
22 
23 #ifndef ABI_BREAKING_OPTIMIZE
24 class SbByteBufferP;
25 #else
26 #include <boost/shared_array.hpp>
27 #endif //ABI_BREAKING_OPTIMIZE
28 
29 
30 
31 //Consider making a general Buffer class for non bytes;
32 //Implements as a minimum the Buffer concept as defined by
33 //http://www.boost.org/doc/libs/1_37_0/libs/graph/doc/Buffer.html
34 class COIN_DLL_API SbByteBuffer {
35  public:
36  SbByteBuffer(const char * buffer);
37  SbByteBuffer(const SbByteBuffer & buffer);
38  SbByteBuffer(size_t size = 0, const char * buffer = NULL);
39  SbByteBuffer(size_t size, const unsigned char * buffer);
40  ~SbByteBuffer();
41 
42  SbBool isValid() const;
43  size_t size() const;
44  SbBool empty() const;
45 
46  const char & operator[](size_t idx) const;
47  SbByteBuffer & operator=(const SbByteBuffer & in);
48  SbBool operator==(const SbByteBuffer & that) const;
49  SbByteBuffer & operator+=(const SbByteBuffer & buf) {
50  this->push(buf);
51  return *this;
52  }
53 
54  void push(const SbByteBuffer & buf);
55 
56  const char * constData() const;
57  char * data();
58 
59  static SbByteBuffer & invalidBuffer();
60  void makeUnique();
61 
62  private:
63 #ifndef ABI_BREAKING_OPTIMIZE
64  SbByteBufferP * pimpl;
65 #else
66  SBBYTEBUFFER_PRIVATE_VARIABLES
67 #endif //ABI_BREAKING_OPTIMIZE
68 };
69 
70 #ifdef ABI_BREAKING_OPTIMIZE
71 #include "SbByteBufferP.icc"
72 #endif //ABI_BREAKING_OPTIMIZE
73 
74 #endif // !COIN_SBBYTEBUFFER_H
75 
76 //The SBBYTEBUFFER_PRIVATE_VARIABLES must survice an inclusion from the .icc file
77 #ifndef COIN_ICC_INCLUDE
78 #undef SBBYTEBUFFER_PRIVATE_VARIABLES
79 #endif //COIN_ICC_INCLUDE
Definition: SbByteBuffer.h:34