SerializedObject.h 1.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586
  1. /*
  2. * TI Voxel Lib component.
  3. *
  4. * Copyright (c) 2014 Texas Instruments Inc.
  5. */
  6. #ifndef VOXEL_SERIALIZED_OBJECT_H
  7. #define VOXEL_SERIALIZED_OBJECT_H
  8. #include "Common.h"
  9. #include <string.h>
  10. #include <algorithm>
  11. namespace Voxel
  12. {
  13. class VOXEL_EXPORT SerializedObject
  14. {
  15. protected:
  16. Vector<char> _bytes;
  17. uint _getOffset, _putOffset;
  18. public:
  19. SerializedObject(size_t size): _bytes(size), _getOffset(0), _putOffset(0) {}
  20. SerializedObject(): _getOffset(0), _putOffset(0) {}
  21. uint currentGetOffset() const { return _getOffset; }
  22. uint currentPutOffset() const { return _putOffset; }
  23. const Vector<char> &getBytes() const { return _bytes; }
  24. Vector<char> &getBytes() { return _bytes; }
  25. inline void resize(size_t size)
  26. {
  27. if(size > 0)
  28. _bytes.resize(size);
  29. else
  30. _bytes.clear();
  31. rewind();
  32. }
  33. inline size_t size() const { return _bytes.size(); }
  34. inline void rewind() { _getOffset = 0; _putOffset = 0; }
  35. inline size_t get(char *bytes, size_t size);
  36. inline size_t put(const char *bytes, size_t size);
  37. virtual ~SerializedObject() {}
  38. };
  39. size_t SerializedObject::get(char *bytes, size_t size)
  40. {
  41. size = std::min(size, _bytes.size() - _getOffset);
  42. if(size == 0)
  43. return 0;
  44. memcpy(bytes, _bytes.data() + _getOffset, size);
  45. _getOffset += size;
  46. return size;
  47. }
  48. size_t SerializedObject::put(const char *bytes, size_t size)
  49. {
  50. size = std::min(size, _bytes.size() - _putOffset);
  51. if(size == 0)
  52. return 0;
  53. memcpy(_bytes.data() + _putOffset, bytes, size);
  54. _putOffset += size;
  55. return size;
  56. }
  57. }
  58. #endif