MCPcopy Create free account
hub / github.com/OpenTTD/OpenTTD / SlCalcObjMemberLength

Function SlCalcObjMemberLength

src/saveload/saveload.cpp:1663–1708  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

1661}
1662
1663size_t SlCalcObjMemberLength(const void *object, const SaveLoad &sld)
1664{
1665 assert(_sl.action == SLA_SAVE);
1666
1667 if (!SlIsObjectValidInSavegame(sld)) return 0;
1668
1669 switch (sld.cmd) {
1670 case SL_VAR: return SlCalcConvFileLen(sld.conv);
1671 case SL_REF: return SlCalcRefLen();
1672 case SL_ARR: return SlCalcArrayLen(sld.length, sld.conv);
1673 case SL_REFLIST: return SlCalcRefListLen(GetVariableAddress(object, sld), sld.conv);
1674 case SL_REFVECTOR: return SlCalcRefVectorLen(GetVariableAddress(object, sld), sld.conv);
1675 case SL_DEQUE: return SlCalcDequeLen(GetVariableAddress(object, sld), sld.conv);
1676 case SL_VECTOR: return SlCalcVectorLen(GetVariableAddress(object, sld), sld.conv);
1677 case SL_STDSTR: return SlCalcStdStringLen(GetVariableAddress(object, sld));
1678 case SL_SAVEBYTE: return 1; // a byte is logically of size 1
1679 case SL_NULL: return SlCalcConvFileLen(sld.conv) * sld.length;
1680
1681 case SL_STRUCT:
1682 case SL_STRUCTLIST: {
1683 NeedLength old_need_length = _sl.need_length;
1684 size_t old_obj_len = _sl.obj_len;
1685
1686 _sl.need_length = NL_CALCLENGTH;
1687 _sl.obj_len = 0;
1688
1689 /* Pretend that we are saving to collect the object size. Other
1690 * means are difficult, as we don't know the length of the list we
1691 * are about to store. */
1692 sld.handler->Save(const_cast<void *>(object));
1693 size_t length = _sl.obj_len;
1694
1695 _sl.obj_len = old_obj_len;
1696 _sl.need_length = old_need_length;
1697
1698 if (sld.cmd == SL_STRUCT) {
1699 length += SlGetArrayLength(1);
1700 }
1701
1702 return length;
1703 }
1704
1705 default: NOT_REACHED();
1706 }
1707 return 0;
1708}
1709
1710static bool SlObjectMember(void *object, const SaveLoad &sld)
1711{

Callers 2

SlCalcObjLengthFunction · 0.85
SlObjectMemberFunction · 0.85

Calls 13

SlCalcConvFileLenFunction · 0.85
SlCalcRefLenFunction · 0.85
SlCalcArrayLenFunction · 0.85
SlCalcRefListLenFunction · 0.85
GetVariableAddressFunction · 0.85
SlCalcRefVectorLenFunction · 0.85
SlCalcDequeLenFunction · 0.85
SlCalcVectorLenFunction · 0.85
SlCalcStdStringLenFunction · 0.85
SlGetArrayLengthFunction · 0.85
NOT_REACHEDFunction · 0.85

Tested by

no test coverage detected