// 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 NetworkNodeData { bool exists; uint256 maxEnergyCapacity; uint256 energyProduced; uint256 totalReservedEnergy; uint256 lastUpdatedAt; uint256[] connectedAssemblies; } library NetworkNode { // Hex below is the result of `WorldResourceIdLib.encode({ namespace: "evefrontier", name: "NetworkNode", typeId: RESOURCE_TABLE });` ResourceId constant _tableId = ResourceId.wrap(0x746265766566726f6e746965720000004e6574776f726b4e6f64650000000000); FieldLayout constant _fieldLayout = FieldLayout.wrap(0x0081050101202020200000000000000000000000000000000000000000000000); // Hex-encoded key schema of (uint256) Schema constant _keySchema = Schema.wrap(0x002001001f000000000000000000000000000000000000000000000000000000); // Hex-encoded value schema of (bool, uint256, uint256, uint256, uint256, uint256[]) Schema constant _valueSchema = Schema.wrap(0x00810501601f1f1f1f8100000000000000000000000000000000000000000000); /** * @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[](1); keyNames[0] = "smartObjectId"; } /** * @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[](6); fieldNames[0] = "exists"; fieldNames[1] = "maxEnergyCapacity"; fieldNames[2] = "energyProduced"; fieldNames[3] = "totalReservedEnergy"; fieldNames[4] = "lastUpdatedAt"; fieldNames[5] = "connectedAssemblies"; } /** * @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 exists. */ function getExists(uint256 smartObjectId) internal view returns (bool exists) { bytes32[] memory _keyTuple = new bytes32[](1); _keyTuple[0] = bytes32(uint256(smartObjectId)); bytes32 _blob = StoreSwitch.getStaticField(_tableId, _keyTuple, 0, _fieldLayout); return (_toBool(uint8(bytes1(_blob)))); } /** * @notice Get exists. */ function _getExists(uint256 smartObjectId) internal view returns (bool exists) { bytes32[] memory _keyTuple = new bytes32[](1); _keyTuple[0] = bytes32(uint256(smartObjectId)); bytes32 _blob = StoreCore.getStaticField(_tableId, _keyTuple, 0, _fieldLayout); return (_toBool(uint8(bytes1(_blob)))); } /** * @notice Set exists. */ function setExists(uint256 smartObjectId, bool exists) internal { bytes32[] memory _keyTuple = new bytes32[](1); _keyTuple[0] = bytes32(uint256(smartObjectId)); StoreSwitch.setStaticField(_tableId, _keyTuple, 0, abi.encodePacked((exists)), _fieldLayout); } /** * @notice Set exists. */ function _setExists(uint256 smartObjectId, bool exists) internal { bytes32[] memory _keyTuple = new bytes32[](1); _keyTuple[0] = bytes32(uint256(smartObjectId)); StoreCore.setStaticField(_tableId, _keyTuple, 0, abi.encodePacked((exists)), _fieldLayout); } /** * @notice Get maxEnergyCapacity. */ function getMaxEnergyCapacity(uint256 smartObjectId) internal view returns (uint256 maxEnergyCapacity) { bytes32[] memory _keyTuple = new bytes32[](1); _keyTuple[0] = bytes32(uint256(smartObjectId)); bytes32 _blob = StoreSwitch.getStaticField(_tableId, _keyTuple, 1, _fieldLayout); return (uint256(bytes32(_blob))); } /** * @notice Get maxEnergyCapacity. */ function _getMaxEnergyCapacity(uint256 smartObjectId) internal view returns (uint256 maxEnergyCapacity) { bytes32[] memory _keyTuple = new bytes32[](1); _keyTuple[0] = bytes32(uint256(smartObjectId)); bytes32 _blob = StoreCore.getStaticField(_tableId, _keyTuple, 1, _fieldLayout); return (uint256(bytes32(_blob))); } /** * @notice Set maxEnergyCapacity. */ function setMaxEnergyCapacity(uint256 smartObjectId, uint256 maxEnergyCapacity) internal { bytes32[] memory _keyTuple = new bytes32[](1); _keyTuple[0] = bytes32(uint256(smartObjectId)); StoreSwitch.setStaticField(_tableId, _keyTuple, 1, abi.encodePacked((maxEnergyCapacity)), _fieldLayout); } /** * @notice Set maxEnergyCapacity. */ function _setMaxEnergyCapacity(uint256 smartObjectId, uint256 maxEnergyCapacity) internal { bytes32[] memory _keyTuple = new bytes32[](1); _keyTuple[0] = bytes32(uint256(smartObjectId)); StoreCore.setStaticField(_tableId, _keyTuple, 1, abi.encodePacked((maxEnergyCapacity)), _fieldLayout); } /** * @notice Get energyProduced. */ function getEnergyProduced(uint256 smartObjectId) internal view returns (uint256 energyProduced) { bytes32[] memory _keyTuple = new bytes32[](1); _keyTuple[0] = bytes32(uint256(smartObjectId)); bytes32 _blob = StoreSwitch.getStaticField(_tableId, _keyTuple, 2, _fieldLayout); return (uint256(bytes32(_blob))); } /** * @notice Get energyProduced. */ function _getEnergyProduced(uint256 smartObjectId) internal view returns (uint256 energyProduced) { bytes32[] memory _keyTuple = new bytes32[](1); _keyTuple[0] = bytes32(uint256(smartObjectId)); bytes32 _blob = StoreCore.getStaticField(_tableId, _keyTuple, 2, _fieldLayout); return (uint256(bytes32(_blob))); } /** * @notice Set energyProduced. */ function setEnergyProduced(uint256 smartObjectId, uint256 energyProduced) internal { bytes32[] memory _keyTuple = new bytes32[](1); _keyTuple[0] = bytes32(uint256(smartObjectId)); StoreSwitch.setStaticField(_tableId, _keyTuple, 2, abi.encodePacked((energyProduced)), _fieldLayout); } /** * @notice Set energyProduced. */ function _setEnergyProduced(uint256 smartObjectId, uint256 energyProduced) internal { bytes32[] memory _keyTuple = new bytes32[](1); _keyTuple[0] = bytes32(uint256(smartObjectId)); StoreCore.setStaticField(_tableId, _keyTuple, 2, abi.encodePacked((energyProduced)), _fieldLayout); } /** * @notice Get totalReservedEnergy. */ function getTotalReservedEnergy(uint256 smartObjectId) internal view returns (uint256 totalReservedEnergy) { bytes32[] memory _keyTuple = new bytes32[](1); _keyTuple[0] = bytes32(uint256(smartObjectId)); bytes32 _blob = StoreSwitch.getStaticField(_tableId, _keyTuple, 3, _fieldLayout); return (uint256(bytes32(_blob))); } /** * @notice Get totalReservedEnergy. */ function _getTotalReservedEnergy(uint256 smartObjectId) internal view returns (uint256 totalReservedEnergy) { bytes32[] memory _keyTuple = new bytes32[](1); _keyTuple[0] = bytes32(uint256(smartObjectId)); bytes32 _blob = StoreCore.getStaticField(_tableId, _keyTuple, 3, _fieldLayout); return (uint256(bytes32(_blob))); } /** * @notice Set totalReservedEnergy. */ function setTotalReservedEnergy(uint256 smartObjectId, uint256 totalReservedEnergy) internal { bytes32[] memory _keyTuple = new bytes32[](1); _keyTuple[0] = bytes32(uint256(smartObjectId)); StoreSwitch.setStaticField(_tableId, _keyTuple, 3, abi.encodePacked((totalReservedEnergy)), _fieldLayout); } /** * @notice Set totalReservedEnergy. */ function _setTotalReservedEnergy(uint256 smartObjectId, uint256 totalReservedEnergy) internal { bytes32[] memory _keyTuple = new bytes32[](1); _keyTuple[0] = bytes32(uint256(smartObjectId)); StoreCore.setStaticField(_tableId, _keyTuple, 3, abi.encodePacked((totalReservedEnergy)), _fieldLayout); } /** * @notice Get lastUpdatedAt. */ function getLastUpdatedAt(uint256 smartObjectId) internal view returns (uint256 lastUpdatedAt) { bytes32[] memory _keyTuple = new bytes32[](1); _keyTuple[0] = bytes32(uint256(smartObjectId)); bytes32 _blob = StoreSwitch.getStaticField(_tableId, _keyTuple, 4, _fieldLayout); return (uint256(bytes32(_blob))); } /** * @notice Get lastUpdatedAt. */ function _getLastUpdatedAt(uint256 smartObjectId) internal view returns (uint256 lastUpdatedAt) { bytes32[] memory _keyTuple = new bytes32[](1); _keyTuple[0] = bytes32(uint256(smartObjectId)); bytes32 _blob = StoreCore.getStaticField(_tableId, _keyTuple, 4, _fieldLayout); return (uint256(bytes32(_blob))); } /** * @notice Set lastUpdatedAt. */ function setLastUpdatedAt(uint256 smartObjectId, uint256 lastUpdatedAt) internal { bytes32[] memory _keyTuple = new bytes32[](1); _keyTuple[0] = bytes32(uint256(smartObjectId)); StoreSwitch.setStaticField(_tableId, _keyTuple, 4, abi.encodePacked((lastUpdatedAt)), _fieldLayout); } /** * @notice Set lastUpdatedAt. */ function _setLastUpdatedAt(uint256 smartObjectId, uint256 lastUpdatedAt) internal { bytes32[] memory _keyTuple = new bytes32[](1); _keyTuple[0] = bytes32(uint256(smartObjectId)); StoreCore.setStaticField(_tableId, _keyTuple, 4, abi.encodePacked((lastUpdatedAt)), _fieldLayout); } /** * @notice Get connectedAssemblies. */ function getConnectedAssemblies(uint256 smartObjectId) internal view returns (uint256[] memory connectedAssemblies) { bytes32[] memory _keyTuple = new bytes32[](1); _keyTuple[0] = bytes32(uint256(smartObjectId)); bytes memory _blob = StoreSwitch.getDynamicField(_tableId, _keyTuple, 0); return (SliceLib.getSubslice(_blob, 0, _blob.length).decodeArray_uint256()); } /** * @notice Get connectedAssemblies. */ function _getConnectedAssemblies(uint256 smartObjectId) internal view returns (uint256[] memory connectedAssemblies) { bytes32[] memory _keyTuple = new bytes32[](1); _keyTuple[0] = bytes32(uint256(smartObjectId)); bytes memory _blob = StoreCore.getDynamicField(_tableId, _keyTuple, 0); return (SliceLib.getSubslice(_blob, 0, _blob.length).decodeArray_uint256()); } /** * @notice Set connectedAssemblies. */ function setConnectedAssemblies(uint256 smartObjectId, uint256[] memory connectedAssemblies) internal { bytes32[] memory _keyTuple = new bytes32[](1); _keyTuple[0] = bytes32(uint256(smartObjectId)); StoreSwitch.setDynamicField(_tableId, _keyTuple, 0, EncodeArray.encode((connectedAssemblies))); } /** * @notice Set connectedAssemblies. */ function _setConnectedAssemblies(uint256 smartObjectId, uint256[] memory connectedAssemblies) internal { bytes32[] memory _keyTuple = new bytes32[](1); _keyTuple[0] = bytes32(uint256(smartObjectId)); StoreCore.setDynamicField(_tableId, _keyTuple, 0, EncodeArray.encode((connectedAssemblies))); } /** * @notice Get the length of connectedAssemblies. */ function lengthConnectedAssemblies(uint256 smartObjectId) internal view returns (uint256) { bytes32[] memory _keyTuple = new bytes32[](1); _keyTuple[0] = bytes32(uint256(smartObjectId)); uint256 _byteLength = StoreSwitch.getDynamicFieldLength(_tableId, _keyTuple, 0); unchecked { return _byteLength / 32; } } /** * @notice Get the length of connectedAssemblies. */ function _lengthConnectedAssemblies(uint256 smartObjectId) internal view returns (uint256) { bytes32[] memory _keyTuple = new bytes32[](1); _keyTuple[0] = bytes32(uint256(smartObjectId)); uint256 _byteLength = StoreCore.getDynamicFieldLength(_tableId, _keyTuple, 0); unchecked { return _byteLength / 32; } } /** * @notice Get an item of connectedAssemblies. * @dev Reverts with Store_IndexOutOfBounds if `_index` is out of bounds for the array. */ function getItemConnectedAssemblies(uint256 smartObjectId, uint256 _index) internal view returns (uint256) { bytes32[] memory _keyTuple = new bytes32[](1); _keyTuple[0] = bytes32(uint256(smartObjectId)); unchecked { bytes memory _blob = StoreSwitch.getDynamicFieldSlice(_tableId, _keyTuple, 0, _index * 32, (_index + 1) * 32); return (uint256(bytes32(_blob))); } } /** * @notice Get an item of connectedAssemblies. * @dev Reverts with Store_IndexOutOfBounds if `_index` is out of bounds for the array. */ function _getItemConnectedAssemblies(uint256 smartObjectId, uint256 _index) internal view returns (uint256) { bytes32[] memory _keyTuple = new bytes32[](1); _keyTuple[0] = bytes32(uint256(smartObjectId)); unchecked { bytes memory _blob = StoreCore.getDynamicFieldSlice(_tableId, _keyTuple, 0, _index * 32, (_index + 1) * 32); return (uint256(bytes32(_blob))); } } /** * @notice Push an element to connectedAssemblies. */ function pushConnectedAssemblies(uint256 smartObjectId, uint256 _element) internal { bytes32[] memory _keyTuple = new bytes32[](1); _keyTuple[0] = bytes32(uint256(smartObjectId)); StoreSwitch.pushToDynamicField(_tableId, _keyTuple, 0, abi.encodePacked((_element))); } /** * @notice Push an element to connectedAssemblies. */ function _pushConnectedAssemblies(uint256 smartObjectId, uint256 _element) internal { bytes32[] memory _keyTuple = new bytes32[](1); _keyTuple[0] = bytes32(uint256(smartObjectId)); StoreCore.pushToDynamicField(_tableId, _keyTuple, 0, abi.encodePacked((_element))); } /** * @notice Pop an element from connectedAssemblies. */ function popConnectedAssemblies(uint256 smartObjectId) internal { bytes32[] memory _keyTuple = new bytes32[](1); _keyTuple[0] = bytes32(uint256(smartObjectId)); StoreSwitch.popFromDynamicField(_tableId, _keyTuple, 0, 32); } /** * @notice Pop an element from connectedAssemblies. */ function _popConnectedAssemblies(uint256 smartObjectId) internal { bytes32[] memory _keyTuple = new bytes32[](1); _keyTuple[0] = bytes32(uint256(smartObjectId)); StoreCore.popFromDynamicField(_tableId, _keyTuple, 0, 32); } /** * @notice Update an element of connectedAssemblies at `_index`. */ function updateConnectedAssemblies(uint256 smartObjectId, uint256 _index, uint256 _element) internal { bytes32[] memory _keyTuple = new bytes32[](1); _keyTuple[0] = bytes32(uint256(smartObjectId)); unchecked { bytes memory _encoded = abi.encodePacked((_element)); StoreSwitch.spliceDynamicData(_tableId, _keyTuple, 0, uint40(_index * 32), uint40(_encoded.length), _encoded); } } /** * @notice Update an element of connectedAssemblies at `_index`. */ function _updateConnectedAssemblies(uint256 smartObjectId, uint256 _index, uint256 _element) internal { bytes32[] memory _keyTuple = new bytes32[](1); _keyTuple[0] = bytes32(uint256(smartObjectId)); 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) internal view returns (NetworkNodeData memory _table) { bytes32[] memory _keyTuple = new bytes32[](1); _keyTuple[0] = bytes32(uint256(smartObjectId)); (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) internal view returns (NetworkNodeData memory _table) { bytes32[] memory _keyTuple = new bytes32[](1); _keyTuple[0] = bytes32(uint256(smartObjectId)); (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, bool exists, uint256 maxEnergyCapacity, uint256 energyProduced, uint256 totalReservedEnergy, uint256 lastUpdatedAt, uint256[] memory connectedAssemblies ) internal { bytes memory _staticData = encodeStatic( exists, maxEnergyCapacity, energyProduced, totalReservedEnergy, lastUpdatedAt ); EncodedLengths _encodedLengths = encodeLengths(connectedAssemblies); bytes memory _dynamicData = encodeDynamic(connectedAssemblies); bytes32[] memory _keyTuple = new bytes32[](1); _keyTuple[0] = bytes32(uint256(smartObjectId)); StoreSwitch.setRecord(_tableId, _keyTuple, _staticData, _encodedLengths, _dynamicData); } /** * @notice Set the full data using individual values. */ function _set( uint256 smartObjectId, bool exists, uint256 maxEnergyCapacity, uint256 energyProduced, uint256 totalReservedEnergy, uint256 lastUpdatedAt, uint256[] memory connectedAssemblies ) internal { bytes memory _staticData = encodeStatic( exists, maxEnergyCapacity, energyProduced, totalReservedEnergy, lastUpdatedAt ); EncodedLengths _encodedLengths = encodeLengths(connectedAssemblies); bytes memory _dynamicData = encodeDynamic(connectedAssemblies); bytes32[] memory _keyTuple = new bytes32[](1); _keyTuple[0] = bytes32(uint256(smartObjectId)); StoreCore.setRecord(_tableId, _keyTuple, _staticData, _encodedLengths, _dynamicData, _fieldLayout); } /** * @notice Set the full data using the data struct. */ function set(uint256 smartObjectId, NetworkNodeData memory _table) internal { bytes memory _staticData = encodeStatic( _table.exists, _table.maxEnergyCapacity, _table.energyProduced, _table.totalReservedEnergy, _table.lastUpdatedAt ); EncodedLengths _encodedLengths = encodeLengths(_table.connectedAssemblies); bytes memory _dynamicData = encodeDynamic(_table.connectedAssemblies); bytes32[] memory _keyTuple = new bytes32[](1); _keyTuple[0] = bytes32(uint256(smartObjectId)); StoreSwitch.setRecord(_tableId, _keyTuple, _staticData, _encodedLengths, _dynamicData); } /** * @notice Set the full data using the data struct. */ function _set(uint256 smartObjectId, NetworkNodeData memory _table) internal { bytes memory _staticData = encodeStatic( _table.exists, _table.maxEnergyCapacity, _table.energyProduced, _table.totalReservedEnergy, _table.lastUpdatedAt ); EncodedLengths _encodedLengths = encodeLengths(_table.connectedAssemblies); bytes memory _dynamicData = encodeDynamic(_table.connectedAssemblies); bytes32[] memory _keyTuple = new bytes32[](1); _keyTuple[0] = bytes32(uint256(smartObjectId)); 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 ( bool exists, uint256 maxEnergyCapacity, uint256 energyProduced, uint256 totalReservedEnergy, uint256 lastUpdatedAt ) { exists = (_toBool(uint8(Bytes.getBytes1(_blob, 0)))); maxEnergyCapacity = (uint256(Bytes.getBytes32(_blob, 1))); energyProduced = (uint256(Bytes.getBytes32(_blob, 33))); totalReservedEnergy = (uint256(Bytes.getBytes32(_blob, 65))); lastUpdatedAt = (uint256(Bytes.getBytes32(_blob, 97))); } /** * @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 connectedAssemblies) { uint256 _start; uint256 _end; unchecked { _end = _encodedLengths.atIndex(0); } connectedAssemblies = (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 (NetworkNodeData memory _table) { ( _table.exists, _table.maxEnergyCapacity, _table.energyProduced, _table.totalReservedEnergy, _table.lastUpdatedAt ) = decodeStatic(_staticData); (_table.connectedAssemblies) = decodeDynamic(_encodedLengths, _dynamicData); } /** * @notice Delete all data for given keys. */ function deleteRecord(uint256 smartObjectId) internal { bytes32[] memory _keyTuple = new bytes32[](1); _keyTuple[0] = bytes32(uint256(smartObjectId)); StoreSwitch.deleteRecord(_tableId, _keyTuple); } /** * @notice Delete all data for given keys. */ function _deleteRecord(uint256 smartObjectId) internal { bytes32[] memory _keyTuple = new bytes32[](1); _keyTuple[0] = bytes32(uint256(smartObjectId)); 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( bool exists, uint256 maxEnergyCapacity, uint256 energyProduced, uint256 totalReservedEnergy, uint256 lastUpdatedAt ) internal pure returns (bytes memory) { return abi.encodePacked(exists, maxEnergyCapacity, energyProduced, totalReservedEnergy, lastUpdatedAt); } /** * @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 connectedAssemblies) internal pure returns (EncodedLengths _encodedLengths) { // Lengths are effectively checked during copy by 2**40 bytes exceeding gas limits unchecked { _encodedLengths = EncodedLengthsLib.pack(connectedAssemblies.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 connectedAssemblies) internal pure returns (bytes memory) { return abi.encodePacked(EncodeArray.encode((connectedAssemblies))); } /** * @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( bool exists, uint256 maxEnergyCapacity, uint256 energyProduced, uint256 totalReservedEnergy, uint256 lastUpdatedAt, uint256[] memory connectedAssemblies ) internal pure returns (bytes memory, EncodedLengths, bytes memory) { bytes memory _staticData = encodeStatic( exists, maxEnergyCapacity, energyProduced, totalReservedEnergy, lastUpdatedAt ); EncodedLengths _encodedLengths = encodeLengths(connectedAssemblies); bytes memory _dynamicData = encodeDynamic(connectedAssemblies); return (_staticData, _encodedLengths, _dynamicData); } /** * @notice Encode keys as a bytes32 array using this table's field layout. */ function encodeKeyTuple(uint256 smartObjectId) internal pure returns (bytes32[] memory) { bytes32[] memory _keyTuple = new bytes32[](1); _keyTuple[0] = bytes32(uint256(smartObjectId)); return _keyTuple; } } /** * @notice Cast a value to a bool. * @dev Boolean values are encoded as uint8 (1 = true, 0 = false), but Solidity doesn't allow casting between uint8 and bool. * @param value The uint8 value to convert. * @return result The boolean value. */ function _toBool(uint8 value) pure returns (bool result) { assembly { result := value } }