SQLiteLoggerCommon.h 7.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159
  1. #ifndef _SQLITE_LOGGER_COMMON_H
  2. #define _SQLITE_LOGGER_COMMON_H
  3. #include <string.h>
  4. #include "NativeTypes.h"
  5. namespace RakNet
  6. {
  7. class BitStream;
  8. enum SQLLoggerPrimaryDataType
  9. {
  10. SQLLPDT_POINTER,
  11. SQLLPDT_INTEGER,
  12. SQLLPDT_REAL,
  13. SQLLPDT_TEXT,
  14. SQLLPDT_BLOB,
  15. SQLLPDT_IMAGE,
  16. SQLLPDT_COUNT,
  17. };
  18. extern "C" {
  19. const char *GetSqlDataTypeName(SQLLoggerPrimaryDataType idx);
  20. };
  21. struct BlobDescriptor
  22. {
  23. BlobDescriptor() {}
  24. BlobDescriptor(void *_data, int _size) : data(_data), size(_size) {}
  25. void *data;
  26. int size;
  27. };
  28. struct RGBImageBlob
  29. {
  30. enum ImageBlobCompressionMode
  31. {
  32. // Fast to compress and read back (1-5 milliseconds to compress depending on image size, server must have NVidia based 3d card)
  33. DXT,
  34. // Good storage, slow to compress (about 20 milliseconds for 320x200 on my system).
  35. JPG
  36. };
  37. RGBImageBlob() {data=0; imageWidth=0; imageHeight=0; linePitch=0; input_components=0; compressionMode=DXT; sourceFormatIsBGRA=true;}
  38. RGBImageBlob(void *_data, uint16_t _imageWidth, uint16_t _imageHeight, uint16_t _linePitch, unsigned char _input_components, bool _sourceFormatIsBGRA=true, ImageBlobCompressionMode mode=DXT) : data(_data), imageWidth(_imageWidth), imageHeight(_imageHeight), linePitch(_linePitch), input_components(_input_components),sourceFormatIsBGRA(_sourceFormatIsBGRA),compressionMode((unsigned char) mode) {}
  39. // This is just for testing
  40. void SaveToTGA(const char *filename);
  41. void *data;
  42. uint16_t imageWidth;
  43. uint16_t imageHeight;
  44. uint16_t linePitch; // bytes per row, may be larger than image width, in which case the excess is discarded
  45. unsigned char input_components; // 3 for RGB, 4 for RGBA
  46. unsigned char compressionMode;
  47. bool sourceFormatIsBGRA; // If true, then G and B will be swapped on the server so that the input is RGBA. This is necessary with Direct3D9
  48. };
  49. #define MAX_SQLLITE_LOGGER_PARAMETERS 12
  50. struct LogParameter
  51. {
  52. LogParameter() {}
  53. /*
  54. template <class T> LogParameter(const T t) : type(SQLLPDT_UNKNOWN), size(sizeof(t)), data(&t) {}
  55. template <> LogParameter(const void *t) : type(SQLLPDT_POINTER), size(sizeof(t)), data(&t) {}
  56. template <> LogParameter(const unsigned char t) : type(SQLLPDT_INTEGER), size(sizeof(t)), data(&t) {}
  57. template <> LogParameter(const char t) : type(SQLLPDT_INTEGER), size(sizeof(t)), data(&t) {}
  58. template <> LogParameter(const unsigned int t) : type(SQLLPDT_INTEGER), size(sizeof(t)), data(&t) {}
  59. template <> LogParameter(const int t) : type(SQLLPDT_INTEGER), size(sizeof(t)), data(&t) {}
  60. template <> LogParameter(const unsigned short t) : type(SQLLPDT_INTEGER), size(sizeof(t)), data(&t) {}
  61. template <> LogParameter(const short t) : type(SQLLPDT_INTEGER), size(sizeof(t)), data(&t) {}
  62. template <> LogParameter(const unsigned long long t) : type(SQLLPDT_INTEGER), size(sizeof(t)), data(&t) {}
  63. template <> LogParameter(const long long t) : type(SQLLPDT_INTEGER), size(sizeof(t)), data(&t) {}
  64. template <> LogParameter(const float t) : type(SQLLPDT_REAL), size(sizeof(t)), data(&t) {}
  65. template <> LogParameter(const double t) : type(SQLLPDT_REAL), size(sizeof(t)), data(&t) {}
  66. template <> LogParameter(const unsigned char *&t) : type(SQLLPDT_TEXT), size((uint32_t) strlen((const char*) t)), data(t) {}
  67. template <> LogParameter(const char *t) : type(SQLLPDT_TEXT), size((uint32_t) strlen(t)), data(t) {}
  68. template <> LogParameter(const BlobDescriptor *t) : type(SQLLPDT_BLOB), size(t->size), data(t->data) {}
  69. template <> LogParameter(const RGBImageBlob *t) : type(SQLLPDT_IMAGE), size(t->size), data(t->data), imageDescriptorFormat(t->imageDescriptorFormat), bytesPerPixel(t->bytesPerPixel), imageWidth(t->imageWidth) {}
  70. template <> LogParameter(const BlobDescriptor t) : type(SQLLPDT_BLOB), size(t.size), data(t.data) {}
  71. template <> LogParameter(const RGBImageBlob t) : type(SQLLPDT_IMAGE), size(t.size), data(t.data), imageDescriptorFormat(t.imageDescriptorFormat), bytesPerPixel(t.bytesPerPixel), imageWidth(t.imageWidth) {}
  72. */
  73. LogParameter(void *t) : type(SQLLPDT_POINTER), size(sizeof(t)), data(t) {}
  74. LogParameter(unsigned char t) : type(SQLLPDT_INTEGER), size(sizeof(t)), data(t) {}
  75. LogParameter(char t) : type(SQLLPDT_INTEGER), size(sizeof(t)), data(t) {}
  76. LogParameter(unsigned int t) : type(SQLLPDT_INTEGER), size(sizeof(t)), data(t) {}
  77. LogParameter(int t) : type(SQLLPDT_INTEGER), size(sizeof(t)), data(t) {}
  78. LogParameter(unsigned short t) : type(SQLLPDT_INTEGER), size(sizeof(t)), data(t) {}
  79. LogParameter(short t) : type(SQLLPDT_INTEGER), size(sizeof(t)), data(t) {}
  80. LogParameter(unsigned long long t) : type(SQLLPDT_INTEGER), size(sizeof(t)), data(t) {}
  81. LogParameter(long long t) : type(SQLLPDT_INTEGER), size(sizeof(t)), data(t) {}
  82. LogParameter(float t) : type(SQLLPDT_REAL), size(sizeof(t)), data(t) {}
  83. LogParameter(double t) : type(SQLLPDT_REAL), size(sizeof(t)), data(t) {}
  84. LogParameter(unsigned char *t) : type(SQLLPDT_TEXT), size((uint32_t) strlen((const char*) t)), data(t) {}
  85. LogParameter(char *t) : type(SQLLPDT_TEXT), size((uint32_t) strlen(t)), data(t) {}
  86. LogParameter(const char t[]) : type(SQLLPDT_TEXT), size((uint32_t) strlen(t)), data(t) {}
  87. LogParameter(const unsigned char t[]) : type(SQLLPDT_TEXT), size((uint32_t) strlen((const char*) t)), data(t) {}
  88. LogParameter(BlobDescriptor *t) : type(SQLLPDT_BLOB), size(t->size), data(t->data) {}
  89. LogParameter(RGBImageBlob *t) : type(SQLLPDT_IMAGE), size(t->linePitch*t->imageHeight), data(t->data), imageWidth(t->imageWidth), imageHeight(t->imageHeight), linePitch(t->linePitch), input_components(t->input_components), compressionMode(t->compressionMode), sourceFormatIsBGRA(t->sourceFormatIsBGRA) {}
  90. LogParameter(BlobDescriptor t) : type(SQLLPDT_BLOB), size(t.size), data(t.data) {}
  91. LogParameter(RGBImageBlob t) : type(SQLLPDT_IMAGE), size(t.linePitch*t.imageHeight), data(t.data), imageWidth(t.imageWidth), imageHeight(t.imageHeight), linePitch(t.linePitch), input_components(t.input_components), compressionMode(t.compressionMode), sourceFormatIsBGRA(t.sourceFormatIsBGRA) {}
  92. SQLLoggerPrimaryDataType type;
  93. uint32_t size;
  94. union DataUnion
  95. {
  96. DataUnion() {}
  97. DataUnion(void *t) : vptr(t) {}
  98. DataUnion(unsigned char t) : c(t) {}
  99. DataUnion(char t) : c(t) {}
  100. DataUnion(unsigned int t) : i(t) {}
  101. DataUnion(int t) : i(t) {}
  102. DataUnion(unsigned short t) : s(t) {}
  103. DataUnion(short t) : s(t) {}
  104. DataUnion(unsigned long long t) : ll(t) {}
  105. DataUnion(long long t) : ll(t) {}
  106. DataUnion(float t) : f(t) {}
  107. DataUnion(double t) : d(t) {}
  108. DataUnion(unsigned char *t) : ucptr(t) {}
  109. DataUnion(char *t) : cptr(t) {}
  110. DataUnion(const char t[]) : cptr((char*) t) {}
  111. DataUnion(const unsigned char t[]) : cptr((char*) t) {}
  112. DataUnion(BlobDescriptor *t) : vptr(t->data) {}
  113. DataUnion(RGBImageBlob *t) : vptr(t->data) {}
  114. DataUnion(const BlobDescriptor &t) : vptr(t.data) {}
  115. DataUnion(const RGBImageBlob &t) : vptr(t.data) {}
  116. void *vptr;
  117. char c;
  118. int i;
  119. short s;
  120. long long ll;
  121. float f;
  122. double d;
  123. char *cptr;
  124. unsigned char *ucptr;
  125. };
  126. DataUnion data;
  127. // Only used for SQLLPDT_IMAGE
  128. uint16_t imageWidth;
  129. uint16_t imageHeight;
  130. uint16_t linePitch; // Pitch is bytes per row
  131. unsigned char input_components; // Bytes per pixel
  132. unsigned char compressionMode;
  133. bool sourceFormatIsBGRA;
  134. void Serialize(RakNet::BitStream *bs) const;
  135. // Don't forget to deallocate after calling Deserialize
  136. bool Deserialize(RakNet::BitStream *bs);
  137. void DoNotFree(void);
  138. void Free(void);
  139. static void Free(void *v);
  140. };
  141. }
  142. #endif
粤ICP备19079148号