Graphisoft®

InputOutputVersion: 1.0

MemoryOChannel::SetDestination   (2)


새로운 데이터 목적지 버퍼를 세트합니다.

GSErrCode  SetDestination (
    USize initialCapacity = 0,
    USize maxSize = 0
);

파라미터

initialCapacity
문자 단위의 목적지 버퍼의 초기 용량입니다. 기본 값 0은 기본 초기 용량을 지정합니다. (현재는 1024 문자입니다)
maxSize
문자 단위의 데이터 크기 (그리고 목적지 버퍼의 용량)에 대한 상한입니다. 기본 값 0은 제한이 없다고 지정합니다.

리턴 값

의미
NoError* OK
ErrMemoryFull* 메모리가 부족합니다.
Error* 불특정 오류입니다.

* GS 네임스페이스에서 선언했지만, 글로벌 범위에서 접근 가능함

설명

이 메소드는 initialCapacity로 지정한 초기 용량을 가진 새로운 데이터 목적지 버퍼를 할당합니다. 만약 특정 인스턴스가 이전 버퍼를 소유하고 있었다면 그것은 제거될 것입니다. 목적지 버퍼는 필요에 따라 동적으로 성장합니다. (새로운 데이터의 크기가 버퍼에 맞지 않을 때) 그러나 데이터의 크기 (그리고 목적지 버퍼의 용량)은 maxSize로 지정한 크기를 절대 초과하지 않을 것입니다. 크기 제한 위반은 GS::OChannel::OutputIsFull을 리턴되게 합니다.
목적지 버퍼는 나중에 GetDestination 메소드로 쿼리될 수 있습니다. (목적지 버퍼의 소유권 역시 사용자가 부여합니다)

참고: 만약 이전 목적지 버퍼를 사용자가 갖고 있다면, (Flush 메소드를 이용하여) 내부 버퍼들을 먼저 flush합니다. 그래서 사용자는 자신의 버퍼 안에 이 출력 채널에 전송할 모든 데이터를 갖게 될 것입니다. 그러나 flush를 하는 도중 발생하는 잠재적인 오류들은 보고되지 않습니다. 만약 이것이 문제를 발생시키면, 사용자는 이 메소드를 호출하기 전에 수동으로 Flush 메소드를 호출할 수 있습니다. 버퍼링에 대한 더 자세한 것은 OChannelAdapter 베이스 클래스를 보십시오.


다음 버전부터 이용 가능합니다: 1.0




void  SetDestination (
    char*         destBuffer,
    USize         destBufferSize,
    USize         maxSize = 0,
    OwnershipType ot = OriginalOwnership
);

파라미터

destBuffer
데이터에 대한 목적지 버퍼입니다.
destBufferSize
문자 단위의 목적지 버퍼(destBuffer)의 크기입니다.
maxSize
문자 단위의 데이터 버퍼 (그리고 목적지 버퍼의 용량)에 대한 상한입니다. 기본 값 0은 제한이 없다고 지정합니다.
ot
목적지 버퍼의 소유권을 결정합니다. 가능한 값들은 다음과 같습니다:
의미
OriginalOwnership 버퍼의 소유권이 변경되지 않았습니다. 버퍼는 여전히 사용자에게 속해 있습니다. 사용자는 버퍼를 제거할 책임이 있습니다.
(이것은 기본적인 경우입니다)
PassOwnership 버퍼의 소유권을 MemoryOChannel 인스턴스에게 전달합니다. MemoryOChannel 인스턴스는 버퍼를 제거할 책임이 있습니다.

BMpAll 함수를 이용하여 버퍼를 할당해야 합니다!

설명

이 메소드는 destBufferSize로 지정한 크기를 가진 destBuffer에 제공된 새로운 목적지 버퍼를 사용하기 위해 주어진 인스턴스를 세트합니다. 만약 특정 인스턴스가 이전 버퍼를 소유했다면 그것은 제거될 것입니다. 목적지 버퍼의 원래 내용은 지워지지 않습니다. 일반 쓰기 프로세스 중에만 덮어쓰기 될 것입니다. 목적지 버퍼는 필요할 때 동적으로 성장합니다. (새로운 버퍼의 크기가 버퍼에 맞지 않을 때) 데이터의 크기 (그리고 목적지 버퍼의 용량)은 maxSize로 지정한 크기를 절대 초과하지 않을 것입니다. 크기 제한 위반은 쓰기 메소드들로부터 GS::OChannel::OutputIsFull이 리턴되게 합니다.

목적지 버퍼의 소유권은 ot 파라미터로 제어할 수 있습니다. 기본 값 OriginalOwnership은 버퍼가 사용자에게 속해 있음을 지정합니다. 버퍼는 결코 특정 인스턴스에 의해 제거되지 않을 것입니다. 예를 들어, 버퍼 재할당이 필요할 때 그저 MemoryOChannel 인스턴스에 속한 새로운 버퍼를 할당하지만 사용자의 버퍼는 제거되지 않습니다. 값 PassOwnership은 버퍼가 특정 인스턴스에게 속해 있음을 지정합니다. 버퍼는 필요시 제거될 것입니다. (예를 들면 소멸 시간에 제거됨) 올바른 제거를 보장하려면 사용자가 버퍼를 할당할 때 BMpAll 함수를 사용해야 합니다!
목적지 버퍼는 나중에 GetDestination 메소드로 쿼리될 수 있습니다. (목적지 버퍼의 소유권 역시 사용자가 부여할 수 있습니다)

참고: 만약 이전 목적지 버퍼를 사용자가 갖고 있다면, (Flush 메소드를 이용하여) 내부 버퍼들을 먼저 flush합니다. 그래서 사용자는 자신의 버퍼 안에 이 출력 채널에 전송할 모든 데이터를 갖게 될 것입니다. 그러나 flush를 하는 도중 발생하는 잠재적인 오류들은 보고되지 않습니다. 만약 이것이 문제를 발생시키면, 사용자는 이 메소드를 호출하기 전에 수동으로 Flush 메소드를 호출할 수 있습니다. 버퍼링에 대한 더 자세한 것은 OChannelAdapter 베이스 클래스를 보십시오.


다음 버전부터 이용 가능합니다: 1.0