struct ReferenceStorage(T)

Overview

a ReferenceStorage(T) provides the minimum storage for the instance data of an object of type T. The compiler guarantees that sizeof(ReferenceStorage(T)) == instance_sizeof(T) and alignof(ReferenceStorage(T)) == instance_alignof(T) always hold, which means Pointer(ReferenceStorage(T)) and T are binary-compatible.

T must be a non-union reference type.

WARNING ReferenceStorage is only necessary for manual memory management, such as creating instances of T with a non-default allocator. Therefore, this type is unsafe and no public constructors are defined.

WARNING ReferenceStorage is unsuitable when instances of T require more than instance_sizeof(T) bytes, such as String and Log::Metadata.

EXPERIMENTAL This type's API is still under development. Join the discussion about custom reference allocation at #13481.

Defined in:

reference_storage.cr

Instance Method Summary

Instance methods inherited from struct Struct

==(other) : Bool ==, hash(hasher) hash, inspect(io : IO) : Nil inspect, pretty_print(pp) : Nil pretty_print, to_s(io : IO) : Nil to_s

Instance methods inherited from struct Value

==(other : JSON::Any)
==(other : YAML::Any)
==(other)
==
, dup dup

Instance methods inherited from class Object

! : Bool !, !=(other) !=, !~(other) !~, ==(other) ==, ===(other : JSON::Any)
===(other : YAML::Any)
===(other)
===
, =~(other) =~, as(type : Class) as, as?(type : Class) as?, class class, dup dup, hash(hasher)
hash
hash
, in?(collection : Object) : Bool
in?(*values : Object) : Bool
in?
, inspect(io : IO) : Nil
inspect : String
inspect
, is_a?(type : Class) : Bool is_a?, itself itself, nil? : Bool nil?, not_nil!(message)
not_nil!
not_nil!
, pretty_inspect(width = 79, newline = "\n", indent = 0) : String pretty_inspect, pretty_print(pp : PrettyPrint) : Nil pretty_print, responds_to?(name : Symbol) : Bool responds_to?, tap(&) tap, to_json(io : IO) : Nil
to_json : String
to_json
, to_pretty_json(indent : String = " ") : String
to_pretty_json(io : IO, indent : String = " ") : Nil
to_pretty_json
, to_s(io : IO) : Nil
to_s : String
to_s
, to_yaml(io : IO) : Nil
to_yaml : String
to_yaml
, try(&) try, unsafe_as(type : T.class) forall T unsafe_as

Class methods inherited from class Object

from_json(string_or_io, root : String)
from_json(string_or_io)
from_json
, from_yaml(string_or_io : String | IO) from_yaml

Instance Method Detail

def ==(other : ReferenceStorage(T)) : Bool #

Returns whether self and other are bytewise equal.

NOTE This does not call T#==, so it works even if self or other does not represent a valid instance of T. If validity is guaranteed, call to_reference == other.to_reference instead to use T#==.


[View source]
def ==(other) : Bool #
Description copied from struct Struct

Returns true if this struct is equal to other.

Both structs' instance vars are compared to each other. Thus, two structs are considered equal if each of their instance variables are equal. Subclasses should override this method to provide specific equality semantics.

struct Point
  def initialize(@x : Int32, @y : Int32)
  end
end

p1 = Point.new 1, 2
p2 = Point.new 1, 2
p3 = Point.new 3, 4

p1 == p2 # => true
p1 == p3 # => false

[View source]
def hash(hasher) #
Description copied from struct Struct

See Object#hash(hasher)


[View source]
def to_reference : T #

Returns a T whose instance data refers to self.

WARNING The caller is responsible for ensuring that the instance data is correctly initialized and outlives the returned T.


[View source]
def to_s(io : IO) : Nil #
Description copied from struct Struct

Same as #inspect(io).


[View source]