package tezos-protocol-015-PtLimaPt
Install
Dune Dependency
Authors
Maintainers
Sources
sha256=7062cd57addd452852598a2214ade393130efa087b99068d53713bdf912b3680
sha512=08e4091144a03ce3c107fb91a66501bd8b65ca3278917c455a2eaac6df3e108ade63f6ab8340a4bb152d60f404326e464d0ec95d26cafe8e82f870465d24a5fc
doc/tezos-protocol-015-PtLimaPt.raw/Tezos_raw_protocol_015_PtLimaPt/Indexable/index.html
Module Tezos_raw_protocol_015_PtLimaPt.Indexable
Source
In transaction rollups, some values can be replaced by indexes in the messages sent from the layer-1 to the layer-2.
This module provides various type-safe helpers to manipulate these particular values.
type (_, 'a) t = private
| Value : 'a -> (value_only, 'a) t
| Hidden_value : 'a -> (unknown, 'a) t
| Index : int32 -> (index_only, 'a) t
| Hidden_index : int32 -> (unknown, 'a) t
An indexable value is a value which can be replaced by an integer. The first type parameter determines whether or not this replacement has happened already.
The type of indexable values identified as not being indexes.
The type of indexable values identified as being indexes.
value v
wraps v
into an indexable value identified as not being an index.
from_value v
wraps v
into an indexable value, but forget about the nature of the content of the result.
index i
wraps i
into an indexable value identified as being an index.
Returns the error Index_cannot_be_negative
iff i <= 0l
.
val from_index :
int32 ->
'a either Tezos_protocol_environment_015_PtLimaPt.Error_monad.tzresult
from_index i
wraps i
into an indexable value, but forget about the nature of the content of the result.
Returns the error Index_cannot_be_negative
iff i <= 0l
.
index_exn i
wraps i
into an indexable value identified as being an index.
from_index_exn i
wraps i
into an indexable value, but forget about the nature of the content of the result.
val compact :
'a Tezos_protocol_environment_015_PtLimaPt.Data_encoding.t ->
(unknown, 'a) t
Tezos_protocol_environment_015_PtLimaPt.Data_encoding.Compact.t
compact val_encoding
is a combinator to derive a compact encoding for an indexable value of type 'a
from an encoding for 'a
. It uses two bits in the shared tag. 00
is used for indexes fitting in one byte, 01
for indexes fitting in two bytes, 10
for indexes fitting in four bytes, and 11
for the values of type 'a
.
val pp :
(Tezos_protocol_environment_015_PtLimaPt.Format.formatter -> 'a -> unit) ->
Tezos_protocol_environment_015_PtLimaPt.Format.formatter ->
('state, 'a) t ->
unit
val destruct :
('state, 'a) t ->
('a index, 'a) Tezos_protocol_environment_015_PtLimaPt.Either.t
destruct x
returns either the index or the (unwrapped) value contained in x
.
Note: If you want to manipulate a value of type 'a value
, you can use value
.
forget x
returns an indexable value whose kind of contents has been forgotten.
val is_value_e :
error:'trace ->
('state, 'a) t ->
('a, 'trace) Tezos_protocol_environment_015_PtLimaPt.Pervasives.result
is_value_e err x
unwraps and returns the value behind x
, and throws an err
if x
is an index.
val in_memory_size :
('a -> Cache_memory_helpers.sint) ->
('state, 'a) t ->
Cache_memory_helpers.sint
in_memory_size a
returns the number of bytes allocated in RAM for a
.
size a
returns the number of bytes allocated in an inbox to store a
.
compare f x y
is a total order on indexable values, which proceeds as follows.
- If both
x
andy
are a value, then usef
to compare them. - If both
x
andy
are indexes, then uses theInt32.compare
function to compare them. - Finally, if
x
andy
have not the same kind, the logic is that indexes are smaller than values.
Note: This can be dangerous, as you may end up comparing two things that are equivalent (a value and its index) but declare they are not equal.
compare_values f x y
compares the value x
and y
using f
, and relies on the type system of OCaml to ensure that x
and y
are indeed both values.
compare_indexes x y
compares the indexes x
and y
, and relies on the type system of OCaml to ensure that x
and y
are indeed both indexes.