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> 처럼 해야 한다는 점인데, 이건 좀 심하게 귀찮긴 하겠다. 역시 이름 기반 접근이 그나마 컴파일러가 검증해주니 제일 좋은 방법인가.
자. 만들어주세요.