2009년 10월 16일 금요일

deque 를 이용한 간단한 버퍼

이런게 종종 필요하지.
급히 필요해서 테스트겸 만들어본 코드.
c++ 자주 안쓰게되서 레퍼런스 안보곤 못짜겠더군.

#include <deque>
#include <algorithm>
#include <iterator>
#include <iostream>
using namespace std;

int main()
{
char* p1 = "abcde";
char* p2 = "fghij";

typedef deque<char> buf_t;
buf_t buf;

// 먼저 p1 을 넣어보자
// 보통 네트웍에서 읽는 값은 이렇게 버퍼에 쌓아두고 본다.
copy(p1,
p1+strlen(p1),
back_insert_iterator<buf_t>(buf));

// 이제 버퍼에서 일부를 꺼내보자
// 이때는 원하는 모양만큼 가려서 꺼내면 된다.
// 만약 패킷완성이 덜됐다면 skip 하던가 하면 되겠지.
char tmp[3];
copy(buf.begin(),
buf.begin()+3,
tmp);
cout << tmp << endl;

// 버퍼에서 일부를 삭제해보자
// 패킷하나를 전부 읽었다면 버퍼에서 뽑아내야겠지.
buf.erase(buf.begin(),
buf.begin()+3);

// 남은 버퍼를 확인해보자
copy(buf.begin(),
buf.end(),
ostream_iterator<char>(cout, ""));
cout << endl;

// 음. 계속해서 패킷이 도착하겠지
copy(p2,
p2+strlen(p2),
back_insert_iterator<buf_t>(buf));

// 남은 버퍼 찍어보자
copy(buf.begin(),
buf.end(),
ostream_iterator<char>(cout, ""));
cout << endl;


//
cout << "ok" << endl;
}



댓글 없음: