Beispiel #1
0
int Person::Unpack(IOBuffer &Buffer){
    int numBytes;
    Clear();
    numBytes = Buffer.Unpack(LastName);
    LastName[numBytes] = 0;
    if(numBytes==-1) return 0;
    numBytes = Buffer.Unpack(FirstName);
    if(numBytes==-1) return 0;
    FirstName[numBytes] = 0;
    numBytes = Buffer.Unpack(Address);
    if(numBytes==-1) return 0;
    Address[numBytes] = 0;
    numBytes = Buffer.Unpack(City);
    if(numBytes==-1) return 0;
    City[numBytes] = 0;
    numBytes = Buffer.Unpack(State);
    if(numBytes==-1) return 0;
    State[numBytes] = 0;
    numBytes = Buffer.Unpack(ZipCode);
    if(numBytes==-1) return 0;
    ZipCode[numBytes] = 0;
    return 1;
}
bool Student::Unpack(IOBuffer& buffer) {
	int numBytes;
	string idString, completedCreditHoursString;

	// 살아있는 레코드인지 일단 판별
	char aliveCheck[1];
	numBytes = buffer.Unpack(aliveCheck);
	if( aliveCheck[0] == '-' ) {
		_alive = false;
		// 죽은 레코드면 더 이상 읽을 필요 없이 return
		return false;
	}
	_alive = true;

	// string에 바로 unpack이 안 되므로 char array를 생성
	char *containerID = new char[64];
	char *containerName = new char[64];
	char *containerAddress = new char[64];
	char *containerEnrollment = new char[64];
	char *containerCredit = new char[64];

	// 한 번에 메모리 해제하기 편하게 vector에 박아둔다
	vector<char*> toRelease;
	toRelease.push_back(containerID);
	toRelease.push_back(containerName);
	toRelease.push_back(containerAddress);
	toRelease.push_back(containerEnrollment);
	toRelease.push_back(containerCredit);

	numBytes = buffer.Unpack(containerID);
	if (numBytes == -1) {
		release(toRelease);
		return false;
	}
	numBytes = buffer.Unpack(containerName);
	if (numBytes == -1) {
		release(toRelease);
		return false;
	}
	numBytes = buffer.Unpack(containerAddress);
	if (numBytes == -1) {
		release(toRelease);
		return false;
	}
	numBytes = buffer.Unpack(containerEnrollment);
	if (numBytes == -1) {
		release(toRelease);
		return false;
	}
	numBytes = buffer.Unpack(containerCredit);
	if (numBytes == -1) {
		release(toRelease);
		return false;
	}

	// 가져온 데이터들 다시 멤버 변수에 넣는다.
	_id = atoi(containerID);
	_name = string(containerName);
	_address = string(containerAddress);
	_dateOfFirstEnrollment = string(containerEnrollment);
	_completedCreditHours = atoi(containerCredit);

	// 메모리 릴리즈
	release(toRelease);

	return true;
}