| 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 | { |
no test coverage detected