Files
EWF/json/json_object.e
jvelilla 2c42c0dd1a Change void to Void.
Add invariant for 'object' , object_no_null /= Void
2008-08-08 11:04:33 +00:00

140 lines
2.3 KiB
Plaintext

indexing
description: "[
An JSON_OBJECT represent an object in JSON.
An object is an unordered set of name/value pairs
Examples:
object
{}
{"key","value"}
]"
author: "Javier Velilla"
date: "$Date$"
revision: "$Revision$"
license:"MIT (see http://www.opensource.org/licenses/mit-license.php)"
class
JSON_OBJECT
inherit
JSON_VALUE
create
make
feature -- Initialization
make is
--
do
create object.make (10)
end
feature -- Change Element
put (value: JSON_VALUE ; key: JSON_STRING) is
-- Assuming there is no item of key `key',
-- insert `value' with `key'.
require
not_present: not has_key (key)
local
l_json_null: JSON_NULL
l_value: JSON_VALUE
do
l_value:=value
if value = Void then
create l_json_null
l_value:=l_json_null
end
object.extend (l_value,key)
end
feature -- Access
has_key (key: JSON_STRING):BOOLEAN is
-- has the JSON_OBJECT contains a specific key 'key'.
do
Result := object.has (key)
end
has_item (value: JSON_VALUE):BOOLEAN is
-- has the JSON_OBJECT contain a specfic item 'value'
do
Result := object.has_item (value)
end
item (key: JSON_STRING):JSON_VALUE is
-- the json_value associated with a key.
do
Result:= object.item (key)
end
current_keys: ARRAY [JSON_STRING] is
-- array containing actually used keys
do
Result:=object.current_keys
end
feature -- Report
to_json: STRING is
-- Printable json representation
-- {} or {member}
-- see documentation
do
create Result.make_empty
Result.append ("{")
from
object.start
until
object.off
loop
Result.append (object.item_for_iteration.to_json)
Result.append (":")
Result.append (object.key_for_iteration.to_json)
object.forth
if not object.after then
Result.append (",")
end
end
Result.append ("}")
end
hash_code: INTEGER is
-- Hash code value
local
do
from
object.start
Result := object.item_for_iteration.hash_code
until
object.off
loop
Result := ((Result \\ 8388593) |<< 8) + object.item_for_iteration.hash_code
object.forth
end
-- Ensure it is a positive value.
Result := Result.hash_code
end
feature {NONE} -- Implementation
object: HASH_TABLE[JSON_VALUE,JSON_STRING]
invariant
object_not_null: object /= Void
end