2009-01-20

boost tuple based serialization

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

대강의 포맷은

Format C Type Python
x pad byte no value
c char string of length 1
b signed char integer
B unsigned char integer
? _Bool bool
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
Q unsigned long long long
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 powered by Disqus