Re: Passing Map to Remote App
- Posted by ghaberek (admin) Mar 12, 2019
- 1274 views
It looks like save_map() just uses the serialize() function.
https://github.com/OpenEuphoria/euphoria/blob/master/include/std/map.e#L1433
if type_ = SM_RAW then puts(file_handle_, serialize:serialize({ 2, -- saved map version datetime:format(now_gmt(), "%Y%m%d%H%M%S" ), -- date of this saved map info:version_string()} -- Euphoria version )) puts(file_handle_, serialize:serialize(keys_)) puts(file_handle_, serialize:serialize(values_)) else
So here are the (untested and very basic) in-memory equivalents:
include std/map.e include std/datetime.e include std/serialize.e include euphoria/info.e function serialize_map( map m ) sequence keys = map:keys( m ) sequence values = map:values( m ) sequence data = {} data &= serialize:serialize({ 2, datetime:format(now_gmt(), "%Y%m%d%H%M%S" ), info:version_string() }) data &= serialize:serialize( keys ) data &= serialize:serialize( values ) return data end function function deserialize_map( sequence data ) integer pos = 1 object info, keys, value {info,pos} = deserialize( data, pos ) {keys,pos} = deserialize( data, pos ) {values,pos} = deserialize( data, pos ) if atom( info ) or atom( keys ) or atom( values ) then return 0 end if map m = map:new() for i = 1 to length( keys ) do map:put( m, keys[i], value[i] ) end for return m end function
-Greg