Trait DataSize

Source
pub trait DataSize {
    const IS_DYNAMIC: bool;
    const STATIC_HEAP_SIZE: usize;

    // Required method
    fn estimate_heap_size(&self) -> usize;

    // Provided method
    fn estimate_detailed_heap_size(&self) -> MemUsageNode { ... }
}
Expand description

Indicates that a type knows how to approximate its memory usage.

Required Associated Constants§

Source

const IS_DYNAMIC: bool

If true, the type has a heap size that can vary at runtime, depending on the actual value.

Source

const STATIC_HEAP_SIZE: usize

The amount of space a value of the type always occupies. If IS_DYNAMIC is false, this is the total amount of heap memory occupied by the value. Otherwise this is a lower bound.

Required Methods§

Source

fn estimate_heap_size(&self) -> usize

Estimates the size of heap memory taken up by this value.

Does not include data on the stack, which is usually determined using mem::size_of.

Provided Methods§

Source

fn estimate_detailed_heap_size(&self) -> MemUsageNode

Create a tree of memory estimations.

Similar to estimate_heap_size, but the returned value is a tree that typically reports memory used by structs individually.

Requires the detailed feature to be enabled.

Dyn Compatibility§

This trait is not dyn compatible.

In older versions of Rust, dyn compatibility was called "object safety", so this trait is not object safe.

Implementations on Foreign Types§

Source§

impl DataSize for IpAddr

Source§

impl DataSize for SocketAddr

Source§

impl DataSize for Error

Source§

impl DataSize for ApprovalsHashesValidationError
where Error: DataSize,

Source§

impl DataSize for EntryPointAccess
where Vec<Group>: DataSize,

Source§

impl DataSize for EntryPointAddr

Source§

impl DataSize for EntryPointPayment

Source§

impl DataSize for EntryPointType

Source§

impl DataSize for EntryPointValue

Source§

impl DataSize for ContractRuntimeTag

Source§

impl DataSize for EntityAddr
where [u8; 32]: DataSize,

Source§

impl DataSize for EntityKind

Source§

impl DataSize for EntityKindTag

Source§

impl DataSize for BlockBody

Source§

impl DataSize for BlockGlobalAddr

Source§

impl DataSize for BlockGlobalAddrTag

Source§

impl DataSize for BlockHeader

Source§

impl DataSize for BlockSignatures

Source§

impl DataSize for Block

Source§

impl DataSize for BlockValidationError
where Error: DataSize,

Source§

impl DataSize for EraEnd

Source§

impl DataSize for FinalitySignature

Source§

impl DataSize for ByteCodeAddr
where [u8; 32]: DataSize,

Source§

impl DataSize for ByteCodeKind

Source§

impl DataSize for Error

Source§

impl DataSize for GenesisAccount

Source§

impl DataSize for ActivationPoint

Source§

impl DataSize for ConsensusProtocolName

Source§

impl DataSize for LegacyRequiredFinality

Source§

impl DataSize for FeeHandling

Source§

impl DataSize for HoldBalanceHandling

Source§

impl DataSize for PricingHandling

Source§

impl DataSize for CLType
where u32: DataSize,

Source§

impl DataSize for CLValueError

Source§

impl DataSize for MessagePayload

Source§

impl DataSize for ContractPackageStatus

Source§

impl DataSize for PublicKey

Source§

impl DataSize for SecretKey

Source§

impl DataSize for Signature

Source§

impl DataSize for Error

Source§

impl DataSize for ExecutionResult

Source§

impl DataSize for ExecutionResultV1

Source§

impl DataSize for OpKind

Source§

impl DataSize for TransformKindV1

Source§

impl DataSize for TransformError

Source§

impl DataSize for TransformKindV2

Source§

impl DataSize for Key

Source§

impl DataSize for PackageStatus

Source§

impl DataSize for RuntimeAddress
where [u8; 32]: DataSize,

Source§

impl DataSize for StoredValue

Source§

impl DataSize for BidAddr

Source§

impl DataSize for BidAddrTag

Source§

impl DataSize for BidKind

Source§

impl DataSize for DelegatorKind

Source§

impl DataSize for SeigniorageAllocation

Source§

impl DataSize for UnbondKind

Source§

impl DataSize for BalanceHoldAddr

Source§

impl DataSize for BalanceHoldAddrTag

Source§

impl DataSize for SystemEntityType

Source§

impl DataSize for AddressableEntityIdentifier

Source§

impl DataSize for InvalidDeploy

Source§

impl DataSize for ExecutableDeployItem

Source§

impl DataSize for Transaction

Source§

impl DataSize for InvalidTransaction

Source§

impl DataSize for InitiatorAddr

Source§

impl DataSize for PackageIdentifier

Source§

impl DataSize for PricingMode

Source§

impl DataSize for TransactionEntryPoint

Source§

impl DataSize for TransactionHash

Source§

impl DataSize for TransactionInvocationTarget

Source§

impl DataSize for TransactionScheduling

Source§

impl DataSize for TransactionRuntimeParams

Source§

impl DataSize for TransactionTarget

Source§

impl DataSize for InvalidTransaction

Source§

impl DataSize for TransactionArgs

Source§

impl DataSize for Transfer

Source§

impl DataSize for ValidatorChange

Source§

impl DataSize for bool

Source§

impl DataSize for char

Source§

impl DataSize for f32

Source§

impl DataSize for f64

Source§

impl DataSize for i8

Source§

impl DataSize for i16

Source§

impl DataSize for i32

Source§

impl DataSize for i64

Source§

impl DataSize for i128

Source§

impl DataSize for isize

Source§

impl DataSize for u8

Source§

impl DataSize for u16

Source§

impl DataSize for u32

Source§

impl DataSize for u64

Source§

impl DataSize for u128

Source§

impl DataSize for ()

Source§

impl DataSize for usize

Source§

impl DataSize for Box<str>

Source§

impl DataSize for String

Source§

impl DataSize for Ipv4Addr

Source§

impl DataSize for Ipv6Addr

Source§

impl DataSize for SocketAddrV4

Source§

impl DataSize for SocketAddrV6

Source§

impl DataSize for Duration

Source§

impl DataSize for OsString

Source§

impl DataSize for PathBuf

Source§

impl DataSize for Instant

Source§

impl DataSize for SystemTime

Source§

impl DataSize for IndexedLmdbBlockStore

Source§

impl DataSize for LmdbBlockStore

Source§

impl DataSize for ApprovalsHashes

Source§

impl DataSize for BlockHashHeightAndEra

Source§

impl DataSize for TrieRaw

Source§

impl DataSize for AccessRights

Source§

impl DataSize for AccountHash

Source§

impl DataSize for ActionThresholds

Source§

impl DataSize for AssociatedKeys

Source§

impl DataSize for Account

Source§

impl DataSize for Weight

Source§

impl DataSize for ActionThresholds

Source§

impl DataSize for AssociatedKeys

Source§

impl DataSize for EntityEntryPoint

Source§

impl DataSize for EntryPoints

Source§

impl DataSize for Parameter

Source§

impl DataSize for AddressableEntity

Source§

impl DataSize for AddressableEntityHash

Source§

impl DataSize for MessageTopics

Source§

impl DataSize for NamedKeyAddr

Source§

impl DataSize for NamedKeyValue

Source§

impl DataSize for Weight

Source§

impl DataSize for BlockBodyV1

Source§

impl DataSize for BlockBodyV2

Source§

impl DataSize for BlockHash

Source§

impl DataSize for BlockHashAndHeight

Source§

impl DataSize for BlockHeaderV1

Source§

impl DataSize for BlockHeaderV2

Source§

impl DataSize for BlockHeaderWithSignatures

Source§

impl DataSize for BlockSignaturesV1

Source§

impl DataSize for BlockSignaturesV2

Source§

impl DataSize for BlockV1

Source§

impl DataSize for BlockV2

Source§

impl DataSize for ChainNameDigest

Source§

impl DataSize for EraEndV1

Source§

impl DataSize for EraEndV2

Source§

impl DataSize for FinalitySignatureV1

Source§

impl DataSize for FinalitySignatureV2

Source§

impl DataSize for FinalitySignatureId

Source§

impl DataSize for JsonBlockWithSignatures

Source§

impl DataSize for RewardedSignatures

Source§

impl DataSize for SingleBlockRewardedSignatures

Source§

impl DataSize for BlockTime

Source§

impl DataSize for ByteCode

Source§

impl DataSize for ByteCodeHash

Source§

impl DataSize for Bytes

Source§

impl DataSize for AccountConfig

Source§

impl DataSize for DelegatorConfig

Source§

impl DataSize for AdministratorAccount

Source§

impl DataSize for GenesisValidator

Source§

impl DataSize for AccountsConfig

Source§

impl DataSize for ValidatorConfig

Source§

impl DataSize for ChainspecRawBytes

Source§

impl DataSize for CoreConfig

Source§

impl DataSize for GlobalStateUpdate

Source§

impl DataSize for GlobalStateUpdateConfig

Source§

impl DataSize for HighwayConfig

Source§

impl DataSize for NetworkConfig

Source§

impl DataSize for NextUpgrade

Source§

impl DataSize for ProtocolConfig

Source§

impl DataSize for Chainspec

Source§

impl DataSize for DeployConfig

Source§

impl DataSize for TransactionConfig

Source§

impl DataSize for TransactionLaneDefinition

Source§

impl DataSize for TransactionV1Config

Source§

impl DataSize for VacancyConfig

Source§

impl DataSize for AuctionCosts

Source§

impl DataSize for HandlePaymentCosts

Source§

impl DataSize for HostFunctionCostsV1

Source§

impl DataSize for HostFunctionCostsV2

Source§

impl DataSize for MessageLimits

Source§

impl DataSize for MintCosts

Source§

impl DataSize for BrTableCost

Source§

impl DataSize for ControlFlowCosts

Source§

impl DataSize for OpcodeCosts

Source§

impl DataSize for StandardPaymentCosts

Source§

impl DataSize for StorageCosts

Source§

impl DataSize for SystemConfig

Source§

impl DataSize for WasmConfig

Source§

impl DataSize for WasmV1Config

Source§

impl DataSize for WasmV2Config

Source§

impl DataSize for CLTypeMismatch

Source§

impl DataSize for CLValue

Source§

impl DataSize for Message

Source§

impl DataSize for MessageChecksum

Source§

impl DataSize for MessageAddr

Source§

impl DataSize for MessageTopicSummary

Source§

impl DataSize for TopicNameHash

Source§

impl DataSize for ContractWasm

Source§

impl DataSize for ContractWasmHash

Source§

impl DataSize for NamedKeys

Source§

impl DataSize for Contract

Source§

impl DataSize for ContractHash

Source§

impl DataSize for ContractPackage

Source§

impl DataSize for ContractPackageHash

Source§

impl DataSize for ContractVersionKey

Source§

impl DataSize for EntryPoint

Source§

impl DataSize for EntryPoints

Source§

impl DataSize for DeployInfo

Source§

impl DataSize for ChunkWithProof

Source§

impl DataSize for IndexedMerkleProof

Source§

impl DataSize for Digest

Source§

impl DataSize for EraId

Source§

impl DataSize for Effects

Source§

impl DataSize for ExecutionEffect

Source§

impl DataSize for NamedKey

Source§

impl DataSize for Operation

Source§

impl DataSize for TransformV1

Source§

impl DataSize for ExecutionResultV2

Source§

impl DataSize for TransformV2

Source§

impl DataSize for Gas

Source§

impl DataSize for Motes

Source§

impl DataSize for EntityVersionKey

Source§

impl DataSize for EntityVersions

Source§

impl DataSize for Group

Source§

impl DataSize for Groups

Source§

impl DataSize for Package

Source§

impl DataSize for PackageHash

Source§

impl DataSize for ProtocolVersion

Source§

impl DataSize for RuntimeFootprint

Source§

impl DataSize for SemVer

Source§

impl DataSize for TypeMismatch

Source§

impl DataSize for Bid

Source§

impl DataSize for Bridge

Source§

impl DataSize for Delegator

Source§

impl DataSize for DelegatorBid

Source§

impl DataSize for EraInfo

Source§

impl DataSize for Reservation

Source§

impl DataSize for Unbond

Source§

impl DataSize for UnbondEra

Source§

impl DataSize for UnbondingPurse

Source§

impl DataSize for ValidatorBid

Source§

impl DataSize for ValidatorCredit

Source§

impl DataSize for WithdrawPurse

Source§

impl DataSize for PrepaymentKind

Source§

impl DataSize for TimeDiff

Source§

impl DataSize for Timestamp

Source§

impl DataSize for Approval

Source§

impl DataSize for ApprovalsHash

Source§

impl DataSize for DeployHash

Source§

impl DataSize for DeployHeader

Source§

impl DataSize for DeployId

Source§

impl DataSize for ExcessiveSizeError

Source§

impl DataSize for Deploy

Source§

impl DataSize for NamedArg

Source§

impl DataSize for RuntimeArgs

Source§

impl DataSize for TransactionId

Source§

impl DataSize for ExcessiveSizeErrorV1

Source§

impl DataSize for TransactionV1

Source§

impl DataSize for TransactionV1Hash

Source§

impl DataSize for TransactionV1Payload

Source§

impl DataSize for TransferV1

Source§

impl DataSize for TransferAddr

Source§

impl DataSize for TransferV2

Source§

impl DataSize for U128

Source§

impl DataSize for U256

Source§

impl DataSize for U512

Source§

impl DataSize for URef

Source§

impl DataSize for FakeClock

Source§

impl<'a, T> DataSize for Cow<'a, T>
where T: 'a + ToOwned + ?Sized, <T as ToOwned>::Owned: DataSize,

Source§

impl<A> DataSize for SmallVec<A>
where A: Array, <A as Array>::Item: DataSize,

Source§

impl<K, V> DataSize for BTreeMap<K, V>
where K: DataSize, V: DataSize,

Source§

impl<K, V, S> DataSize for HashMap<K, V, S>
where K: DataSize, V: DataSize,

Source§

impl<T0> DataSize for (T0,)
where T0: DataSize,

Source§

const IS_DYNAMIC: bool = T0::IS_DYNAMIC

Source§

const STATIC_HEAP_SIZE: usize = T0::STATIC_HEAP_SIZE

Source§

fn estimate_heap_size(&self) -> usize

Source§

impl<T0, T1> DataSize for (T0, T1)
where T0: DataSize, T1: DataSize,

Source§

impl<T0, T1, T2> DataSize for (T0, T1, T2)
where T0: DataSize, T1: DataSize, T2: DataSize,

Source§

impl<T0, T1, T2, T3> DataSize for (T0, T1, T2, T3)
where T0: DataSize, T1: DataSize, T2: DataSize, T3: DataSize,

Source§

impl<T0, T1, T2, T3, T4> DataSize for (T0, T1, T2, T3, T4)
where T0: DataSize, T1: DataSize, T2: DataSize, T3: DataSize, T4: DataSize,

Source§

impl<T0, T1, T2, T3, T4, T5> DataSize for (T0, T1, T2, T3, T4, T5)
where T0: DataSize, T1: DataSize, T2: DataSize, T3: DataSize, T4: DataSize, T5: DataSize,

Source§

impl<T0, T1, T2, T3, T4, T5, T6> DataSize for (T0, T1, T2, T3, T4, T5, T6)
where T0: DataSize, T1: DataSize, T2: DataSize, T3: DataSize, T4: DataSize, T5: DataSize, T6: DataSize,

Source§

impl<T0, T1, T2, T3, T4, T5, T6, T7> DataSize for (T0, T1, T2, T3, T4, T5, T6, T7)
where T0: DataSize, T1: DataSize, T2: DataSize, T3: DataSize, T4: DataSize, T5: DataSize, T6: DataSize, T7: DataSize,

Source§

impl<T0, T1, T2, T3, T4, T5, T6, T7, T8> DataSize for (T0, T1, T2, T3, T4, T5, T6, T7, T8)
where T0: DataSize, T1: DataSize, T2: DataSize, T3: DataSize, T4: DataSize, T5: DataSize, T6: DataSize, T7: DataSize, T8: DataSize,

Source§

impl<T0, T1, T2, T3, T4, T5, T6, T7, T8, T9> DataSize for (T0, T1, T2, T3, T4, T5, T6, T7, T8, T9)
where T0: DataSize, T1: DataSize, T2: DataSize, T3: DataSize, T4: DataSize, T5: DataSize, T6: DataSize, T7: DataSize, T8: DataSize, T9: DataSize,

Source§

impl<T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10> DataSize for (T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10)
where T0: DataSize, T1: DataSize, T2: DataSize, T3: DataSize, T4: DataSize, T5: DataSize, T6: DataSize, T7: DataSize, T8: DataSize, T9: DataSize, T10: DataSize,

Source§

impl<T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11> DataSize for (T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11)
where T0: DataSize, T1: DataSize, T2: DataSize, T3: DataSize, T4: DataSize, T5: DataSize, T6: DataSize, T7: DataSize, T8: DataSize, T9: DataSize, T10: DataSize, T11: DataSize,

Source§

impl<T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12> DataSize for (T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12)
where T0: DataSize, T1: DataSize, T2: DataSize, T3: DataSize, T4: DataSize, T5: DataSize, T6: DataSize, T7: DataSize, T8: DataSize, T9: DataSize, T10: DataSize, T11: DataSize, T12: DataSize,

Source§

impl<T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13> DataSize for (T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13)
where T0: DataSize, T1: DataSize, T2: DataSize, T3: DataSize, T4: DataSize, T5: DataSize, T6: DataSize, T7: DataSize, T8: DataSize, T9: DataSize, T10: DataSize, T11: DataSize, T12: DataSize, T13: DataSize,

Source§

impl<T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14> DataSize for (T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14)
where T0: DataSize, T1: DataSize, T2: DataSize, T3: DataSize, T4: DataSize, T5: DataSize, T6: DataSize, T7: DataSize, T8: DataSize, T9: DataSize, T10: DataSize, T11: DataSize, T12: DataSize, T13: DataSize, T14: DataSize,

Source§

impl<T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15> DataSize for (T0, T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15)
where T0: DataSize, T1: DataSize, T2: DataSize, T3: DataSize, T4: DataSize, T5: DataSize, T6: DataSize, T7: DataSize, T8: DataSize, T9: DataSize, T10: DataSize, T11: DataSize, T12: DataSize, T13: DataSize, T14: DataSize, T15: DataSize,

Source§

impl<T> DataSize for Option<T>
where T: DataSize,

Source§

impl<T> DataSize for &T

Source§

impl<T> DataSize for &mut T

Source§

impl<T> DataSize for Box<[T]>
where T: DataSize,

Source§

impl<T> DataSize for Box<T>
where T: DataSize,

Source§

impl<T> DataSize for BinaryHeap<T>
where T: DataSize,

Source§

impl<T> DataSize for BTreeSet<T>
where T: DataSize,

Source§

impl<T> DataSize for VecDeque<T>
where T: DataSize,

Source§

impl<T> DataSize for Rc<T>
where T: ?Sized,

Source§

impl<T> DataSize for Weak<T>
where T: ?Sized,

Source§

impl<T> DataSize for Arc<T>
where T: ?Sized,

Source§

impl<T> DataSize for Weak<T>
where T: ?Sized,

Source§

impl<T> DataSize for Vec<T>
where T: DataSize,

Source§

impl<T> DataSize for Reverse<T>
where T: DataSize,

Source§

const IS_DYNAMIC: bool = <T as DataSize>::IS_DYNAMIC

Source§

const STATIC_HEAP_SIZE: usize = <T as DataSize>::STATIC_HEAP_SIZE

Source§

fn estimate_heap_size(&self) -> usize

Source§

impl<T> DataSize for PhantomData<T>

Source§

impl<T> DataSize for Range<T>
where T: DataSize,

Source§

impl<T> DataSize for AssertUnwindSafe<T>
where T: DataSize,

Source§

const IS_DYNAMIC: bool = <T as DataSize>::IS_DYNAMIC

Source§

const STATIC_HEAP_SIZE: usize = <T as DataSize>::STATIC_HEAP_SIZE

Source§

fn estimate_heap_size(&self) -> usize

Source§

impl<T> DataSize for HostFunction<T>
where T: DataSize,

Source§

impl<T> DataSize for HostFunctionV2<T>
where T: DataSize,

Source§

impl<T> DataSize for Receiver<T>

Source§

impl<T> DataSize for Sender<T>

Source§

impl<T, E> DataSize for Result<T, E>
where T: DataSize, E: DataSize,

Source§

impl<T, S> DataSize for HashSet<T, S>
where T: DataSize,

Source§

impl<T, const N: usize> DataSize for [T; N]
where T: DataSize,

Source§

impl<VID> DataSize for EraReport<VID>
where Vec<VID>: DataSize, BTreeMap<VID, u64>: DataSize,

Implementors§

Source§

impl DataSize for LoggingFormat

Source§

impl DataSize for External

Source§

impl DataSize for ExitCode

Source§

impl DataSize for SyncHandling

Source§

impl DataSize for ActionId

Source§

impl DataSize for ClContext

Source§

impl DataSize for NewBlockPayload

Source§

impl DataSize for ResolveValidity

Source§

impl DataSize for TimerId

Source§

impl DataSize for ValidatorIndex

Source§

impl DataSize for casper_node::consensus::utils::Weight

Source§

impl DataSize for LoggingConfig

Source§

impl DataSize for Storage

Source§

impl DataSize for casper_node::MainReactorConfig

Source§

impl DataSize for casper_node::StorageConfig

Source§

impl DataSize for BlockExecutionResultsOrChunk

Source§

impl DataSize for ExecutableBlock

Source§

const IS_DYNAMIC: bool = true

Source§

const STATIC_HEAP_SIZE: usize = 200usize

Source§

impl DataSize for FinalizedBlock

Source§

const IS_DYNAMIC: bool = true

Source§

const STATIC_HEAP_SIZE: usize = 200usize

Source§

impl DataSize for InternalEraReport

Source§

impl DataSize for NodeConfig

Source§

impl DataSize for TrieOrChunkId

Source§

impl<C> DataSize for Observation<C>
where C::Hash: DataSize, C: Context,

Source§

impl<C> DataSize for Dependency<C>
where C::Hash: DataSize, ValidatorIndex: DataSize, Timestamp: DataSize, C: Context,

Source§

impl<C> DataSize for Vertex<C>
where SignedWireUnit<C>: DataSize, Evidence<C>: DataSize, Endorsements<C>: DataSize, Ping<C>: DataSize, C: Context,

Source§

impl<C> DataSize for Endorsements<C>
where C::Hash: DataSize, Vec<(ValidatorIndex, C::Signature)>: DataSize, C: Context,

Source§

impl<C> DataSize for HashedWireUnit<C>
where C::Hash: DataSize, WireUnit<C>: DataSize, C: Context,

Source§

impl<C> DataSize for Ping<C>
where C::InstanceId: DataSize, C::Signature: DataSize, C: Context,

Source§

impl<C> DataSize for SignedWireUnit<C>
where HashedWireUnit<C>: DataSize, C::Signature: DataSize, C: Context,

Source§

impl<C> DataSize for WireUnit<C>
where Panorama<C>: DataSize, C::InstanceId: DataSize, Option<C::ConsensusValue>: DataSize, BTreeSet<C::Hash>: DataSize, C: Context,

Source§

impl<C> DataSize for State<C>
where HashMap<ValidatorIndex, Fault<C>>: DataSize, Panorama<C>: DataSize, C: Context,

Source§

impl<T> DataSize for ValidatorMap<T>
where T: DataSize,

Source§

impl<T> DataSize for WithDir<T>
where T: DataSize,

Source§

impl<V> DataSize for ValueOrChunk<V>

Source§

impl<VID> DataSize for Validator<VID>
where VID: DataSize,

Source§

impl<VID> DataSize for Validators<VID>
where HashMap<VID, ValidatorIndex>: DataSize, Vec<Validator<VID>>: DataSize, VID: Eq + Hash,