// SPDX-License-Identifier: MIT pragma solidity >=0.8.24; /* Autogenerated file. Do not edit manually. */ // Import store internals import { IStore } from "@latticexyz/store/src/IStore.sol"; import { StoreSwitch } from "@latticexyz/store/src/StoreSwitch.sol"; import { StoreCore } from "@latticexyz/store/src/StoreCore.sol"; import { Bytes } from "@latticexyz/store/src/Bytes.sol"; import { Memory } from "@latticexyz/store/src/Memory.sol"; import { SliceLib } from "@latticexyz/store/src/Slice.sol"; import { EncodeArray } from "@latticexyz/store/src/tightcoder/EncodeArray.sol"; import { FieldLayout } from "@latticexyz/store/src/FieldLayout.sol"; import { Schema } from "@latticexyz/store/src/Schema.sol"; import { EncodedLengths, EncodedLengthsLib } from "@latticexyz/store/src/EncodedLengths.sol"; import { ResourceId } from "@latticexyz/store/src/ResourceId.sol"; struct EphemeralInventoryData { uint256 capacity; uint256 usedCapacity; uint256 version; uint256[] items; } library EphemeralInventory { // Hex below is the result of `WorldResourceIdLib.encode({ namespace: "evefrontier", name: "EphemeralInvento", typeId: RESOURCE_TABLE });` ResourceId constant _tableId = ResourceId.wrap(0x746265766566726f6e74696572000000457068656d6572616c496e76656e746f); FieldLayout constant _fieldLayout = FieldLayout.wrap(0x0060030120202000000000000000000000000000000000000000000000000000); // Hex-encoded key schema of (uint256, address) Schema constant _keySchema = Schema.wrap(0x003402001f610000000000000000000000000000000000000000000000000000); // Hex-encoded value schema of (uint256, uint256, uint256, uint256[]) Schema constant _valueSchema = Schema.wrap(0x006003011f1f1f81000000000000000000000000000000000000000000000000); /** * @notice Get the table's key field names. * @return keyNames An array of strings with the names of key fields. */ function getKeyNames() internal pure returns (string[] memory keyNames) { keyNames = new string[](2); keyNames[0] = "smartObjectId"; keyNames[1] = "ephemeralOwner"; } /** * @notice Get the table's value field names. * @return fieldNames An array of strings with the names of value fields. */ function getFieldNames() internal pure returns (string[] memory fieldNames) { fieldNames = new string[](4); fieldNames[0] = "capacity"; fieldNames[1] = "usedCapacity"; fieldNames[2] = "version"; fieldNames[3] = "items"; } /** * @notice Register the table with its config. */ function register() internal { StoreSwitch.registerTable(_tableId, _fieldLayout, _keySchema, _valueSchema, getKeyNames(), getFieldNames()); } /** * @notice Register the table with its config. */ function _register() internal { StoreCore.registerTable(_tableId, _fieldLayout, _keySchema, _valueSchema, getKeyNames(), getFieldNames()); } /** * @notice Get capacity. */ function getCapacity(uint256 smartObjectId, address ephemeralOwner) internal view returns (uint256 capacity) { bytes32[] memory _keyTuple = new bytes32[](2); _keyTuple[0] = bytes32(uint256(smartObjectId)); _keyTuple[1] = bytes32(uint256(uint160(ephemeralOwner))); bytes32 _blob = StoreSwitch.getStaticField(_tableId, _keyTuple, 0, _fieldLayout); return (uint256(bytes32(_blob))); } /** * @notice Get capacity. */ function _getCapacity(uint256 smartObjectId, address ephemeralOwner) internal view returns (uint256 capacity) { bytes32[] memory _keyTuple = new bytes32[](2); _keyTuple[0] = bytes32(uint256(smartObjectId)); _keyTuple[1] = bytes32(uint256(uint160(ephemeralOwner))); bytes32 _blob = StoreCore.getStaticField(_tableId, _keyTuple, 0, _fieldLayout); return (uint256(bytes32(_blob))); } /** * @notice Set capacity. */ function setCapacity(uint256 smartObjectId, address ephemeralOwner, uint256 capacity) internal { bytes32[] memory _keyTuple = new bytes32[](2); _keyTuple[0] = bytes32(uint256(smartObjectId)); _keyTuple[1] = bytes32(uint256(uint160(ephemeralOwner))); StoreSwitch.setStaticField(_tableId, _keyTuple, 0, abi.encodePacked((capacity)), _fieldLayout); } /** * @notice Set capacity. */ function _setCapacity(uint256 smartObjectId, address ephemeralOwner, uint256 capacity) internal { bytes32[] memory _keyTuple = new bytes32[](2); _keyTuple[0] = bytes32(uint256(smartObjectId)); _keyTuple[1] = bytes32(uint256(uint160(ephemeralOwner))); StoreCore.setStaticField(_tableId, _keyTuple, 0, abi.encodePacked((capacity)), _fieldLayout); } /** * @notice Get usedCapacity. */ function getUsedCapacity(uint256 smartObjectId, address ephemeralOwner) internal view returns (uint256 usedCapacity) { bytes32[] memory _keyTuple = new bytes32[](2); _keyTuple[0] = bytes32(uint256(smartObjectId)); _keyTuple[1] = bytes32(uint256(uint160(ephemeralOwner))); bytes32 _blob = StoreSwitch.getStaticField(_tableId, _keyTuple, 1, _fieldLayout); return (uint256(bytes32(_blob))); } /** * @notice Get usedCapacity. */ function _getUsedCapacity( uint256 smartObjectId, address ephemeralOwner ) internal view returns (uint256 usedCapacity) { bytes32[] memory _keyTuple = new bytes32[](2); _keyTuple[0] = bytes32(uint256(smartObjectId)); _keyTuple[1] = bytes32(uint256(uint160(ephemeralOwner))); bytes32 _blob = StoreCore.getStaticField(_tableId, _keyTuple, 1, _fieldLayout); return (uint256(bytes32(_blob))); } /** * @notice Set usedCapacity. */ function setUsedCapacity(uint256 smartObjectId, address ephemeralOwner, uint256 usedCapacity) internal { bytes32[] memory _keyTuple = new bytes32[](2); _keyTuple[0] = bytes32(uint256(smartObjectId)); _keyTuple[1] = bytes32(uint256(uint160(ephemeralOwner))); StoreSwitch.setStaticField(_tableId, _keyTuple, 1, abi.encodePacked((usedCapacity)), _fieldLayout); } /** * @notice Set usedCapacity. */ function _setUsedCapacity(uint256 smartObjectId, address ephemeralOwner, uint256 usedCapacity) internal { bytes32[] memory _keyTuple = new bytes32[](2); _keyTuple[0] = bytes32(uint256(smartObjectId)); _keyTuple[1] = bytes32(uint256(uint160(ephemeralOwner))); StoreCore.setStaticField(_tableId, _keyTuple, 1, abi.encodePacked((usedCapacity)), _fieldLayout); } /** * @notice Get version. */ function getVersion(uint256 smartObjectId, address ephemeralOwner) internal view returns (uint256 version) { bytes32[] memory _keyTuple = new bytes32[](2); _keyTuple[0] = bytes32(uint256(smartObjectId)); _keyTuple[1] = bytes32(uint256(uint160(ephemeralOwner))); bytes32 _blob = StoreSwitch.getStaticField(_tableId, _keyTuple, 2, _fieldLayout); return (uint256(bytes32(_blob))); } /** * @notice Get version. */ function _getVersion(uint256 smartObjectId, address ephemeralOwner) internal view returns (uint256 version) { bytes32[] memory _keyTuple = new bytes32[](2); _keyTuple[0] = bytes32(uint256(smartObjectId)); _keyTuple[1] = bytes32(uint256(uint160(ephemeralOwner))); bytes32 _blob = StoreCore.getStaticField(_tableId, _keyTuple, 2, _fieldLayout); return (uint256(bytes32(_blob))); } /** * @notice Set version. */ function setVersion(uint256 smartObjectId, address ephemeralOwner, uint256 version) internal { bytes32[] memory _keyTuple = new bytes32[](2); _keyTuple[0] = bytes32(uint256(smartObjectId)); _keyTuple[1] = bytes32(uint256(uint160(ephemeralOwner))); StoreSwitch.setStaticField(_tableId, _keyTuple, 2, abi.encodePacked((version)), _fieldLayout); } /** * @notice Set version. */ function _setVersion(uint256 smartObjectId, address ephemeralOwner, uint256 version) internal { bytes32[] memory _keyTuple = new bytes32[](2); _keyTuple[0] = bytes32(uint256(smartObjectId)); _keyTuple[1] = bytes32(uint256(uint160(ephemeralOwner))); StoreCore.setStaticField(_tableId, _keyTuple, 2, abi.encodePacked((version)), _fieldLayout); } /** * @notice Get items. */ function getItems(uint256 smartObjectId, address ephemeralOwner) internal view returns (uint256[] memory items) { bytes32[] memory _keyTuple = new bytes32[](2); _keyTuple[0] = bytes32(uint256(smartObjectId)); _keyTuple[1] = bytes32(uint256(uint160(ephemeralOwner))); bytes memory _blob = StoreSwitch.getDynamicField(_tableId, _keyTuple, 0); return (SliceLib.getSubslice(_blob, 0, _blob.length).decodeArray_uint256()); } /** * @notice Get items. */ function _getItems(uint256 smartObjectId, address ephemeralOwner) internal view returns (uint256[] memory items) { bytes32[] memory _keyTuple = new bytes32[](2); _keyTuple[0] = bytes32(uint256(smartObjectId)); _keyTuple[1] = bytes32(uint256(uint160(ephemeralOwner))); bytes memory _blob = StoreCore.getDynamicField(_tableId, _keyTuple, 0); return (SliceLib.getSubslice(_blob, 0, _blob.length).decodeArray_uint256()); } /** * @notice Set items. */ function setItems(uint256 smartObjectId, address ephemeralOwner, uint256[] memory items) internal { bytes32[] memory _keyTuple = new bytes32[](2); _keyTuple[0] = bytes32(uint256(smartObjectId)); _keyTuple[1] = bytes32(uint256(uint160(ephemeralOwner))); StoreSwitch.setDynamicField(_tableId, _keyTuple, 0, EncodeArray.encode((items))); } /** * @notice Set items. */ function _setItems(uint256 smartObjectId, address ephemeralOwner, uint256[] memory items) internal { bytes32[] memory _keyTuple = new bytes32[](2); _keyTuple[0] = bytes32(uint256(smartObjectId)); _keyTuple[1] = bytes32(uint256(uint160(ephemeralOwner))); StoreCore.setDynamicField(_tableId, _keyTuple, 0, EncodeArray.encode((items))); } /** * @notice Get the length of items. */ function lengthItems(uint256 smartObjectId, address ephemeralOwner) internal view returns (uint256) { bytes32[] memory _keyTuple = new bytes32[](2); _keyTuple[0] = bytes32(uint256(smartObjectId)); _keyTuple[1] = bytes32(uint256(uint160(ephemeralOwner))); uint256 _byteLength = StoreSwitch.getDynamicFieldLength(_tableId, _keyTuple, 0); unchecked { return _byteLength / 32; } } /** * @notice Get the length of items. */ function _lengthItems(uint256 smartObjectId, address ephemeralOwner) internal view returns (uint256) { bytes32[] memory _keyTuple = new bytes32[](2); _keyTuple[0] = bytes32(uint256(smartObjectId)); _keyTuple[1] = bytes32(uint256(uint160(ephemeralOwner))); uint256 _byteLength = StoreCore.getDynamicFieldLength(_tableId, _keyTuple, 0); unchecked { return _byteLength / 32; } } /** * @notice Get an item of items. * @dev Reverts with Store_IndexOutOfBounds if `_index` is out of bounds for the array. */ function getItemItems(uint256 smartObjectId, address ephemeralOwner, uint256 _index) internal view returns (uint256) { bytes32[] memory _keyTuple = new bytes32[](2); _keyTuple[0] = bytes32(uint256(smartObjectId)); _keyTuple[1] = bytes32(uint256(uint160(ephemeralOwner))); unchecked { bytes memory _blob = StoreSwitch.getDynamicFieldSlice(_tableId, _keyTuple, 0, _index * 32, (_index + 1) * 32); return (uint256(bytes32(_blob))); } } /** * @notice Get an item of items. * @dev Reverts with Store_IndexOutOfBounds if `_index` is out of bounds for the array. */ function _getItemItems( uint256 smartObjectId, address ephemeralOwner, uint256 _index ) internal view returns (uint256) { bytes32[] memory _keyTuple = new bytes32[](2); _keyTuple[0] = bytes32(uint256(smartObjectId)); _keyTuple[1] = bytes32(uint256(uint160(ephemeralOwner))); unchecked { bytes memory _blob = StoreCore.getDynamicFieldSlice(_tableId, _keyTuple, 0, _index * 32, (_index + 1) * 32); return (uint256(bytes32(_blob))); } } /** * @notice Push an element to items. */ function pushItems(uint256 smartObjectId, address ephemeralOwner, uint256 _element) internal { bytes32[] memory _keyTuple = new bytes32[](2); _keyTuple[0] = bytes32(uint256(smartObjectId)); _keyTuple[1] = bytes32(uint256(uint160(ephemeralOwner))); StoreSwitch.pushToDynamicField(_tableId, _keyTuple, 0, abi.encodePacked((_element))); } /** * @notice Push an element to items. */ function _pushItems(uint256 smartObjectId, address ephemeralOwner, uint256 _element) internal { bytes32[] memory _keyTuple = new bytes32[](2); _keyTuple[0] = bytes32(uint256(smartObjectId)); _keyTuple[1] = bytes32(uint256(uint160(ephemeralOwner))); StoreCore.pushToDynamicField(_tableId, _keyTuple, 0, abi.encodePacked((_element))); } /** * @notice Pop an element from items. */ function popItems(uint256 smartObjectId, address ephemeralOwner) internal { bytes32[] memory _keyTuple = new bytes32[](2); _keyTuple[0] = bytes32(uint256(smartObjectId)); _keyTuple[1] = bytes32(uint256(uint160(ephemeralOwner))); StoreSwitch.popFromDynamicField(_tableId, _keyTuple, 0, 32); } /** * @notice Pop an element from items. */ function _popItems(uint256 smartObjectId, address ephemeralOwner) internal { bytes32[] memory _keyTuple = new bytes32[](2); _keyTuple[0] = bytes32(uint256(smartObjectId)); _keyTuple[1] = bytes32(uint256(uint160(ephemeralOwner))); StoreCore.popFromDynamicField(_tableId, _keyTuple, 0, 32); } /** * @notice Update an element of items at `_index`. */ function updateItems(uint256 smartObjectId, address ephemeralOwner, uint256 _index, uint256 _element) internal { bytes32[] memory _keyTuple = new bytes32[](2); _keyTuple[0] = bytes32(uint256(smartObjectId)); _keyTuple[1] = bytes32(uint256(uint160(ephemeralOwner))); unchecked { bytes memory _encoded = abi.encodePacked((_element)); StoreSwitch.spliceDynamicData(_tableId, _keyTuple, 0, uint40(_index * 32), uint40(_encoded.length), _encoded); } } /** * @notice Update an element of items at `_index`. */ function _updateItems(uint256 smartObjectId, address ephemeralOwner, uint256 _index, uint256 _element) internal { bytes32[] memory _keyTuple = new bytes32[](2); _keyTuple[0] = bytes32(uint256(smartObjectId)); _keyTuple[1] = bytes32(uint256(uint160(ephemeralOwner))); unchecked { bytes memory _encoded = abi.encodePacked((_element)); StoreCore.spliceDynamicData(_tableId, _keyTuple, 0, uint40(_index * 32), uint40(_encoded.length), _encoded); } } /** * @notice Get the full data. */ function get( uint256 smartObjectId, address ephemeralOwner ) internal view returns (EphemeralInventoryData memory _table) { bytes32[] memory _keyTuple = new bytes32[](2); _keyTuple[0] = bytes32(uint256(smartObjectId)); _keyTuple[1] = bytes32(uint256(uint160(ephemeralOwner))); (bytes memory _staticData, EncodedLengths _encodedLengths, bytes memory _dynamicData) = StoreSwitch.getRecord( _tableId, _keyTuple, _fieldLayout ); return decode(_staticData, _encodedLengths, _dynamicData); } /** * @notice Get the full data. */ function _get( uint256 smartObjectId, address ephemeralOwner ) internal view returns (EphemeralInventoryData memory _table) { bytes32[] memory _keyTuple = new bytes32[](2); _keyTuple[0] = bytes32(uint256(smartObjectId)); _keyTuple[1] = bytes32(uint256(uint160(ephemeralOwner))); (bytes memory _staticData, EncodedLengths _encodedLengths, bytes memory _dynamicData) = StoreCore.getRecord( _tableId, _keyTuple, _fieldLayout ); return decode(_staticData, _encodedLengths, _dynamicData); } /** * @notice Set the full data using individual values. */ function set( uint256 smartObjectId, address ephemeralOwner, uint256 capacity, uint256 usedCapacity, uint256 version, uint256[] memory items ) internal { bytes memory _staticData = encodeStatic(capacity, usedCapacity, version); EncodedLengths _encodedLengths = encodeLengths(items); bytes memory _dynamicData = encodeDynamic(items); bytes32[] memory _keyTuple = new bytes32[](2); _keyTuple[0] = bytes32(uint256(smartObjectId)); _keyTuple[1] = bytes32(uint256(uint160(ephemeralOwner))); StoreSwitch.setRecord(_tableId, _keyTuple, _staticData, _encodedLengths, _dynamicData); } /** * @notice Set the full data using individual values. */ function _set( uint256 smartObjectId, address ephemeralOwner, uint256 capacity, uint256 usedCapacity, uint256 version, uint256[] memory items ) internal { bytes memory _staticData = encodeStatic(capacity, usedCapacity, version); EncodedLengths _encodedLengths = encodeLengths(items); bytes memory _dynamicData = encodeDynamic(items); bytes32[] memory _keyTuple = new bytes32[](2); _keyTuple[0] = bytes32(uint256(smartObjectId)); _keyTuple[1] = bytes32(uint256(uint160(ephemeralOwner))); StoreCore.setRecord(_tableId, _keyTuple, _staticData, _encodedLengths, _dynamicData, _fieldLayout); } /** * @notice Set the full data using the data struct. */ function set(uint256 smartObjectId, address ephemeralOwner, EphemeralInventoryData memory _table) internal { bytes memory _staticData = encodeStatic(_table.capacity, _table.usedCapacity, _table.version); EncodedLengths _encodedLengths = encodeLengths(_table.items); bytes memory _dynamicData = encodeDynamic(_table.items); bytes32[] memory _keyTuple = new bytes32[](2); _keyTuple[0] = bytes32(uint256(smartObjectId)); _keyTuple[1] = bytes32(uint256(uint160(ephemeralOwner))); StoreSwitch.setRecord(_tableId, _keyTuple, _staticData, _encodedLengths, _dynamicData); } /** * @notice Set the full data using the data struct. */ function _set(uint256 smartObjectId, address ephemeralOwner, EphemeralInventoryData memory _table) internal { bytes memory _staticData = encodeStatic(_table.capacity, _table.usedCapacity, _table.version); EncodedLengths _encodedLengths = encodeLengths(_table.items); bytes memory _dynamicData = encodeDynamic(_table.items); bytes32[] memory _keyTuple = new bytes32[](2); _keyTuple[0] = bytes32(uint256(smartObjectId)); _keyTuple[1] = bytes32(uint256(uint160(ephemeralOwner))); StoreCore.setRecord(_tableId, _keyTuple, _staticData, _encodedLengths, _dynamicData, _fieldLayout); } /** * @notice Decode the tightly packed blob of static data using this table's field layout. */ function decodeStatic( bytes memory _blob ) internal pure returns (uint256 capacity, uint256 usedCapacity, uint256 version) { capacity = (uint256(Bytes.getBytes32(_blob, 0))); usedCapacity = (uint256(Bytes.getBytes32(_blob, 32))); version = (uint256(Bytes.getBytes32(_blob, 64))); } /** * @notice Decode the tightly packed blob of dynamic data using the encoded lengths. */ function decodeDynamic( EncodedLengths _encodedLengths, bytes memory _blob ) internal pure returns (uint256[] memory items) { uint256 _start; uint256 _end; unchecked { _end = _encodedLengths.atIndex(0); } items = (SliceLib.getSubslice(_blob, _start, _end).decodeArray_uint256()); } /** * @notice Decode the tightly packed blobs using this table's field layout. * @param _staticData Tightly packed static fields. * @param _encodedLengths Encoded lengths of dynamic fields. * @param _dynamicData Tightly packed dynamic fields. */ function decode( bytes memory _staticData, EncodedLengths _encodedLengths, bytes memory _dynamicData ) internal pure returns (EphemeralInventoryData memory _table) { (_table.capacity, _table.usedCapacity, _table.version) = decodeStatic(_staticData); (_table.items) = decodeDynamic(_encodedLengths, _dynamicData); } /** * @notice Delete all data for given keys. */ function deleteRecord(uint256 smartObjectId, address ephemeralOwner) internal { bytes32[] memory _keyTuple = new bytes32[](2); _keyTuple[0] = bytes32(uint256(smartObjectId)); _keyTuple[1] = bytes32(uint256(uint160(ephemeralOwner))); StoreSwitch.deleteRecord(_tableId, _keyTuple); } /** * @notice Delete all data for given keys. */ function _deleteRecord(uint256 smartObjectId, address ephemeralOwner) internal { bytes32[] memory _keyTuple = new bytes32[](2); _keyTuple[0] = bytes32(uint256(smartObjectId)); _keyTuple[1] = bytes32(uint256(uint160(ephemeralOwner))); StoreCore.deleteRecord(_tableId, _keyTuple, _fieldLayout); } /** * @notice Tightly pack static (fixed length) data using this table's schema. * @return The static data, encoded into a sequence of bytes. */ function encodeStatic(uint256 capacity, uint256 usedCapacity, uint256 version) internal pure returns (bytes memory) { return abi.encodePacked(capacity, usedCapacity, version); } /** * @notice Tightly pack dynamic data lengths using this table's schema. * @return _encodedLengths The lengths of the dynamic fields (packed into a single bytes32 value). */ function encodeLengths(uint256[] memory items) internal pure returns (EncodedLengths _encodedLengths) { // Lengths are effectively checked during copy by 2**40 bytes exceeding gas limits unchecked { _encodedLengths = EncodedLengthsLib.pack(items.length * 32); } } /** * @notice Tightly pack dynamic (variable length) data using this table's schema. * @return The dynamic data, encoded into a sequence of bytes. */ function encodeDynamic(uint256[] memory items) internal pure returns (bytes memory) { return abi.encodePacked(EncodeArray.encode((items))); } /** * @notice Encode all of a record's fields. * @return The static (fixed length) data, encoded into a sequence of bytes. * @return The lengths of the dynamic fields (packed into a single bytes32 value). * @return The dynamic (variable length) data, encoded into a sequence of bytes. */ function encode( uint256 capacity, uint256 usedCapacity, uint256 version, uint256[] memory items ) internal pure returns (bytes memory, EncodedLengths, bytes memory) { bytes memory _staticData = encodeStatic(capacity, usedCapacity, version); EncodedLengths _encodedLengths = encodeLengths(items); bytes memory _dynamicData = encodeDynamic(items); return (_staticData, _encodedLengths, _dynamicData); } /** * @notice Encode keys as a bytes32 array using this table's field layout. */ function encodeKeyTuple(uint256 smartObjectId, address ephemeralOwner) internal pure returns (bytes32[] memory) { bytes32[] memory _keyTuple = new bytes32[](2); _keyTuple[0] = bytes32(uint256(smartObjectId)); _keyTuple[1] = bytes32(uint256(uint160(ephemeralOwner))); return _keyTuple; } }