OpenRTMFP/Cumulus Primer(12) IO 관리 IO 흐름(계속)

3417 단어
OpenRTMFP/Cumulus Primer(12) IO 관리 IO 흐름(계속)
Author: 유대·Poechant(시계 초과)Email: zhongchao.ustc#gmail.com (#->@)
Blog:  Blog.CSDN.net/Poechant
Date: April 24th, 2012
안내
본고에서 소개한 Cumulus 서버에서 사용하는 IO 흐름은 Cumulus 서버에서의 Memory IOS를 바탕으로 한 것으로 먼저 OpenRTMFP/Cumulus Primer(11) IO 관리 IO 흐름 한 문장을 읽은 다음에 본문을 읽을 수 있다.
1 입력 흐름
class MemoryInputStream: public MemoryIOS, public std::istream
{
public:
    MemoryInputStream(const char* pBuffer,Poco::UInt32 bufferSize);
        /// Creates a MemoryInputStream for the given memory area,
        /// ready for reading.
    MemoryInputStream(MemoryInputStream&);
    ~MemoryInputStream();
        /// Destroys the MemoryInputStream.
    char*           current();
};

구조 함수, 복사 구조 함수, 분석 함수도 할 말이 없다. 메모리IOS와istream을 초기화한다.istream은 iostream의basicistream 별명(typedef).
MemoryInputStream::MemoryInputStream(const char* pBuffer, UInt32 bufferSize): 
    MemoryIOS(const_cast<char*>(pBuffer), bufferSize), istream(rdbuf()) {
}

MemoryInputStream::MemoryInputStream(MemoryInputStream& other):
    MemoryIOS(other), istream(rdbuf()) {
}

MemoryInputStream::~MemoryInputStream() {
}

유일한 구성원 함수는current입니다. MemoryIOS의 MemoryStreamBuf 구성원을 봉인한 gCurrent 함수입니다.
inline char* MemoryInputStream::current() {
    return rdbuf()->gCurrent();
}

2 출력 흐름
class MemoryOutputStream: public MemoryIOS, public std::ostream
    /// An input stream for reading from a memory area.
{
public:
    MemoryOutputStream(char* pBuffer,Poco::UInt32 bufferSize);
        /// Creates a MemoryOutputStream for the given memory area,
        /// ready for writing.
    MemoryOutputStream(MemoryOutputStream&);
    ~MemoryOutputStream();
        /// Destroys the MemoryInputStream.

    Poco::UInt32    written();
    void            written(Poco::UInt32 size);
    char*           current();
};

2.1 구조 함수, 복사 구조 함수와 분석 함수
아래와 같이 군말하지 않겠다.
MemoryOutputStream::MemoryOutputStream(char* pBuffer, UInt32 bufferSize): 
    MemoryIOS(pBuffer, bufferSize), ostream(rdbuf()) {
}
MemoryOutputStream::MemoryOutputStream(MemoryOutputStream& other):
    MemoryIOS(other), ostream(rdbuf()) {
}

MemoryOutputStream::~MemoryOutputStream(){
}

2.2 쓰기 바이트 읽기 및 설정
읽기:
inline Poco::UInt32 MemoryOutputStream::written() {
    return rdbuf()->written();
}

설정:
inline void MemoryOutputStream::written(Poco::UInt32 size) {
    rdbuf()->written(size);
}

2.3 현재 위치
MemoryInputStream의 패키지와 비슷합니다.
inline char* MemoryOutputStream::current() {
    return rdbuf()->pCurrent();
}

-
전재는 유대에서 온 CSDN 블로그: Blog.CSDN.net/Poechant
-

좋은 웹페이지 즐겨찾기