| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687 |
- #include "Base.h"
- #include "Reference.h"
- namespace gameplay
- {
- Reference::Reference(void) :
- _type(0),
- _offset(0),
- _ref(NULL)
- {
- }
- Reference::Reference(std::string _xref, Object* _ref) :
- _xref(_xref),
- _type(_ref->getTypeId()),
- _offset(0),
- _ref(_ref)
- {
- }
- Reference::~Reference(void)
- {
- }
- const char* Reference::getElementName(void) const
- {
- return "Reference";
- }
- void Reference::writeBinary(FILE* file)
- {
- Object::writeBinary(file);
- write(_xref, file);
- write(_type, file);
- write(_offset, file);
- }
- void Reference::writeText(FILE* file)
- {
- fprintElementStart(file);
- fprintfElement(file, "xref", _xref);
- fprintfElement(file, "type", _type);
- fprintfElement(file, "offset", _offset);
- fprintElementEnd(file);
- }
- bool Reference::updateOffset(FILE* file)
- {
- long newOffset = _ref->getFilePosition();
- return updateOffset(file, newOffset);
- }
- bool Reference::updateOffset(FILE* file, long newOffset)
- {
- if (getFilePosition() > 0)
- {
- // save the current offset
- long savedOffset = ftell(file);
- // update the offset data for this
- _offset = newOffset;
- // seek this Reference object in the file
- fseek(file, getFilePosition(), SEEK_SET);
- // skip over the object type
- //fseek(file, sizeof(unsigned int), SEEK_CUR);
- // skip over the id string
- skipString(file);
- // skip over the type
- //skipUint(file);
- // write over the old offset
- write(_offset, file);
- // restore the offset
- fseek(file, savedOffset, SEEK_SET);
- return true;
- }
- return false;
- }
- Object* Reference::getObj()
- {
- return _ref;
- }
- }
|