function self = subsasgn(self, s, val)
% Subscripted assignment for object Hashtable
% -------------------------------------------

% see help for subsasgn
% ---------------------
switch (length(s))
  case 3
    switch s(3).type
      case '.'
        h = get(self.dynaload, s(1).subs);
        t = get(h, s(2).subs);
        t.(s(3).subs) = val;
        h = put(h, s(2).subs, t);
        self = put(self, s(1).subs, h);
      otherwise
        error('Invalid type.')
    end
  case 2
    switch s(1).type
      case '.'
        if isstruct(val)
          h = get(self.dynaload, s(1).subs);
          h = put(h, s(2).subs, val);
          self = put(self, s(1).subs, h);
        else
          error('value must be a structure');
        end
      otherwise
        error('Invalid type.')
    end
  case 1
    switch s.type
      case '()'
        if (length(s.subs) ~= 1)
          error('Only single indexing is supported.');
        end
        self = put(self, s.subs{1}, val);
      case '.'
        switch s.subs
          case {'autonan', 'autoscale'  }       
            builtin('subsasgn', self, s, val);
          otherwise
            self = put(self, s.subs, val);
        end
      otherwise
        error('Invalid type.')
    end
end
