Lisaac prototype interface

Section Header
+ name := Strict MEMORY;
- comment := "Memory manager.";
- external := ` #define MINIMUM_SIZE 256 void *table_size[MINIMUM_SIZE/sizeof(void *)]; void *last_block[64]; `;
Section Inherit
- parent_object:OBJECT :=
MACRO ALLOCATOR
Section Mapping
+ previous_linear:UINTEGER_32;
+ size_and_id:UINTEGER_32;
---------------> Limit for Busy (64 bits)
+ next_free :MEMORY;
+ previous_free:MEMORY;
---------------> Limit for Free
Section MEMORY
- object_size:INTEGER <-
2x32bits = 64bits
- this:POINTER <-
- begin:POINTER <-
- size:UINTEGER_32 <-
- next_linear:MEMORY <-
- id:UINTEGER_32 <-
- id_end:UINTEGER_32 <-
- is_end:BOOLEAN <-
- set_previous_linear p:UINTEGER_32 <-
- set_size_and_id s:UINTEGER_32 <-
- get_index p:POINTER :UINTEGER_32 <-
- nb_page:UINTEGER_32;
- put_last m:MEMORY to idx:UINTEGER_32 <-
- get_last idx:UINTEGER_32 :MEMORY <-
- bound_test ptr:POINTER :BOOLEAN <-
- search_capacity <-
- new_page:MEMORY <-
Busy / Free Block.
- id_free:UINTEGER_32 <-
- id_busy:UINTEGER_32 <-
- set_next_free n:MEMORY <-
- set_previous_free p:MEMORY <-
- delete_link_free <-
- add_link_free <-
Section MEMORY
- first_free:MEMORY;
Management.
- to_free idx:UINTEGER_32 <-
- to_busy sz:UINTEGER_32 index idx:UINTEGER_32 <-
- resize new_size:UINTEGER_32 index idx:UINTEGER_32 :MEMORY <-
Searching.
- search new_size:UINTEGER_32 :MEMORY <-
- new_lab t:UINTEGER_32 :POINTER <-
Section Public
MICRO ALLOCATOR
- alloc_type t:UINTEGER_32 size sz:UINTEGER_32 :POINTER <-
Allocation for object without type. (LAB_TYPE)
- free p:POINTER type t:UINTEGER_32 <-
- alloc_size sz:UINTEGER_32 :POINTER <-
Allocation for object with type. (LAB_SIZE)
- free p:POINTER size sz:UINTEGER_32 <-
- alloc_dynamic sz:UINTEGER_32 :POINTER <-
Allocation NATIVE_ARRAY[E]. (LAB_SIZE or malloc)
- realloc_dynamic p:POINTER old_size old_sz:UINTEGER_32 new_size new_sz:UINTEGER_32 :POINTER <-
- free_dynamic p:POINTER size sz:UINTEGER_32 <-
GARBAGE COLLECTOR