Init
This commit is contained in:
183
DependentExtensions/SQLite3Plugin/Logger/SQLiteLoggerCommon.cpp
Normal file
183
DependentExtensions/SQLite3Plugin/Logger/SQLiteLoggerCommon.cpp
Normal file
@ -0,0 +1,183 @@
|
||||
/*
|
||||
* 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) 2016-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.
|
||||
*/
|
||||
|
||||
#include "SQLiteLoggerCommon.h"
|
||||
#include "slikenet/BitStream.h"
|
||||
#include "slikenet/linux_adapter.h"
|
||||
#include "slikenet/osx_adapter.h"
|
||||
|
||||
using namespace SLNet;
|
||||
|
||||
static const char *sqlDataTypeNames[SQLLPDT_COUNT] =
|
||||
{
|
||||
"INTEGER",
|
||||
"INTEGER",
|
||||
"NUMERIC",
|
||||
"TEXT",
|
||||
"BLOB",
|
||||
"BLOB",
|
||||
};
|
||||
|
||||
extern "C" const char *GetSqlDataTypeName(SQLLoggerPrimaryDataType idx) {return sqlDataTypeNames[(int)idx];}
|
||||
|
||||
void LogParameter::Serialize(SLNet::BitStream *bs) const
|
||||
{
|
||||
// #med consider changing SQLLoggerPrimaryDataType to unsigned char type or add bounds checks here?
|
||||
unsigned char c = static_cast<unsigned char>(type);
|
||||
bs->Write(c);
|
||||
bs->Write(size);
|
||||
switch (type)
|
||||
{
|
||||
case SQLLPDT_POINTER:
|
||||
case SQLLPDT_BLOB:
|
||||
case SQLLPDT_TEXT:
|
||||
bs->WriteAlignedBytes(data.ucptr, size);
|
||||
break;
|
||||
case SQLLPDT_IMAGE:
|
||||
bs->WriteAlignedBytes(data.ucptr, size);
|
||||
bs->Write(imageWidth);
|
||||
bs->Write(imageHeight);
|
||||
bs->Write(linePitch);
|
||||
bs->Write(input_components);
|
||||
bs->Write(compressionMode);
|
||||
break;
|
||||
case SQLLPDT_REAL:
|
||||
case SQLLPDT_INTEGER:
|
||||
{
|
||||
bs->WriteAlignedBytes((const unsigned char*) &data, size);
|
||||
bs->EndianSwapBytes(bs->GetNumberOfBytesUsed()-size,size);
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
bool LogParameter::Deserialize(SLNet::BitStream *bs)
|
||||
{
|
||||
bool b;
|
||||
unsigned char c;
|
||||
bs->Read(c);
|
||||
type=(SQLLoggerPrimaryDataType)c;
|
||||
b=bs->Read(size);
|
||||
if (size==0)
|
||||
{
|
||||
data.vptr=0;
|
||||
return b;
|
||||
}
|
||||
switch (type)
|
||||
{
|
||||
case SQLLPDT_POINTER:
|
||||
case SQLLPDT_BLOB:
|
||||
case SQLLPDT_TEXT:
|
||||
data.vptr=rakMalloc_Ex(size,_FILE_AND_LINE_);
|
||||
b=bs->ReadAlignedBytes(data.ucptr, size);
|
||||
break;
|
||||
case SQLLPDT_IMAGE:
|
||||
data.vptr=rakMalloc_Ex(size,_FILE_AND_LINE_);
|
||||
bs->ReadAlignedBytes(data.ucptr, size);
|
||||
bs->Read(imageWidth);
|
||||
bs->Read(imageHeight);
|
||||
bs->Read(linePitch);
|
||||
bs->Read(input_components);
|
||||
b=bs->Read(compressionMode);
|
||||
break;
|
||||
case SQLLPDT_REAL:
|
||||
case SQLLPDT_INTEGER:
|
||||
{
|
||||
b=bs->ReadAlignedBytes((unsigned char*) &data, size);
|
||||
if (bs->DoEndianSwap())
|
||||
bs->ReverseBytesInPlace((unsigned char *)&data, size);
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
||||
return b;
|
||||
}
|
||||
void LogParameter::DoNotFree(void)
|
||||
{
|
||||
type=SQLLPDT_COUNT;
|
||||
}
|
||||
void LogParameter::Free(void)
|
||||
{
|
||||
if (type==SQLLPDT_BLOB || type==SQLLPDT_TEXT || type==SQLLPDT_IMAGE || type==SQLLPDT_POINTER)
|
||||
Free(data.vptr);
|
||||
}
|
||||
void LogParameter::Free(void *v)
|
||||
{
|
||||
rakFree_Ex(v,_FILE_AND_LINE_);
|
||||
}
|
||||
#pragma pack(push)
|
||||
#pragma pack(1)
|
||||
// 18 bytes
|
||||
struct TGAHEADER {
|
||||
char idlength;
|
||||
char colourmaptype;
|
||||
char datatypecode;
|
||||
short int colourmaporigin;
|
||||
short int colourmaplength;
|
||||
char colourmapdepth;
|
||||
short int x_origin;
|
||||
short int y_origin;
|
||||
short width;
|
||||
short height;
|
||||
char bitsperpixel;
|
||||
char imagedescriptor;
|
||||
};
|
||||
#pragma pack(pop)
|
||||
void RGBImageBlob::SaveToTGA(const char *filename)
|
||||
{
|
||||
// DirectX Color format in memory is BGRA, and written as such to disk.
|
||||
// Written to disk is the correct side up (point of triangle facing up, as it should). However, TGA displays this incorrectly (upside down)
|
||||
// TGA color format, on disk, is BGRA.
|
||||
// DXT compressor input format is ARGB.
|
||||
|
||||
// http://local.wasp.uwa.edu.au/~pbourke/dataformats/tga/
|
||||
FILE *fptr;
|
||||
fopen_s(&fptr, filename, "wb");
|
||||
TGAHEADER h;
|
||||
memset(&h,0,sizeof(h));
|
||||
h.datatypecode=2;
|
||||
h.width=imageWidth;
|
||||
if (BitStream::IsBigEndian()==true)
|
||||
BitStream::ReverseBytesInPlace((unsigned char*) &h.width,sizeof(h.width));
|
||||
h.height=imageHeight;
|
||||
if (BitStream::IsBigEndian()==true)
|
||||
BitStream::ReverseBytesInPlace((unsigned char*) &h.height,sizeof(h.height));
|
||||
h.bitsperpixel=input_components*8;
|
||||
|
||||
// TGAs have a flag indicating if they are upside down or right side up
|
||||
// Be sure to set right side up.
|
||||
// http://www.gamedev.net/community/forums/topic.asp?topic_id=42001
|
||||
h.imagedescriptor=(1<<5);
|
||||
|
||||
fwrite(&h,1,sizeof(h),fptr);
|
||||
|
||||
/*
|
||||
putc(0,fptr);
|
||||
putc(0,fptr);
|
||||
putc(2,fptr);
|
||||
putc(0,fptr); putc(0,fptr);
|
||||
putc(0,fptr); putc(0,fptr);
|
||||
putc(0,fptr);
|
||||
putc(0,fptr); putc(0,fptr);
|
||||
putc(0,fptr); putc(0,fptr);
|
||||
putc((imageWidth & 0x00FF),fptr);
|
||||
putc((imageWidth & 0xFF00) / 256,fptr);
|
||||
putc((imageHeight & 0x00FF),fptr);
|
||||
putc((imageHeight & 0xFF00) / 256,fptr);
|
||||
putc(input_components*8,fptr);
|
||||
putc(0,fptr);
|
||||
*/
|
||||
|
||||
|
||||
for (int row=0; row < imageHeight; row++)
|
||||
{
|
||||
fwrite((char*) data+row*linePitch, input_components, imageWidth, fptr);
|
||||
}
|
||||
fclose(fptr);
|
||||
}
|
||||
Reference in New Issue
Block a user