Trait HasMemoryCostStructural

Source
pub trait HasMemoryCostStructural {
    // Required method
    fn indirect_memory_cost(&self, _: EnabledToken) -> usize;
}
Expand description

Types whose HasMemoryCost is derived structurally

Usually implemented using #[derive_deftly(HasMemoryCost)].

For Copy types, it can also be implemented with memory_cost_structural_copy!.

When this trait is implemented, a blanket impl provides HasMemoryCost.

§Structural memory cost

We call the memory cost “structural” when it is derived from the type’s structure.

The memory cost of a HasMemoryCostStructural type is:

  • The number of bytes in its own size size_of; plus

  • The (structural) memory cost of all the out-of-line data that it owns; that’s what’s returned by indirect_memory_cost

For example, Strings out-of-line memory cost is just its capacity, so its memory cost is the size of its three word layout plus its capacity.

This calculation is performed by the blanket impl of HasMemoryCost.

§Shared data - non-'static types, Arc

It is probably a mistake to implement this trait (or HasMemoryCost) for types with out-of-line data that they don’t exclusively own. After all, the memory cost must be known and fixed, and if there is shared data it’s not clear how it should be accounted.

Required Methods§

Source

fn indirect_memory_cost(&self, _: EnabledToken) -> usize

Memory cost of data stored out-of-line

The total memory cost is the cost of the layout of self plus this.

Implementations on Foreign Types§

Source§

impl HasMemoryCostStructural for IpAddr

Source§

impl HasMemoryCostStructural for i8

Source§

impl HasMemoryCostStructural for i16

Source§

impl HasMemoryCostStructural for i32

Source§

impl HasMemoryCostStructural for i64

Source§

impl HasMemoryCostStructural for isize

Source§

impl HasMemoryCostStructural for u8

Source§

impl HasMemoryCostStructural for u16

Source§

impl HasMemoryCostStructural for u32

Source§

impl HasMemoryCostStructural for u64

Source§

impl HasMemoryCostStructural for ()

Source§

impl HasMemoryCostStructural for usize

Source§

impl HasMemoryCostStructural for String

Source§

impl HasMemoryCostStructural for Ipv4Addr

Source§

impl HasMemoryCostStructural for Ipv6Addr

Source§

impl HasMemoryCostStructural for NonZeroI8

Source§

impl HasMemoryCostStructural for NonZeroI16

Source§

impl HasMemoryCostStructural for NonZeroI32

Source§

impl HasMemoryCostStructural for NonZeroI64

Source§

impl HasMemoryCostStructural for NonZeroIsize

Source§

impl HasMemoryCostStructural for NonZeroU8

Source§

impl HasMemoryCostStructural for NonZeroU16

Source§

impl HasMemoryCostStructural for NonZeroU32

Source§

impl HasMemoryCostStructural for NonZeroU64

Source§

impl HasMemoryCostStructural for NonZeroUsize

Source§

impl<A: HasMemoryCostStructural> HasMemoryCostStructural for (A,)

Source§

impl<A: HasMemoryCostStructural, B: HasMemoryCostStructural> HasMemoryCostStructural for (A, B)

Source§

impl<A: HasMemoryCostStructural, B: HasMemoryCostStructural, C: HasMemoryCostStructural> HasMemoryCostStructural for (A, B, C)

Source§

impl<A: HasMemoryCostStructural, B: HasMemoryCostStructural, C: HasMemoryCostStructural, D: HasMemoryCostStructural> HasMemoryCostStructural for (A, B, C, D)

Source§

impl<A: HasMemoryCostStructural, B: HasMemoryCostStructural, C: HasMemoryCostStructural, D: HasMemoryCostStructural, E: HasMemoryCostStructural> HasMemoryCostStructural for (A, B, C, D, E)

Source§

impl<A: HasMemoryCostStructural, B: HasMemoryCostStructural, C: HasMemoryCostStructural, D: HasMemoryCostStructural, E: HasMemoryCostStructural, F: HasMemoryCostStructural> HasMemoryCostStructural for (A, B, C, D, E, F)

Source§

impl<A: HasMemoryCostStructural, B: HasMemoryCostStructural, C: HasMemoryCostStructural, D: HasMemoryCostStructural, E: HasMemoryCostStructural, F: HasMemoryCostStructural, G: HasMemoryCostStructural> HasMemoryCostStructural for (A, B, C, D, E, F, G)

Source§

impl<A: HasMemoryCostStructural, B: HasMemoryCostStructural, C: HasMemoryCostStructural, D: HasMemoryCostStructural, E: HasMemoryCostStructural, F: HasMemoryCostStructural, G: HasMemoryCostStructural, H: HasMemoryCostStructural> HasMemoryCostStructural for (A, B, C, D, E, F, G, H)

Source§

impl<A: HasMemoryCostStructural, B: HasMemoryCostStructural, C: HasMemoryCostStructural, D: HasMemoryCostStructural, E: HasMemoryCostStructural, F: HasMemoryCostStructural, G: HasMemoryCostStructural, H: HasMemoryCostStructural, I: HasMemoryCostStructural> HasMemoryCostStructural for (A, B, C, D, E, F, G, H, I)

Source§

impl<A: HasMemoryCostStructural, B: HasMemoryCostStructural, C: HasMemoryCostStructural, D: HasMemoryCostStructural, E: HasMemoryCostStructural, F: HasMemoryCostStructural, G: HasMemoryCostStructural, H: HasMemoryCostStructural, I: HasMemoryCostStructural, J: HasMemoryCostStructural> HasMemoryCostStructural for (A, B, C, D, E, F, G, H, I, J)

Source§

impl<A: HasMemoryCostStructural, B: HasMemoryCostStructural, C: HasMemoryCostStructural, D: HasMemoryCostStructural, E: HasMemoryCostStructural, F: HasMemoryCostStructural, G: HasMemoryCostStructural, H: HasMemoryCostStructural, I: HasMemoryCostStructural, J: HasMemoryCostStructural, K: HasMemoryCostStructural> HasMemoryCostStructural for (A, B, C, D, E, F, G, H, I, J, K)

Source§

impl<A: HasMemoryCostStructural, B: HasMemoryCostStructural, C: HasMemoryCostStructural, D: HasMemoryCostStructural, E: HasMemoryCostStructural, F: HasMemoryCostStructural, G: HasMemoryCostStructural, H: HasMemoryCostStructural, I: HasMemoryCostStructural, J: HasMemoryCostStructural, K: HasMemoryCostStructural, L: HasMemoryCostStructural> HasMemoryCostStructural for (A, B, C, D, E, F, G, H, I, J, K, L)

Source§

impl<A: HasMemoryCostStructural, B: HasMemoryCostStructural, C: HasMemoryCostStructural, D: HasMemoryCostStructural, E: HasMemoryCostStructural, F: HasMemoryCostStructural, G: HasMemoryCostStructural, H: HasMemoryCostStructural, I: HasMemoryCostStructural, J: HasMemoryCostStructural, K: HasMemoryCostStructural, L: HasMemoryCostStructural, M: HasMemoryCostStructural> HasMemoryCostStructural for (A, B, C, D, E, F, G, H, I, J, K, L, M)

Source§

impl<A: HasMemoryCostStructural, B: HasMemoryCostStructural, C: HasMemoryCostStructural, D: HasMemoryCostStructural, E: HasMemoryCostStructural, F: HasMemoryCostStructural, G: HasMemoryCostStructural, H: HasMemoryCostStructural, I: HasMemoryCostStructural, J: HasMemoryCostStructural, K: HasMemoryCostStructural, L: HasMemoryCostStructural, M: HasMemoryCostStructural, N: HasMemoryCostStructural> HasMemoryCostStructural for (A, B, C, D, E, F, G, H, I, J, K, L, M, N)

Source§

impl<A: HasMemoryCostStructural, B: HasMemoryCostStructural, C: HasMemoryCostStructural, D: HasMemoryCostStructural, E: HasMemoryCostStructural, F: HasMemoryCostStructural, G: HasMemoryCostStructural, H: HasMemoryCostStructural, I: HasMemoryCostStructural, J: HasMemoryCostStructural, K: HasMemoryCostStructural, L: HasMemoryCostStructural, M: HasMemoryCostStructural, N: HasMemoryCostStructural, O: HasMemoryCostStructural> HasMemoryCostStructural for (A, B, C, D, E, F, G, H, I, J, K, L, M, N, O)

Source§

impl<A: HasMemoryCostStructural, B: HasMemoryCostStructural, C: HasMemoryCostStructural, D: HasMemoryCostStructural, E: HasMemoryCostStructural, F: HasMemoryCostStructural, G: HasMemoryCostStructural, H: HasMemoryCostStructural, I: HasMemoryCostStructural, J: HasMemoryCostStructural, K: HasMemoryCostStructural, L: HasMemoryCostStructural, M: HasMemoryCostStructural, N: HasMemoryCostStructural, O: HasMemoryCostStructural, P: HasMemoryCostStructural> HasMemoryCostStructural for (A, B, C, D, E, F, G, H, I, J, K, L, M, N, O, P)

Source§

impl<A: HasMemoryCostStructural, B: HasMemoryCostStructural, C: HasMemoryCostStructural, D: HasMemoryCostStructural, E: HasMemoryCostStructural, F: HasMemoryCostStructural, G: HasMemoryCostStructural, H: HasMemoryCostStructural, I: HasMemoryCostStructural, J: HasMemoryCostStructural, K: HasMemoryCostStructural, L: HasMemoryCostStructural, M: HasMemoryCostStructural, N: HasMemoryCostStructural, O: HasMemoryCostStructural, P: HasMemoryCostStructural, Q: HasMemoryCostStructural> HasMemoryCostStructural for (A, B, C, D, E, F, G, H, I, J, K, L, M, N, O, P, Q)

Source§

impl<A: HasMemoryCostStructural, B: HasMemoryCostStructural, C: HasMemoryCostStructural, D: HasMemoryCostStructural, E: HasMemoryCostStructural, F: HasMemoryCostStructural, G: HasMemoryCostStructural, H: HasMemoryCostStructural, I: HasMemoryCostStructural, J: HasMemoryCostStructural, K: HasMemoryCostStructural, L: HasMemoryCostStructural, M: HasMemoryCostStructural, N: HasMemoryCostStructural, O: HasMemoryCostStructural, P: HasMemoryCostStructural, Q: HasMemoryCostStructural, R: HasMemoryCostStructural> HasMemoryCostStructural for (A, B, C, D, E, F, G, H, I, J, K, L, M, N, O, P, Q, R)

Source§

impl<A: HasMemoryCostStructural, B: HasMemoryCostStructural, C: HasMemoryCostStructural, D: HasMemoryCostStructural, E: HasMemoryCostStructural, F: HasMemoryCostStructural, G: HasMemoryCostStructural, H: HasMemoryCostStructural, I: HasMemoryCostStructural, J: HasMemoryCostStructural, K: HasMemoryCostStructural, L: HasMemoryCostStructural, M: HasMemoryCostStructural, N: HasMemoryCostStructural, O: HasMemoryCostStructural, P: HasMemoryCostStructural, Q: HasMemoryCostStructural, R: HasMemoryCostStructural, S: HasMemoryCostStructural> HasMemoryCostStructural for (A, B, C, D, E, F, G, H, I, J, K, L, M, N, O, P, Q, R, S)

Source§

impl<A: HasMemoryCostStructural, B: HasMemoryCostStructural, C: HasMemoryCostStructural, D: HasMemoryCostStructural, E: HasMemoryCostStructural, F: HasMemoryCostStructural, G: HasMemoryCostStructural, H: HasMemoryCostStructural, I: HasMemoryCostStructural, J: HasMemoryCostStructural, K: HasMemoryCostStructural, L: HasMemoryCostStructural, M: HasMemoryCostStructural, N: HasMemoryCostStructural, O: HasMemoryCostStructural, P: HasMemoryCostStructural, Q: HasMemoryCostStructural, R: HasMemoryCostStructural, S: HasMemoryCostStructural, T: HasMemoryCostStructural> HasMemoryCostStructural for (A, B, C, D, E, F, G, H, I, J, K, L, M, N, O, P, Q, R, S, T)

Source§

impl<A: HasMemoryCostStructural, B: HasMemoryCostStructural, C: HasMemoryCostStructural, D: HasMemoryCostStructural, E: HasMemoryCostStructural, F: HasMemoryCostStructural, G: HasMemoryCostStructural, H: HasMemoryCostStructural, I: HasMemoryCostStructural, J: HasMemoryCostStructural, K: HasMemoryCostStructural, L: HasMemoryCostStructural, M: HasMemoryCostStructural, N: HasMemoryCostStructural, O: HasMemoryCostStructural, P: HasMemoryCostStructural, Q: HasMemoryCostStructural, R: HasMemoryCostStructural, S: HasMemoryCostStructural, T: HasMemoryCostStructural, U: HasMemoryCostStructural> HasMemoryCostStructural for (A, B, C, D, E, F, G, H, I, J, K, L, M, N, O, P, Q, R, S, T, U)

Source§

impl<A: HasMemoryCostStructural, B: HasMemoryCostStructural, C: HasMemoryCostStructural, D: HasMemoryCostStructural, E: HasMemoryCostStructural, F: HasMemoryCostStructural, G: HasMemoryCostStructural, H: HasMemoryCostStructural, I: HasMemoryCostStructural, J: HasMemoryCostStructural, K: HasMemoryCostStructural, L: HasMemoryCostStructural, M: HasMemoryCostStructural, N: HasMemoryCostStructural, O: HasMemoryCostStructural, P: HasMemoryCostStructural, Q: HasMemoryCostStructural, R: HasMemoryCostStructural, S: HasMemoryCostStructural, T: HasMemoryCostStructural, U: HasMemoryCostStructural, V: HasMemoryCostStructural> HasMemoryCostStructural for (A, B, C, D, E, F, G, H, I, J, K, L, M, N, O, P, Q, R, S, T, U, V)

Source§

impl<A: HasMemoryCostStructural, B: HasMemoryCostStructural, C: HasMemoryCostStructural, D: HasMemoryCostStructural, E: HasMemoryCostStructural, F: HasMemoryCostStructural, G: HasMemoryCostStructural, H: HasMemoryCostStructural, I: HasMemoryCostStructural, J: HasMemoryCostStructural, K: HasMemoryCostStructural, L: HasMemoryCostStructural, M: HasMemoryCostStructural, N: HasMemoryCostStructural, O: HasMemoryCostStructural, P: HasMemoryCostStructural, Q: HasMemoryCostStructural, R: HasMemoryCostStructural, S: HasMemoryCostStructural, T: HasMemoryCostStructural, U: HasMemoryCostStructural, V: HasMemoryCostStructural, W: HasMemoryCostStructural> HasMemoryCostStructural for (A, B, C, D, E, F, G, H, I, J, K, L, M, N, O, P, Q, R, S, T, U, V, W)

Source§

impl<A: HasMemoryCostStructural, B: HasMemoryCostStructural, C: HasMemoryCostStructural, D: HasMemoryCostStructural, E: HasMemoryCostStructural, F: HasMemoryCostStructural, G: HasMemoryCostStructural, H: HasMemoryCostStructural, I: HasMemoryCostStructural, J: HasMemoryCostStructural, K: HasMemoryCostStructural, L: HasMemoryCostStructural, M: HasMemoryCostStructural, N: HasMemoryCostStructural, O: HasMemoryCostStructural, P: HasMemoryCostStructural, Q: HasMemoryCostStructural, R: HasMemoryCostStructural, S: HasMemoryCostStructural, T: HasMemoryCostStructural, U: HasMemoryCostStructural, V: HasMemoryCostStructural, W: HasMemoryCostStructural, X: HasMemoryCostStructural> HasMemoryCostStructural for (A, B, C, D, E, F, G, H, I, J, K, L, M, N, O, P, Q, R, S, T, U, V, W, X)

Source§

impl<A: HasMemoryCostStructural, B: HasMemoryCostStructural, C: HasMemoryCostStructural, D: HasMemoryCostStructural, E: HasMemoryCostStructural, F: HasMemoryCostStructural, G: HasMemoryCostStructural, H: HasMemoryCostStructural, I: HasMemoryCostStructural, J: HasMemoryCostStructural, K: HasMemoryCostStructural, L: HasMemoryCostStructural, M: HasMemoryCostStructural, N: HasMemoryCostStructural, O: HasMemoryCostStructural, P: HasMemoryCostStructural, Q: HasMemoryCostStructural, R: HasMemoryCostStructural, S: HasMemoryCostStructural, T: HasMemoryCostStructural, U: HasMemoryCostStructural, V: HasMemoryCostStructural, W: HasMemoryCostStructural, X: HasMemoryCostStructural, Y: HasMemoryCostStructural> HasMemoryCostStructural for (A, B, C, D, E, F, G, H, I, J, K, L, M, N, O, P, Q, R, S, T, U, V, W, X, Y)

Source§

impl<A: HasMemoryCostStructural, B: HasMemoryCostStructural, C: HasMemoryCostStructural, D: HasMemoryCostStructural, E: HasMemoryCostStructural, F: HasMemoryCostStructural, G: HasMemoryCostStructural, H: HasMemoryCostStructural, I: HasMemoryCostStructural, J: HasMemoryCostStructural, K: HasMemoryCostStructural, L: HasMemoryCostStructural, M: HasMemoryCostStructural, N: HasMemoryCostStructural, O: HasMemoryCostStructural, P: HasMemoryCostStructural, Q: HasMemoryCostStructural, R: HasMemoryCostStructural, S: HasMemoryCostStructural, T: HasMemoryCostStructural, U: HasMemoryCostStructural, V: HasMemoryCostStructural, W: HasMemoryCostStructural, X: HasMemoryCostStructural, Y: HasMemoryCostStructural, Z: HasMemoryCostStructural> HasMemoryCostStructural for (A, B, C, D, E, F, G, H, I, J, K, L, M, N, O, P, Q, R, S, T, U, V, W, X, Y, Z)

Source§

impl<T: HasMemoryCostStructural> HasMemoryCostStructural for Option<T>

Source§

impl<T: HasMemoryCostStructural> HasMemoryCostStructural for Box<T>

Source§

impl<T: HasMemoryCostStructural> HasMemoryCostStructural for Vec<T>

Source§

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

Implementors§

impl<ID> HasMemoryCostStructural for UnrecognizedExt<ID>
where ID: Copy + 'static,

impl<const LOWER: i32, const UPPER: i32> HasMemoryCostStructural for BoundedInt32<LOWER, UPPER>