⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 testbs.cpp

📁 可串行化的基类对象
💻 CPP
字号:

// include base file
#include <BS_BASE.H>

// for fopen()
#include <stdio.h>

//  define the struct磗 ID
#define OL_MYSTRUCT1ID 0x16


// enumerate members
enum 
{
	char1,
	int1 ,
	long1,
	string1,
};


// derive class
class MyStruct1 : public _BS_OBJ_
{
public:

	// constructor
	MyStruct1()
	{
		// sets object磗 ID
		SetID(OL_MYSTRUCT1ID);

		// add four members
		//
		// this members will be member 1, 2, 3 and 4
		AddMember();
		AddMember();
		AddMember();
		AddMember();

	}


	// set / get member value
	BOOL setchar1(char & p)
	{
		return SetMemberData(char1, &p, sizeof(char));
	}
	char getchar1()
	{
		// i don磘 know why this, but it works
		char * p = (char*)GetMemberData(char1);
		return *p;
	}

	// set / get int member value
	BOOL setint1(int & p)
	{
		return SetMemberData(int1, &p, sizeof(int));
	}
	int getint1()
	{
		int * p = (int*)GetMemberData(int1);
		return *p;
	}

	// set / get long member value
	BOOL setlong1(long & p)
	{
		return SetMemberData(long1, &p, sizeof(long));
	}
	long getlong1()
	{
		long * p = (long*)GetMemberData(long1);
		return *p;
	}

	// set / get string member value
	BOOL setstring1(char * p)
	{
		return SetMemberData(string1, p, strlen(p) + 1 /* \0 */);
	}
	char * getstring1()
	{
		return (char*)GetMemberData(string1);
	}

};


/////////////////////////
//   do the test
int main()
{

	// aux vars
	BS_SIZE  size    = 0;
	void *   buffer  = NULL;

	unsigned int write, 
		         read ; 

	// data var磗 
	char   ch  = 'a';
	int    i   = 1234;
	long   l   = 1234567;
	char * str = "test string 1";


	// file to test object
	FILE * fil;

	// open file
	fil = fopen("C:\\test.my", "w+");

	if(fil == NULL)
	{
		printf("error open file !!\n");
		return 0;
	}

	// objects to use in the test
	MyStruct1 my1, my2, my3, my4;

	// set members of object 1
	my1.setchar1  (ch) ;
	my1.setint1   (i)  ;
	my1.setlong1  (l)  ;
	my1.setstring1(str);

	// new values to test
	ch  = 'z';
	i   = 54321;
	l   = 7654321;
	str = "test with a bigger string : \nbla, bla, bla, bla, bla, bla, bla, bla ,bla, bla, bla, bla, bla, bla, bla, bla";

	// set members of object 2
	my2.setchar1  (ch) ;
	my2.setint1   (i)  ;
	my2.setlong1  (l)  ;
	my2.setstring1(str);
	
	
	///////////////////
	//  write object 1
	// gets data to write 
	size  = my1.Serialize(&buffer);

	// write the data size
	write = fwrite( &size , sizeof(BS_SIZE), 1, fil);

	if(write != 1)
	{
		printf("error writing data !!\n");
		return 0;
	}

	// write the data
	write = fwrite( buffer, sizeof(BS_BYTE) , size, fil);
	if(write != size)
	{
		printf("error writing data !!\n");
		return 0;
	}

	/////////////////////////////////////////////
	///////////////////
	//  write object 2
	// gets data to write 
	size  = my2.Serialize(&buffer);

	// write the data size
	write = fwrite( &size , sizeof(BS_SIZE), 1, fil);

	if(write != 1)
	{
		printf("error writing data !!\n");
		return 0;
	}
	
	// write the data
	write = fwrite( buffer, sizeof(BS_BYTE) , size, fil);
	if(write != size)
	{
		printf("error writing data !!\n");
		return 0;
	}

	// prepare for reading
	fseek( fil, 0L, SEEK_SET );


	////////////////////////////////////////////////////
	///////////////////
	//  read object 3, using outside buffer
	// read the data size
	read = fread( &size, sizeof(BS_SIZE), 1, fil );

	// create buffer
	buffer = malloc(size);

	// read the data
	read = fread( buffer, sizeof(BS_BYTE), size, fil );

	if(read != size)
	{
		printf("error reading data !!\n");
		return 0;
	}

	// deserialize the object
	if(!my3.Deserialize(buffer))
	{
		printf("error deserializing data !!\n");
		return 0;
	}

	// since we created the buffer, we must release it
	free(buffer);
	buffer = NULL;

	////////////////////////////////////////////////////
	///////////////////
	//  read object 4, using object磗 buffer
	// read datasize
	read = fread( &size, sizeof(BS_SIZE), 1, fil );

	// get object serial buffer
	buffer = my4.GetSerialBuffer(size);

	// read the data
	read = fread( buffer, sizeof(BS_BYTE), size, fil );

	if(read != size)
	{
		printf("error reading data !!\n");
		return 0;
	}

	// deserialize object
	if(!my4.Deserialize())
	{
		printf("error deserializing data !!\n");
		return 0;
	}

	// free object磗 serial buffer
	// this is not realy necessary
	my4.ReleaseSerialBuffer();

	// close file
	fclose(fil);


	// show output

	printf("\n-------- Writting Objects ---------");
	printf("\nMy1 --> char member   = %c\n        int member    = %i\n        long member   = %ld\n        string member = %s\n",
		my1.getchar1(),my1.getint1(),my1.getlong1(),my1.getstring1());

	printf("\nMy2 --> char member   = %c\n        int member    = %i\n        long member   = %ld\n        string member = %s\n",
		my2.getchar1(),my2.getint1(),my2.getlong1(),my2.getstring1());

	printf("\n-------- Reading Objects ----------");
	printf("\nMy3 --> char member   = %c\n        int member    = %i\n        long member   = %ld\n        string member = %s\n",
		my3.getchar1(),my3.getint1(),my3.getlong1(),my3.getstring1());

	printf("\nMy4 --> char member   = %c\n        int member    = %i\n        long member   = %ld\n        string member = %s\n",
		my4.getchar1(),my4.getint1(),my4.getlong1(),my4.getstring1());


	// end
	return 1;
}


⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -