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

Function SlObjectMember

src/saveload/saveload.cpp:1710–1811  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

1708}
1709
1710static bool SlObjectMember(void *object, const SaveLoad &sld)
1711{
1712 if (!SlIsObjectValidInSavegame(sld)) return false;
1713
1714 VarType conv = GB(sld.conv, 0, 8);
1715 switch (sld.cmd) {
1716 case SL_VAR:
1717 case SL_REF:
1718 case SL_ARR:
1719 case SL_REFLIST:
1720 case SL_REFVECTOR:
1721 case SL_DEQUE:
1722 case SL_VECTOR:
1723 case SL_STDSTR: {
1724 void *ptr = GetVariableAddress(object, sld);
1725
1726 switch (sld.cmd) {
1727 case SL_VAR: SlSaveLoadConv(ptr, conv); break;
1728 case SL_REF: SlSaveLoadRef(ptr, conv); break;
1729 case SL_ARR: SlArray(ptr, sld.length, conv); break;
1730 case SL_REFLIST: SlRefList(ptr, conv); break;
1731 case SL_REFVECTOR: SlRefVector(ptr, conv); break;
1732 case SL_DEQUE: SlDeque(ptr, conv); break;
1733 case SL_VECTOR: SlVector(ptr, conv); break;
1734 case SL_STDSTR: SlStdString(ptr, sld.conv); break;
1735 default: NOT_REACHED();
1736 }
1737 break;
1738 }
1739
1740 /* SL_SAVEBYTE writes a value to the savegame to identify the type of an object.
1741 * When loading, the value is read explicitly with SlReadByte() to determine which
1742 * object description to use. */
1743 case SL_SAVEBYTE: {
1744 void *ptr = GetVariableAddress(object, sld);
1745
1746 switch (_sl.action) {
1747 case SLA_SAVE: SlWriteByte(*(uint8_t *)ptr); break;
1748 case SLA_LOAD_CHECK:
1749 case SLA_LOAD:
1750 case SLA_PTRS:
1751 case SLA_NULL: break;
1752 default: NOT_REACHED();
1753 }
1754 break;
1755 }
1756
1757 case SL_NULL: {
1758 assert(GetVarMemType(sld.conv) == SLE_VAR_NULL);
1759
1760 switch (_sl.action) {
1761 case SLA_LOAD_CHECK:
1762 case SLA_LOAD: SlSkipBytes(SlCalcConvFileLen(sld.conv) * sld.length); break;
1763 case SLA_SAVE: for (int i = 0; i < SlCalcConvFileLen(sld.conv) * sld.length; i++) SlWriteByte(0); break;
1764 case SLA_PTRS:
1765 case SLA_NULL: break;
1766 default: NOT_REACHED();
1767 }

Callers 1

SlObjectFunction · 0.85

Calls 15

GBFunction · 0.85
GetVariableAddressFunction · 0.85
SlSaveLoadConvFunction · 0.85
SlSaveLoadRefFunction · 0.85
SlArrayFunction · 0.85
SlRefListFunction · 0.85
SlRefVectorFunction · 0.85
SlDequeFunction · 0.85
SlVectorFunction · 0.85
SlStdStringFunction · 0.85
NOT_REACHEDFunction · 0.85

Tested by

no test coverage detected