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; }