Graphisoft®

GSRootVersion: 1.0

OChannel Class

순차적 데이터 목적지 (출력).

class OChannel

멤버

Protected 생성자

OChannel OChannel 생성자입니다.

바이너리 출력

WriteBin 출력 채널로 바이너리 데이터를 기록합니다.
DirectOutputAccess 출력 채널의 내용에 직접 접근할 수 있게 해줍니다.
Flush 내부 버퍼들을 데이터 목적지로 flush합니다.

타입화된 출력

Write 출력 채널로 심플 C++ 타입 (또는 Object)을 기록합니다.
operator<< 출력 채널로 심플 C++ 타입 (또는 Object)을 기록합니다.
WriteChar 출력 채널로 문자 하나를 기록합니다.
WriteUChar 출력 채널로 unsigned 문자 하나를 기록합니다.
WriteBool 출력 채널로 boolean 하나를 기록합니다.
WriteShort 출력 채널로 short integer 하나를 기록합니다.
WriteUShort 출력 채널로 unsigned short integer 하나를 기록합니다.
WriteInt 출력 채널로 integer 하나를 기록합니다.
WriteUInt 출력 채널로 unsigned integer 하나를 기록합니다.
WriteLong 출력 채널로 long integer 하나를 기록합니다.
WriteULong 출력 채널로 unsigned long integer 하나를 기록합니다.
WriteFloat 출력 채널로 float 하나를 기록합니다.
WriteDouble 출력 채널로 double 하나를 기록합니다.
WriteLDouble 출력 채널로 long double 하나를 기록합니다.
SetOutputProtocol 주어진 출력 프로토콜 객체를 세트합니다.
GetOutputProtocol 현재 출력 프로토콜 객체를 리턴합니다.
SetDefaultOutputProtocol 기본 출력 프로토콜 객체를 세트합니다.

블록 지원

PushMark 현재 위치에서 새로운 마크를 출력 채널로 push합니다.
PopMark 마지막 마크를 pop하고 쓰기 포인터를 그 위치로 리턴합니다.
GetOffset 쓰기 포인터의 오프셋을 리턴합니다.
ResetOffset 쓰기 포인터의 오프셋을 리셋합니다.
OpenBlock 데이터 크기로 확장된 새로운 데이터 블록을 엽니다.
CloseBlock 마지막 데이터 블록을 닫습니다.

출력 상태 제어

GetOutputStatus 출력 채널의 출력 상태를 리턴합니다.
ResetOutputStatus 출력 채널의 출력 상태를 리셋합니다.

설명

OChannel은 순차적 데이터 목적지(출력)를 의미하는 추상 베이스 클래스입니다. 이것은 무한한 문자들의 서열로 생각해도 됩니다. (문자 스트림) 문자 하나를 기록한 후에, 시퀀스의 마지막 문자가 됩니다.
OChannel은 2가지 레벨에서 사용할 수 있습니다.

하위 레벨은 바이너리 (또는 문자) 레벨입니다. 이것은 출력 시에 어떤 변환도 이루어지지 않았습니다. 사용자가 기록한 대로 출력 채널 뒤에 있는 데이터 목적지로 전달됩니다.

상위 레벨은 타입화된 레벨입니다. 이것은 출력 채널로 심플 C++ 타입(그리고 객체)들을 기록할 수 있습니다. 이 레벨에 속한 메소드들은 현재 출력 채널로 선택된 OProtocol (출력 프로토콜) 객체를 통해 쓰기 동작을 수행합니다. 특정 타입을 쓰기 위해 출력 채널이 호출되면, 그것은 채널의 바이너리 레벨을 사용하여 데이터 목적지에 기록하는 현재의 OProtocol 객체에 그 요청을 전달하고, 그 요청된 타입을 실제 표현으로 분해합니다.
이런 간접적인 방법은 데이터 목적지에서 심플 C++ 타입의 실제 표현과 관계없이 출력 채널을 통해 동일한 코드를 사용할 수 있게 해줍니다. 즉, 사용자는 적절한 출력 프로토콜이 세트된 후 항상 출력 채널로 short나 double을 같은 방식으로 기록해야 합니다. 객체를 기록하기 위한 요청 역시 출력 프로토콜을 통해 전달됩니다.
출력 프로토콜들은 바이트 순서를 변경하거나 데이터의 텍스트 표현을 해석하고 변환하거나 그 외의 작업들을 할 수 있습니다. 또한 출력 프로토콜들은 특정 타입이 실제 표현으로 어떻게 분해되어야 하는지 알고 있습니다. 모든 출력 채널은 기본 OProtocol 객체를 갖고 있어야 합니다.

출력 채널의 완전한 순차적 특성을 완화하고 이전에 발행된 데이터를 다시 기록할 수 있도록 하기 위해 콜드 마킹(cold marking)이 도입됩니다. 사용자는 출력 채널의 현재 위치를 표시하고, 쓰기를 계속한 후 나중에 이 위치로 돌아와 이전 데이터를 다시 기록할 수 있습니다. 쓰기 포인터가 리턴되면, 출력 스트림의 끝으로부터의 오프셋을 쿼리하고 마침내 다시 출력 스트림의 끝으로 점프하도록 리셋할 수 있습니다. 표시(mark)는 중첩될(nested) 수 있습니다.

오류 처리를 용이하게 하기 위해 출력 채널은 출력 상태를 저장합니다. 이 상태는 오류가 발생하기 전까지 NoError입니다. 그 후에 사용자가 출력 상태를 리셋할 때까지는 오류 코드를 저장해 놓습니다. (예. OutputIsFull 또는 WriteError) 오류가 발생한 후에 쓰기와 같은 동작들을 수행하는 메소드들은 아무것도 하지 않고 즉시 출력 상태와 함께 리턴합니다. 출력 상태를 리셋함으로써, 이 메소드들은 정상적으로 동작하고 다시 쓰기를 시도하게 될 것입니다.

요구사항

네임스페이스: GS

헤더: Channel.hpp

참고사항

IChannel | OProtocol | Channel