OChannel Class
순차적 데이터 목적지 (출력).
class OChannel
멤버
Protected 생성자
바이너리 출력
타입화된 출력
블록 지원
출력 상태 제어
설명
OChannel은 순차적 데이터 목적지(출력)를 의미하는 추상 베이스 클래스입니다.
이것은 무한한 문자들의 서열로 생각해도 됩니다. (문자 스트림)
문자 하나를 기록한 후에, 시퀀스의 마지막 문자가 됩니다.
OChannel은 2가지 레벨에서 사용할 수 있습니다.
하위 레벨은 바이너리 (또는 문자) 레벨입니다. 이것은 출력 시에 어떤 변환도 이루어지지 않았습니다.
사용자가 기록한 대로 출력 채널 뒤에 있는 데이터 목적지로 전달됩니다.
상위 레벨은 타입화된 레벨입니다.
이것은 출력 채널로 심플 C++ 타입(그리고 객체)들을 기록할 수 있습니다.
이 레벨에 속한 메소드들은 현재 출력 채널로 선택된 OProtocol (출력 프로토콜) 객체를 통해 쓰기 동작을 수행합니다.
특정 타입을 쓰기 위해 출력 채널이 호출되면, 그것은 채널의 바이너리 레벨을 사용하여 데이터 목적지에 기록하는 현재의 OProtocol 객체에 그 요청을 전달하고, 그 요청된 타입을 실제 표현으로 분해합니다.
이런 간접적인 방법은 데이터 목적지에서 심플 C++ 타입의 실제 표현과 관계없이 출력 채널을 통해 동일한 코드를 사용할 수 있게 해줍니다.
즉, 사용자는 적절한 출력 프로토콜이 세트된 후 항상 출력 채널로 short나 double을 같은 방식으로 기록해야 합니다.
객체를 기록하기 위한 요청 역시 출력 프로토콜을 통해 전달됩니다.
출력 프로토콜들은 바이트 순서를 변경하거나 데이터의 텍스트 표현을 해석하고 변환하거나 그 외의 작업들을 할 수 있습니다.
또한 출력 프로토콜들은 특정 타입이 실제 표현으로 어떻게 분해되어야 하는지 알고 있습니다.
모든 출력 채널은 기본 OProtocol 객체를 갖고 있어야 합니다.
출력 채널의 완전한 순차적 특성을 완화하고 이전에 발행된 데이터를 다시 기록할 수 있도록 하기 위해 콜드 마킹(cold marking)이 도입됩니다.
사용자는 출력 채널의 현재 위치를 표시하고, 쓰기를 계속한 후 나중에 이 위치로 돌아와 이전 데이터를 다시 기록할 수 있습니다.
쓰기 포인터가 리턴되면, 출력 스트림의 끝으로부터의 오프셋을 쿼리하고 마침내 다시 출력 스트림의 끝으로 점프하도록 리셋할 수 있습니다.
표시(mark)는 중첩될(nested) 수 있습니다.
오류 처리를 용이하게 하기 위해 출력 채널은 출력 상태를 저장합니다.
이 상태는 오류가 발생하기 전까지 NoError입니다.
그 후에 사용자가 출력 상태를 리셋할 때까지는 오류 코드를 저장해 놓습니다. (예. OutputIsFull 또는 WriteError)
오류가 발생한 후에 쓰기와 같은 동작들을 수행하는 메소드들은 아무것도 하지 않고 즉시 출력 상태와 함께 리턴합니다.
출력 상태를 리셋함으로써, 이 메소드들은 정상적으로 동작하고 다시 쓰기를 시도하게 될 것입니다.
요구사항
네임스페이스: GS
헤더: Channel.hpp
참고사항
IChannel | OProtocol
| Channel