171 lines
7.9 KiB
C++
171 lines
7.9 KiB
C++
/*
|
|
* This file was taken from RakNet 4.082.
|
|
* Please see licenses/RakNet license.txt for the underlying license and related copyright.
|
|
*
|
|
* Modified work: Copyright (c) 2017, SLikeSoft UG (haftungsbeschränkt)
|
|
*
|
|
* This source code was modified by SLikeSoft. Modifications are licensed under the MIT-style
|
|
* license found in the license.txt file in the root directory of this source tree.
|
|
*/
|
|
|
|
#ifndef _SQLITE_LOGGER_COMMON_H
|
|
#define _SQLITE_LOGGER_COMMON_H
|
|
|
|
#include <string.h>
|
|
#include "slikenet/defines.h"
|
|
#include "slikenet/NativeTypes.h"
|
|
|
|
namespace SLNet
|
|
{
|
|
class BitStream;
|
|
|
|
enum SQLLoggerPrimaryDataType
|
|
{
|
|
SQLLPDT_POINTER,
|
|
SQLLPDT_INTEGER,
|
|
SQLLPDT_REAL,
|
|
SQLLPDT_TEXT,
|
|
SQLLPDT_BLOB,
|
|
SQLLPDT_IMAGE,
|
|
SQLLPDT_COUNT,
|
|
};
|
|
|
|
extern "C" {
|
|
const char *GetSqlDataTypeName(SQLLoggerPrimaryDataType idx);
|
|
};
|
|
|
|
struct BlobDescriptor
|
|
{
|
|
BlobDescriptor() {}
|
|
BlobDescriptor(void *_data, int _size) : data(_data), size(_size) {}
|
|
void *data;
|
|
int size;
|
|
};
|
|
struct RGBImageBlob
|
|
{
|
|
enum ImageBlobCompressionMode
|
|
{
|
|
// Fast to compress and read back (1-5 milliseconds to compress depending on image size, server must have NVidia based 3d card)
|
|
DXT,
|
|
// Good storage, slow to compress (about 20 milliseconds for 320x200 on my system).
|
|
JPG
|
|
};
|
|
RGBImageBlob() {data=0; imageWidth=0; imageHeight=0; linePitch=0; input_components=0; compressionMode=DXT; sourceFormatIsBGRA=true;}
|
|
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) {}
|
|
// This is just for testing
|
|
void SaveToTGA(const char *filename);
|
|
void *data;
|
|
uint16_t imageWidth;
|
|
uint16_t imageHeight;
|
|
uint16_t linePitch; // bytes per row, may be larger than image width, in which case the excess is discarded
|
|
unsigned char input_components; // 3 for RGB, 4 for RGBA
|
|
unsigned char compressionMode;
|
|
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
|
|
};
|
|
|
|
#define MAX_SQLLITE_LOGGER_PARAMETERS 12
|
|
|
|
struct LogParameter
|
|
{
|
|
LogParameter() {}
|
|
|
|
/*
|
|
template <class T> LogParameter(const T t) : type(SQLLPDT_UNKNOWN), size(sizeof(t)), data(&t) {}
|
|
template <> LogParameter(const void *t) : type(SQLLPDT_POINTER), size(sizeof(t)), data(&t) {}
|
|
template <> LogParameter(const unsigned char t) : type(SQLLPDT_INTEGER), size(sizeof(t)), data(&t) {}
|
|
template <> LogParameter(const char t) : type(SQLLPDT_INTEGER), size(sizeof(t)), data(&t) {}
|
|
template <> LogParameter(const unsigned int t) : type(SQLLPDT_INTEGER), size(sizeof(t)), data(&t) {}
|
|
template <> LogParameter(const int t) : type(SQLLPDT_INTEGER), size(sizeof(t)), data(&t) {}
|
|
template <> LogParameter(const unsigned short t) : type(SQLLPDT_INTEGER), size(sizeof(t)), data(&t) {}
|
|
template <> LogParameter(const short t) : type(SQLLPDT_INTEGER), size(sizeof(t)), data(&t) {}
|
|
template <> LogParameter(const unsigned long long t) : type(SQLLPDT_INTEGER), size(sizeof(t)), data(&t) {}
|
|
template <> LogParameter(const long long t) : type(SQLLPDT_INTEGER), size(sizeof(t)), data(&t) {}
|
|
template <> LogParameter(const float t) : type(SQLLPDT_REAL), size(sizeof(t)), data(&t) {}
|
|
template <> LogParameter(const double t) : type(SQLLPDT_REAL), size(sizeof(t)), data(&t) {}
|
|
template <> LogParameter(const unsigned char *&t) : type(SQLLPDT_TEXT), size((uint32_t) strlen((const char*) t)), data(t) {}
|
|
template <> LogParameter(const char *t) : type(SQLLPDT_TEXT), size((uint32_t) strlen(t)), data(t) {}
|
|
template <> LogParameter(const BlobDescriptor *t) : type(SQLLPDT_BLOB), size(t->size), data(t->data) {}
|
|
template <> LogParameter(const RGBImageBlob *t) : type(SQLLPDT_IMAGE), size(t->size), data(t->data), imageDescriptorFormat(t->imageDescriptorFormat), bytesPerPixel(t->bytesPerPixel), imageWidth(t->imageWidth) {}
|
|
template <> LogParameter(const BlobDescriptor t) : type(SQLLPDT_BLOB), size(t.size), data(t.data) {}
|
|
template <> LogParameter(const RGBImageBlob t) : type(SQLLPDT_IMAGE), size(t.size), data(t.data), imageDescriptorFormat(t.imageDescriptorFormat), bytesPerPixel(t.bytesPerPixel), imageWidth(t.imageWidth) {}
|
|
*/
|
|
|
|
LogParameter(void *t) : type(SQLLPDT_POINTER), size(sizeof(t)), data(t) {}
|
|
LogParameter(unsigned char t) : type(SQLLPDT_INTEGER), size(sizeof(t)), data(t) {}
|
|
LogParameter(char t) : type(SQLLPDT_INTEGER), size(sizeof(t)), data(t) {}
|
|
LogParameter(unsigned int t) : type(SQLLPDT_INTEGER), size(sizeof(t)), data(t) {}
|
|
LogParameter(int t) : type(SQLLPDT_INTEGER), size(sizeof(t)), data(t) {}
|
|
LogParameter(unsigned short t) : type(SQLLPDT_INTEGER), size(sizeof(t)), data(t) {}
|
|
LogParameter(short t) : type(SQLLPDT_INTEGER), size(sizeof(t)), data(t) {}
|
|
LogParameter(unsigned long long t) : type(SQLLPDT_INTEGER), size(sizeof(t)), data(t) {}
|
|
LogParameter(long long t) : type(SQLLPDT_INTEGER), size(sizeof(t)), data(t) {}
|
|
LogParameter(float t) : type(SQLLPDT_REAL), size(sizeof(t)), data(t) {}
|
|
LogParameter(double t) : type(SQLLPDT_REAL), size(sizeof(t)), data(t) {}
|
|
LogParameter(unsigned char *t) : type(SQLLPDT_TEXT), size((uint32_t) strlen((const char*) t)), data(t) {}
|
|
LogParameter(char *t) : type(SQLLPDT_TEXT), size((uint32_t) strlen(t)), data(t) {}
|
|
LogParameter(const char t[]) : type(SQLLPDT_TEXT), size((uint32_t) strlen(t)), data(t) {}
|
|
LogParameter(const unsigned char t[]) : type(SQLLPDT_TEXT), size((uint32_t) strlen((const char*) t)), data(t) {}
|
|
LogParameter(BlobDescriptor *t) : type(SQLLPDT_BLOB), size(t->size), data(t->data) {}
|
|
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) {}
|
|
LogParameter(BlobDescriptor t) : type(SQLLPDT_BLOB), size(t.size), data(t.data) {}
|
|
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) {}
|
|
|
|
SQLLoggerPrimaryDataType type;
|
|
uint32_t size;
|
|
|
|
union DataUnion
|
|
{
|
|
DataUnion() {}
|
|
DataUnion(void *t) : vptr(t) {}
|
|
DataUnion(unsigned char t) : c(t) {}
|
|
DataUnion(char t) : c(t) {}
|
|
DataUnion(unsigned int t) : i(t) {}
|
|
DataUnion(int t) : i(t) {}
|
|
DataUnion(unsigned short t) : s(t) {}
|
|
DataUnion(short t) : s(t) {}
|
|
DataUnion(unsigned long long t) : ll(t) {}
|
|
DataUnion(long long t) : ll(t) {}
|
|
DataUnion(float t) : f(t) {}
|
|
DataUnion(double t) : d(t) {}
|
|
DataUnion(unsigned char *t) : ucptr(t) {}
|
|
DataUnion(char *t) : cptr(t) {}
|
|
DataUnion(const char t[]) : cptr((char*) t) {}
|
|
DataUnion(const unsigned char t[]) : cptr((char*) t) {}
|
|
DataUnion(BlobDescriptor *t) : vptr(t->data) {}
|
|
DataUnion(RGBImageBlob *t) : vptr(t->data) {}
|
|
DataUnion(const BlobDescriptor &t) : vptr(t.data) {}
|
|
DataUnion(const RGBImageBlob &t) : vptr(t.data) {}
|
|
|
|
void *vptr;
|
|
char c;
|
|
int i;
|
|
short s;
|
|
long long ll;
|
|
float f;
|
|
double d;
|
|
char *cptr;
|
|
unsigned char *ucptr;
|
|
};
|
|
DataUnion data;
|
|
|
|
// Only used for SQLLPDT_IMAGE
|
|
uint16_t imageWidth;
|
|
uint16_t imageHeight;
|
|
uint16_t linePitch; // Pitch is bytes per row
|
|
unsigned char input_components; // Bytes per pixel
|
|
unsigned char compressionMode;
|
|
bool sourceFormatIsBGRA;
|
|
|
|
void Serialize(SLNet::BitStream *bs) const;
|
|
// Don't forget to deallocate after calling Deserialize
|
|
bool Deserialize(SLNet::BitStream *bs);
|
|
void DoNotFree(void);
|
|
void Free(void);
|
|
static void Free(void *v);
|
|
};
|
|
|
|
}
|
|
|
|
|
|
#endif
|