MCPcopy Create free account
hub / github.com/defold/defold / ReadEncodedIndex

Function ReadEncodedIndex

engine/script/src/script_table.cpp:817–869  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

815 }
816
817 static const char* ReadEncodedIndex(lua_State* L, char key_type, const TableHeader& header, const char* buffer)
818 {
819 if (header.m_Version == 0)
820 {
821 if (key_type != LUA_TNUMBER)
822 {
823 luaL_error(L, "Unknown key type %d", key_type);
824 }
825 uint16_t value;
826 memcpy(&value, buffer, sizeof(uint16_t));
827 lua_pushnumber(L, value);
828 buffer += sizeof(uint16_t);
829 }
830 else if (header.m_Version <= 2)
831 {
832 if (key_type != LUA_TNUMBER)
833 {
834 luaL_error(L, "Unknown key type %d", key_type);
835 }
836 uint32_t index;
837 if(DecodeMSB(index, buffer))
838 {
839 lua_pushnumber(L, index);
840 }
841 else
842 {
843 luaL_error(L, "Invalid number encoding");
844 }
845 }
846 else if (header.m_Version <= 5)
847 {
848 if (key_type != LUA_TNUMBER && key_type != LUA_TNEGATIVENUMBER)
849 {
850 luaL_error(L, "Unknown key type %d", key_type);
851 }
852 uint32_t b1 = (uint8_t)*buffer++;
853 uint32_t b2 = (uint8_t)*buffer++;
854 uint32_t b3 = (uint8_t)*buffer++;
855 uint32_t b4 = (uint8_t)*buffer++;
856 uint32_t index = (b4 << 24) | (b3 << 16) | (b2 << 8) | b1;
857 lua_Number number = index;
858 if (key_type == LUA_TNEGATIVENUMBER)
859 {
860 number = -number;
861 }
862 lua_pushnumber(L, number);
863 }
864 else
865 {
866 assert(0);
867 }
868 return buffer;
869 }
870
871 void PushTableLogChar(PushTableLogger& logger, char c)
872 {

Callers 1

DoPushTableFunction · 0.85

Calls 4

luaL_errorFunction · 0.85
lua_pushnumberFunction · 0.85
DecodeMSBFunction · 0.85
assertFunction · 0.50

Tested by

no test coverage detected