Social Reiot

Social Game Developer wandering in strange dungeon.

Boost Tuple Based Serialization

boost serialization를 사용하려면 이모저모로 귀찮은 점이 많아서, 생각해본 것이 파이썬의 struct 라이브러리와 같은 느낌으로 프로토콜 포맷을 정의하고, 이걸 boost tuple 코드로 뽑아낸다는 아이디어이다.

대강의 포맷은

Format C Type Python Notes
x pad byte no value  
c char string of length 1  
b signed char integer  
B unsigned char integer  
? _Bool bool (1)
h short integer  
H unsigned short integer  
i int integer  
I unsigned int integer or long  
l long integer  
L unsigned long long  
q long long long (2)
Q unsigned long long long (2)
f float float  
d double float  
s char[] string  
p char[] string  
P void * long  

가령 로그인 메시지를 “ppl” 이라는 포맷으로 정의하면, 파서는 이걸 읽고

typedef boost::tuple<string,string,long> msgLogin;

이라는 클래스를 정의한다는 거다. 요기에 좀 더 기능을 첨부하자면,

- 64 bit integer
- datetime, smalldatetime 등 T-SQL 타입 지원(또는 매핑)
- STL 지원 : list, vector, map, set
- 비트 연산 지원 : B3은 바이트 타입인데 3비트만 읽고 쓴다는 뜻이 된다.

단점이라면 내부 멤버 접근을 userid, passwd 같은 이름 기반이 아니라 get<1>, get<2> 처럼 해야 한다는 점인데, 이건 좀 심하게 귀찮긴 하겠다. 역시 이름 기반 접근이 그나마 컴파일러가 검증해주니 제일 좋은 방법인가.

자. 만들어주세요.

Comments