1
1
mirror of https://github.com/kanaka/mal.git synced 2024-09-21 02:27:10 +03:00
mal/impls/ada.2/types-strings.ads
Joel Martin 8a19f60386 Move implementations into impls/ dir
- Reorder README to have implementation list after "learning tool"
  bullet.

- This also moves tests/ and libs/ into impls. It would be preferrable
  to have these directories at the top level.  However, this causes
  difficulties with the wasm implementations which need pre-open
  directories and have trouble with paths starting with "../../". So
  in lieu of that, symlink those directories to the top-level.

- Move the run_argv_test.sh script into the tests directory for
  general hygiene.
2020-02-10 23:50:16 -06:00

50 lines
1.5 KiB
Ada

with Ada.Containers;
with Garbage_Collected;
package Types.Strings is
------------------------------------
-- Keywords, Strings and Symbols --
------------------------------------
-- Tests seem to show that manual garbage collection is faster
-- than reference counting in Ada.Strings.Unbounded, probably
-- because we know that the values will never change.
-- Also, maintaining a global structure in order to avoid similar
-- symbol allocations does not seem to improve performances.
type Instance (<>) is abstract new Garbage_Collected.Instance with private;
function Alloc (Data : in String) return String_Ptr
with Inline;
function "=" (Left : in Instance;
Right : in String) return Boolean
with Inline;
-- This kind of accessor is more efficient than a function
-- returning an array.
procedure Query_Element
(Container : in Instance;
Process : not null access procedure (Element : in String));
-- These methods could be implemented with Query_Element,
-- but we want to optimize Envs.Get.
function Hash (Item : in String_Ptr) return Ada.Containers.Hash_Type
with Inline;
function Same_Contents (Left, Right : in String_Ptr) return Boolean
with Inline;
-- When readability is more important than copying a string.
function To_String (Container : in Instance) return String with Inline;
private
type Instance (Last : Natural) is new Garbage_Collected.Instance with record
Data : String (1 .. Last);
end record;
end Types.Strings;