class StringPool
Overview
A string pool is a collection of strings. It allows a runtime to save memory by preserving strings in a pool, allowing to reuse an instance of a common string instead of creating a new one.
NOTE  To use StringPool, you must explicitly import it with require "string_pool"
require "string_pool"
pool = StringPool.new
a = "foo" + "bar"
b = "foo" + "bar"
a.object_id # => 136294360
b.object_id # => 136294336
a = pool.get(a)
b = pool.get(b)
a.object_id # => 136294312
b.object_id # => 136294312Defined in:
string_pool.crConstructors
- 
        .new(initial_capacity = 8)
        
          Creates a new empty string pool. 
Instance Method Summary
- 
        #empty? : Bool
        
          Returns trueif theStringPoolhas no element otherwise returnsfalse.
- 
        #get(str : Pointer(UInt8), len) : String
        
          Returns a Stringwith the contents given by the pointer str of size len.
- 
        #get(slice : Bytes) : String
        
          Returns a Stringwith the contents of the given slice.
- 
        #get(str : IO::Memory) : String
        
          Returns a Stringwith the contents of the givenIO::Memory.
- 
        #get(str : String) : String
        
          Returns a Stringwith the contents of the given string.
- 
        #rehash : Nil
        
          Rebuilds the hash based on the current hash values for each key, if values of key objects have changed since they were inserted. 
- 
        #size : Int32
        
          Returns the size 
Instance methods inherited from class Reference
  
  
    
      ==(other : self)==(other : JSON::Any)
==(other : YAML::Any)
==(other) ==, dup dup, hash(hasher) hash, initialize initialize, inspect(io : IO) : Nil inspect, object_id : UInt64 object_id, pretty_print(pp) : Nil pretty_print, same?(other : Reference) : Bool
same?(other : Nil) same?, to_s(io : IO) : Nil to_s
Constructor methods inherited from class Reference
  
  
    
      new
    new, 
    
  
    
      unsafe_construct(address : Pointer, *args, **opts) : self
    unsafe_construct
    
  
    
  Class methods inherited from class Reference
  
  
    
      pre_initialize(address : Pointer)
    pre_initialize
    
  
    
  
    
  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
Macros inherited from class Object
  
  
    
      class_getter(*names, &block)
    class_getter, 
    
  
    
      class_getter!(*names)
    class_getter!, 
    
  
    
      class_getter?(*names, &block)
    class_getter?, 
    
  
    
      class_property(*names, &block)
    class_property, 
    
  
    
      class_property!(*names)
    class_property!, 
    
  
    
      class_property?(*names, &block)
    class_property?, 
    
  
    
      class_setter(*names)
    class_setter, 
    
  
    
      def_clone
    def_clone, 
    
  
    
      def_equals(*fields)
    def_equals, 
    
  
    
      def_equals_and_hash(*fields)
    def_equals_and_hash, 
    
  
    
      def_hash(*fields)
    def_hash, 
    
  
    
      delegate(*methods, to object)
    delegate, 
    
  
    
      forward_missing_to(delegate)
    forward_missing_to, 
    
  
    
      getter(*names, &block)
    getter, 
    
  
    
      getter!(*names)
    getter!, 
    
  
    
      getter?(*names, &block)
    getter?, 
    
  
    
      property(*names, &block)
    property, 
    
  
    
      property!(*names)
    property!, 
    
  
    
      property?(*names, &block)
    property?, 
    
  
    
      setter(*names)
    setter
    
  
  
Constructor Detail
Creates a new empty string pool.
The initial_capacity is useful to avoid unnecessary reallocations of the internal buffers in case of growth. If you have an estimate of the maximum number of elements the pool will hold it should be initialized with that capacity for improved performance. Inputs lower than 8 are ignored.
pool = StringPool.new(256)
pool.size # => 0Instance Method Detail
Returns true if the StringPool has no element otherwise returns false.
require "string_pool"
pool = StringPool.new
pool.empty? # => true
pool.get("crystal")
pool.empty? # => falseReturns a String with the contents given by the pointer str of size len.
If a string with those contents was already present in the pool, that one is returned. Otherwise a new string is created, put in the pool and returned.
require "string_pool"
pool = StringPool.new
pool.get("hey".to_unsafe, 3)
pool.size # => 1Returns a String with the contents of the given slice.
If a string with those contents was already present in the pool, that one is returned. Otherwise a new string is created, put in the pool and returned.
require "string_pool"
pool = StringPool.new
ptr = Pointer.malloc(9) { |i| ('a'.ord + i).to_u8 }
slice = Slice.new(ptr, 3)
pool.empty? # => true
pool.get(slice)
pool.empty? # => falseReturns a String with the contents of the given IO::Memory.
If a string with those contents was already present in the pool, that one is returned. Otherwise a new string is created, put in the pool and returned.
require "string_pool"
pool = StringPool.new
io = IO::Memory.new "crystal"
pool.empty? # => true
pool.get(io)
pool.empty? # => falseReturns a String with the contents of the given string.
If a string with those contents was already present in the pool, that one is returned. Otherwise a new string is created, put in the pool and returned.
require "string_pool"
pool = StringPool.new
string = "crystal"
pool.empty? # => true
pool.get(string)
pool.empty? # => falseRebuilds the hash based on the current hash values for each key, if values of key objects have changed since they were inserted.
Call this method if you modified a string submitted to the pool.
Returns the size
require "string_pool"
pool = StringPool.new
pool.size # => 0