3DiVi Face SDK  3.24.0
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Groups
WrapIStreamBufferImpl.h
1 #ifndef __PBIO_API__PBIO__STL_WRAPS_IMPLS__WRAP_ISTREAM_BUFFER_IMPL_H_
2 #define __PBIO_API__PBIO__STL_WRAPS_IMPLS__WRAP_ISTREAM_BUFFER_IMPL_H_
3 
5 
6 
7 #include <cstring>
8 #include <istream>
9 
10 #include "pbio/stl_wraps/WrapIStream.h"
11 
12 namespace pbio
13 {
14 namespace stl_wraps
15 {
16 
17 class WrapIStreamBufferImpl : public WrapIStream
18 {
19 public:
20  WrapIStreamBufferImpl(
21  const char* const data,
22  const int size):
23  _data(data),
24  _size(size),
25  _pos(0)
26  {
27  // nothing else
28  }
29 
30  virtual void read(char* buf, uint64_t size)
31  {
32  const uint64_t copy_size = std::min<uint64_t>(size, _size - _pos);
33 
34  if(copy_size > 0)
35  {
36  memcpy(buf, _data + _pos, copy_size);
37  _pos += copy_size;
38  }
39 
40  if(size > copy_size)
41  {
42  memset(buf + copy_size, 0, size - copy_size);
43  }
44  }
45 
46 private:
47 
48  const char* const _data;
49  const int _size;
50  int _pos;
51 
52 };
53 
54 } // stl_wraps namespace
55 } // pbio namespace
56 
58 
59 #endif // __PBIO_API__PBIO__STL_WRAPS_IMPLS__WRAP_ISTREAM_BUFFER_IMPL_H_