+
Point of view
All features
class JSON_STREAM_REPOSITORY [O_ -> STORABLE]
Summary
To be used via streams that commit and update the JSON repository
Direct parents
Inherit list: JSON_REPOSITORY_IMPL
Class invariant
Overview
Creation features
{ANY}
Features
Updating and committing
{ANY}
  • commit
    Commit all the repository objects to the physical store.
  • is_commitable: BOOLEAN
    True if the repository can be committed to the underlying physical store.
  • update
    Update the repository objects.
  • is_updateable: BOOLEAN
    True if the repository can be updated from data in the physical store.
  • is_connected: BOOLEAN
    True if the repository is connected to a physical store.
Creation
{ANY}
{}
Implementation of update
{}
{JSON_ARRAY}
{JSON_FALSE}
{JSON_NULL}
{JSON_NUMBER}
{JSON_OBJECT}
{JSON_STRING}
{JSON_TRUE}
Default transient objects
{}
{}
{}
Error handling on repository update
{ANY}
{}
Implementation of update
{}
Implementation of commit
{}
Internals
{}
Getting and setting objects in the repository:
{ANY}
  • has (object_name: STRING): BOOLEAN
    Is object_name the name of some stored object.
  • at (object_name: STRING): O_
    Return the object currently associated to object_name.
  • add (object: O_, object_name: STRING)
    Add a new object in the Current repository.
  • put (object: O_, object_name: STRING) assign at
    Update or add a new object in the Current repository.
  • remove (object_name: STRING)
    Remove entry object_name from the Current repository.
Counting:
{ANY}
Iterating facilities:
{ANY}
Implementation
{}
{}
{JSON_HANDLER}
{}
commit
effective procedure
{ANY}
Commit all the repository objects to the physical store.
require
  • is_commitable
is_commitable: BOOLEAN
effective function
{ANY}
True if the repository can be committed to the underlying physical store.
ensure
  • Result implies is_connected
update
effective procedure
{ANY}
Update the repository objects.
Get all objects from the physical store.
require
  • is_updateable
is_updateable: BOOLEAN
effective function
{ANY}
True if the repository can be updated from data in the physical store.
ensure
  • Result implies is_connected
is_connected: BOOLEAN
effective function
{ANY}
True if the repository is connected to a physical store.
connect_to (a_in_stream: INPUT_STREAM, a_out_stream: OUTPUT_STREAM)
effective procedure
{ANY}
Connect to a repository with streams as physical store.
update_stream: INPUT_STREAM
writable attribute
{}
commit_stream: OUTPUT_STREAM
writable attribute
{}
writable attribute
{}
last_line: INTEGER_32
writable attribute
{}
last_column: INTEGER_32
writable attribute
{}
do_update (in_stream: INPUT_STREAM)
effective procedure
{}
parser: JSON_PARSER
writable attribute
{}
last_name: STRING
writable attribute
{}
last_string: STRING
writable attribute
{}
last_number: INTEGER_32
writable attribute
{}
visit_array (json: JSON_ARRAY)
effective procedure
require
  • json /= Void
visit_false (json: JSON_FALSE)
effective procedure
require
  • json /= Void
visit_null (json: JSON_NULL)
effective procedure
require
  • json /= Void
visit_number (json: JSON_NUMBER)
effective procedure
require
  • json /= Void
visit_object (json: JSON_OBJECT)
effective procedure
everything happens here because the repository structure is well defined
require
  • json /= Void
visit_string (json: JSON_STRING)
effective procedure
require
  • json /= Void
visit_true (json: JSON_TRUE)
effective procedure
require
  • json /= Void
register_transient_objects
effective procedure
{}
unregister_transient_objects
effective procedure
{}
version: STRING
is "1"
frozen
constant attribute
{}
make
effective procedure
{}
Create a not-connected empty repository.
_inline_agent44 (value: JSON_VALUE, string: JSON_STRING, refs: JSON_ARRAY)
frozen
effective procedure
{}
_inline_agent45 (value: JSON_VALUE, string: JSON_STRING)
frozen
effective procedure
{}
_inline_agent46 (value: JSON_VALUE, index: INTEGER_32)
frozen
effective procedure
{}
_inline_agent47 (value: JSON_VALUE, string: JSON_STRING)
frozen
effective procedure
{}
register_update_error_handler (a_error_handler: PROCEDURE[TUPLE 3[ABSTRACT_STRING, INTEGER_32, INTEGER_32]])
effective procedure
{ANY}
writable attribute
{}
fire_update_error (message: ABSTRACT_STRING, line: INTEGER_32, column: INTEGER_32)
effective procedure
{}
solve_again: BOOLEAN
writable attribute
{}
update_layouts: STACK[REPOSITORY_LAYOUT]
once function
{}
updated_internals: AVL_DICTIONARY[INTERNALS, INTEGER_32]
once function
{}
internals_references: HASHED_DICTIONARY[INTEGER_32, POINTER]
once function
{}
once function
{}
once function
{}
solve (ref: INTEGER_32): INTERNALS
effective function
{}
require
  • ref > 0
internals_reference (internals: INTERNALS): INTEGER_32
effective function
{}
require
  • not internals.type_is_expanded
once function
{}
read_from_stream (in_stream: INPUT_STREAM)
effective procedure
{}
update_from_stream (in_stream: INPUT_STREAM)
effective procedure
{}
record_object (ref: INTEGER_32, name: STRING, line: INTEGER_32, column: INTEGER_32)
effective procedure
{}
Register the object as a high-level one, i.e.
put it in the repository.
check_non_empty_data (a_data: STRING, data_type: STRING, line: INTEGER_32, column: INTEGER_32)
effective procedure
{}
open_repository (a_repository: REPOSITORY_LAYOUT, line: INTEGER_32, column: INTEGER_32)
effective procedure
{}
require
  • a_repository.kind.is_equal("repository")
open_layout (a_type: STRING, a_ref: INTEGER_32, a_layout: REPOSITORY_LAYOUT, line: INTEGER_32, column: INTEGER_32)
effective procedure
{}
require
  • a_layout.kind.is_equal("layout")
  • a_ref > 0
open_reference (a_name: STRING, a_ref: INTEGER_32, a_reference: REPOSITORY_LAYOUT, line: INTEGER_32, column: INTEGER_32)
effective procedure
{}
require
  • a_reference.kind.is_equal("reference")
  • a_ref >= 0
    0 is Void

open_embedded (a_name: STRING, a_type: STRING, a_embedded: REPOSITORY_LAYOUT, line: INTEGER_32, column: INTEGER_32)
effective procedure
{}
require
  • a_embedded.kind.is_equal("embedded")
open_basic (a_name: STRING, a_type: STRING, a_value: STRING, a_basic: REPOSITORY_LAYOUT, line: INTEGER_32, column: INTEGER_32)
effective procedure
{}
require
  • a_basic.kind.is_equal("basic")
open_array (a_name: STRING, a_type: STRING, a_capacity: INTEGER_32, a_array: REPOSITORY_LAYOUT, line: INTEGER_32, column: INTEGER_32)
effective procedure
{}
require
  • a_array.kind.is_equal("array")
close_repository (line: INTEGER_32, column: INTEGER_32)
effective procedure
{}
require
close_layout (line: INTEGER_32, column: INTEGER_32)
effective procedure
{}
require
close_reference (line: INTEGER_32, column: INTEGER_32)
effective procedure
{}
require
close_embedded (line: INTEGER_32, column: INTEGER_32)
effective procedure
{}
require
close_basic (line: INTEGER_32, column: INTEGER_32)
effective procedure
{}
require
close_array (line: INTEGER_32, column: INTEGER_32)
effective procedure
{}
require
commit_map: SET[POINTER]
once function
{}
Used when committing object not to commit them twice
write_to_stream (out_stream: REPOSITORY_OUTPUT)
effective procedure
{}
require
  • out_stream.is_connected
write_object (name: STRING, object: STORABLE, out_stream: REPOSITORY_OUTPUT)
effective procedure
{}
write_internals (int: INTERNALS, name: STRING, out_stream: REPOSITORY_OUTPUT)
effective procedure
{}
write_reference_layout (reference: INTERNALS, name: STRING, out_stream: REPOSITORY_OUTPUT)
effective procedure
{}
require
  • reference /= Void implies not reference.type_is_expanded
write_layout (layout: INTERNALS, out_stream: REPOSITORY_OUTPUT)
effective procedure
{}
require
  • not commit_map.has(layout.object_as_pointer)
  • not layout.type_is_expanded
ensure
write_contents (layout: INTERNALS, out_stream: REPOSITORY_OUTPUT)
effective procedure
{}
require
  • layout.type_is_expanded or else transient.reference(layout) = Void
  • not layout.type_is_native_array
write_array_contents (layout: INTERNALS, out_stream: REPOSITORY_OUTPUT)
effective procedure
{}
require
  • layout.type_is_native_array
write_array_fields_layouts (array: INTERNALS, out_stream: REPOSITORY_OUTPUT)
effective procedure
{}
require
  • array.type_is_expanded and then array.type_is_native_array
write_expanded (internals: INTERNALS, name: STRING, out_stream: REPOSITORY_OUTPUT)
effective procedure
{}
require
  • internals.type_is_expanded
write_array_layout_object (internals: INTERNALS, name: STRING, out_stream: REPOSITORY_OUTPUT)
effective procedure
{}
require
  • internals.type_is_native_array
write_embedded_layout_object (internals: INTERNALS, name: STRING, out_stream: REPOSITORY_OUTPUT)
effective procedure
{}
once function
{}
new_layout (a_kind: STRING): REPOSITORY_LAYOUT
effective function
{}
ensure
  • Result.kind.is_equal(a_kind)
release_layout (a_layout: REPOSITORY_LAYOUT)
effective procedure
{}
writable attribute
{}
has (object_name: STRING): BOOLEAN
frozen
effective function
{ANY}
Is object_name the name of some stored object.
require
  • not object_name.is_empty
at (object_name: STRING): O_
frozen
effective function
{ANY}
Return the object currently associated to object_name.
require
  • has(object_name)
ensure
  • Result /= Void
add (object: O_, object_name: STRING)
frozen
effective procedure
{ANY}
Add a new object in the Current repository.
require
  • object /= Void
  • new_reference: not has(object_name)
ensure
  • reference_stored: object = at(object_name)
put (object: O_, object_name: STRING) assign at
frozen
effective procedure
{ANY}
Update or add a new object in the Current repository.
require
  • object /= Void
ensure
  • reference_stored: object = at(object_name)
remove (object_name: STRING)
effective procedure
{ANY}
Remove entry object_name from the Current repository.
require
  • has(object_name)
ensure
  • not has(object_name)
count: INTEGER_32
effective function
{ANY}
Actual count of stored elements.
is_empty: BOOLEAN
effective function
{ANY}
Is it empty ?
ensure
lower: INTEGER_32
is 1
constant attribute
{ANY}
upper: INTEGER_32
effective function
{ANY}
ensure
valid_index (index: INTEGER_32): BOOLEAN
effective function
{ANY}
ensure
item (index: INTEGER_32): O_
effective function
{ANY}
require ensure
key (index: INTEGER_32): STRING
effective function
{ANY}
require ensure
new_iterator_on_items: ITERATOR[O_]
effective function
{ANY}
ensure
  • Result /= Void
new_iterator_on_keys: ITERATOR[STRING]
effective function
{ANY}
ensure
  • Result /= Void
key_map_in (buffer: COLLECTION[STRING])
effective procedure
{ANY}
Append in buffer, all available keys (this may be useful to speed up the traversal).
require
  • buffer /= Void
ensure
  • buffer.count = count + old buffer.count
item_map_in (buffer: COLLECTION[O_])
effective procedure
{ANY}
Append in buffer, all available items (this may be useful to speed up the traversal).
require
  • buffer /= Void
ensure
  • buffer.count = count + old buffer.count
repository: DICTIONARY[O_, STRING]
writable attribute
{}
objects_are_expanded: BOOLEAN
effective function
{}
valid_generating_type_for_internals (type: STRING): BOOLEAN
frozen
{}
require
  • type /= Void
ensure
  • Result implies not type.has_prefix("NATIVE_ARRAY")
internals_from_generating_type (type: STRING): INTERNALS
frozen
{}
require ensure
  • Result /= Void
  • Result.object_can_be_modified
valid_generating_type_for_native_array_internals (type: STRING): BOOLEAN
frozen
{}
require
  • type /= Void
ensure
  • Result implies type.has_prefix("NATIVE_ARRAY")
native_array_internals_from_generating_type (type: STRING, capacity: INTEGER_32): INTERNALS
frozen
{}
require ensure
  • Result /= Void
  • Result.object_can_be_modified
json_star: JSON_STRING
once function
json_type: JSON_STRING
once function
json_repository: JSON_STRING
once function
json_version: JSON_STRING
once function
json_data: JSON_STRING
once function
json_refs: JSON_STRING
once function
json_basic: JSON_STRING
once function
json_value: JSON_STRING
once function
json_array: JSON_STRING
once function
json_capacity: JSON_STRING
once function
json_layout: JSON_STRING
once function
json_ref: JSON_STRING
once function
json_embedded: JSON_STRING
once function
json_type_character: JSON_STRING
once function
json_type_boolean: JSON_STRING
once function
json_type_integer_8: JSON_STRING
once function
json_type_integer_16: JSON_STRING
once function
json_type_integer_32: JSON_STRING
once function
json_type_integer_64: JSON_STRING
once function
json_type_integer: JSON_STRING
once function
json_type_real_32: JSON_STRING
once function
json_type_real_64: JSON_STRING
once function
json_type_real_80: JSON_STRING
once function
json_type_real_128: JSON_STRING
once function
json_type_real_expanded: JSON_STRING
once function
json_type_real: JSON_STRING
once function
json_array_element_type (type: ABSTRACT_STRING): JSON_STRING
effective function
require
  • type.has_prefix("NATIVE_ARRAY[")
  • type.has_suffix("]")
json_string (a_string: ABSTRACT_STRING): JSON_STRING
effective function
ensure
  • Result.is_valid
json_array_element_types: HASHED_DICTIONARY[JSON_STRING, FIXED_STRING]
once function
{}
once function
{}