Mercurial > repos > public > sbplib
view Map.m @ 416:e97550b5c1e7 feature/better_map
Add todo.
author | Jonatan Werpers <jonatan@werpers.com> |
---|---|
date | Thu, 02 Feb 2017 16:41:41 +0100 |
parents | 16907bf31e67 |
children | effd75b113ba |
line wrap: on
line source
classdef Map < handle properties map end % can we support multi map using varargin? % probably a bad idea. For example it complicates keys(); methods function obj = Map() obj.map = containers.Map() end function set(obj, k, v) keyByteStream = getByteStreamFromArray(k); obj.map(char(keyByteStream)) = v; end function v = get(obj, k) keyByteStream = getByteStreamFromArray(k); v = obj.map(char(keyByteStream)); end function b = isKey(obj, k) keyByteStream = getByteStreamFromArray(k); b = obj.map.isKey(keyByteStream); end function c = keys(obj) keyByteStreams = obj.map.keys; n = length(keyByteStreams); c = cell(1, n); for i = 1:n c{i} = getArrayFromByteStream(uint8(keyByteStreams{i})); end end function l = length(obj) l = obj.map.length; end function remove(obj, k) keyByteStream = getByteStreamFromArray(k); obj.map.remove(char(keyByteStream)); end function s = size(obj) s = obj.map.size; end function c = values(obj) c = obj.map.values; end function v = subsref(obj, S) switch S.type case '()' k = S.subs; try v = obj.get(k); catch ME if strcmp(ME.identifier,'MATLAB:Containers:Map:NoKey') error('Reference to non-existent entry %s',toString(S.subs)); else throw(ME); end end otherwise v = builtin('subsref', obj, S); end end function obj = subsasgn(obj, S, v); switch S.type case '()' k = S.subs; obj.set(k, v); otherwise error('Unsupported indexing operator: %s',S.type); end end end end