TDME2  1.9.200
ByteBuffer.h
Go to the documentation of this file.
1 #pragma once
2 
3 #include <vector>
4 #include <utility>
5 
6 #include <tdme/tdme.h>
12 
13 using std::exchange;
14 using std::swap;
15 using std::vector;
16 
21 
22 /**
23  * Byte buffer class
24  * @author Andreas Drewke
25  */
27 {
28 public:
29  /**
30  * Allocate byte buffer
31  */
32  inline static ByteBuffer* allocate(int64_t capacity) {
33  return new ByteBuffer(capacity);
34  }
35 
36  /**
37  * @return this buffer as float buffer
38  */
40  return FloatBuffer(this);
41  }
42 
43  /**
44  * @return this buffer as int buffer
45  */
47  return IntBuffer(this);
48  }
49 
50  /**
51  * @return this buffer as short buffer
52  */
54  return ShortBuffer(this);
55  }
56 
57  /**
58  * Move operator
59  * @param fromBuffer from buffer
60  * @return this buffer
61  */
62  inline ByteBuffer& operator=(ByteBuffer&& fromBuffer) {
63  // do the swap
64  swap(ownsBuffer, fromBuffer.ownsBuffer);
65  swap(buffer, fromBuffer.buffer);
66  swap(position, fromBuffer.position);
67  //
68  return *this;
69  }
70 
71  /**
72  * Assign operator
73  * @param fromBuffer from buffer
74  * @return this buffer
75  */
76  inline void operator=(const ByteBuffer& fromBuffer) {
77  // delete old buffer
78  if (this->ownsBuffer == true && this->buffer != nullptr && this->buffer != fromBuffer.buffer) delete this->buffer;
79  // do the assign
80  this->ownsBuffer = fromBuffer.ownsBuffer;
81  this->buffer = nullptr;
82  this->position = 0;
83  if (this->ownsBuffer == true) {
84  if (fromBuffer.buffer != nullptr) {
85  this->buffer = new vector<uint8_t>(0);
86  *this->buffer = *fromBuffer.buffer;
87  }
88  } else {
89  this->buffer = fromBuffer.buffer;
90  }
91  }
92 
93  /**
94  * Move constructor
95  * @param fromBuffer from buffer
96  */
97  inline ByteBuffer(ByteBuffer&& fromBuffer) {
98  ownsBuffer = exchange(fromBuffer.ownsBuffer, false);
99  buffer = exchange(fromBuffer.buffer, nullptr);
100  position = exchange(fromBuffer.position, 0ll);
101  }
102 
103  /**
104  * Assign constructor
105  * @param fromBuffer from buffer
106  */
107  inline ByteBuffer(const ByteBuffer& fromBuffer) {
108  this->ownsBuffer = fromBuffer.ownsBuffer;
109  this->buffer = nullptr;
110  this->position = 0;
111  if (this->ownsBuffer == true) {
112  if (fromBuffer.buffer != nullptr) {
113  this->buffer = new vector<uint8_t>(0);
114  *this->buffer = *fromBuffer.buffer;
115  }
116  } else {
117  this->buffer = fromBuffer.buffer;
118  }
119  }
120 
121  /**
122  * Public constructor
123  */
124  inline ByteBuffer() : Buffer() {
125  }
126 
127  /**
128  * Public constructor
129  * @param capacity capacity
130  */
131  inline ByteBuffer(int64_t capacity) : Buffer(capacity) {
132  }
133 
134  /**
135  * Public constructor
136  * @param data data
137  */
138  inline ByteBuffer(const vector<uint8_t>& data) : Buffer(data) {
139  }
140 
141 };
Base class of buffers.
Definition: Buffer.h:21
friend class FloatBuffer
Definition: Buffer.h:23
friend class IntBuffer
Definition: Buffer.h:24
vector< uint8_t > * buffer
Definition: Buffer.h:30
friend class ShortBuffer
Definition: Buffer.h:25
Byte buffer class.
Definition: ByteBuffer.h:27
ByteBuffer(int64_t capacity)
Public constructor.
Definition: ByteBuffer.h:131
ByteBuffer & operator=(ByteBuffer &&fromBuffer)
Move operator.
Definition: ByteBuffer.h:62
ByteBuffer(ByteBuffer &&fromBuffer)
Move constructor.
Definition: ByteBuffer.h:97
ShortBuffer asShortBuffer()
Definition: ByteBuffer.h:53
ByteBuffer(const ByteBuffer &fromBuffer)
Assign constructor.
Definition: ByteBuffer.h:107
ByteBuffer(const vector< uint8_t > &data)
Public constructor.
Definition: ByteBuffer.h:138
ByteBuffer()
Public constructor.
Definition: ByteBuffer.h:124
static ByteBuffer * allocate(int64_t capacity)
Allocate byte buffer.
Definition: ByteBuffer.h:32
void operator=(const ByteBuffer &fromBuffer)
Assign operator.
Definition: ByteBuffer.h:76
FloatBuffer asFloatBuffer()
Definition: ByteBuffer.h:39
Float buffer class.
Definition: FloatBuffer.h:18
Integer buffer class.
Definition: IntBuffer.h:14
Short buffer class.
Definition: ShortBuffer.h:14