fork(1) download
  1. template <typename T> // T is either uint8_t, uint16_t or uint32_t
  2. size_t PackedIndices::unpackIndices(const uint8_t*& buffer,
  3. T* indices,
  4. size_t cnt) const
  5. {
  6. __try
  7. {
  8. // read first index
  9. uint32_t index = static_cast<uint32_t>(indexPacker_.unpack(buffer));
  10. T* p = indices;
  11.  
  12. (*p++) = static_cast<T>(index);
  13.  
  14. for (size_t i = 1; i < cnt; ++i)
  15. {
  16. int64_t delta = indexPacker_.unpack(buffer);
  17. index = (uint32_t)(delta + index);
  18. (*p++) = static_cast<T>(index);
  19. }
  20.  
  21. return p - indices;
  22. }
  23. __except(EXCEPTION_EXECUTE_HANDLER)
  24. {
  25. DebugBreak();
  26. }
  27. }
  28.  
  29. //------------------------------------------------------------------------------
  30. size_t PackedIndices::unpack(const uint8_t*& buffer,
  31. void* indices,
  32. size_t byteCount) const
  33. {
  34. // get stored index count
  35. size_t cnt = SizePacker().unpack(buffer);
  36. if (cnt == 0)
  37. return 0;
  38.  
  39. uint8_t width = WidthPacker().unpack(buffer);
  40. if (cnt * width > byteCount)
  41. throw std::invalid_argument("Incorrect buffer size");
  42.  
  43. // get data width
  44. switch (width)
  45. {
  46. case 1: return unpackIndices(buffer, static_cast<uint8_t*>(indices), cnt);
  47. case 2: return unpackIndices(buffer, static_cast<uint16_t*>(indices), cnt);
  48. case 4: return unpackIndices(buffer, static_cast<uint32_t*>(indices), cnt);
  49. default: return 0;
  50. }
  51. }
Compilation error #stdin compilation error #stdout 0s 0KB
stdin
Standard input is empty
compilation info
prog.cpp:2:1: error: 'size_t' does not name a type
prog.cpp:30:8: error: expected constructor, destructor, or type conversion before 'PackedIndices'
stdout
Standard output is empty