protected dynamic ProcessValue(SubStream data, List <string> path)
        {
            int type = data.ReadByte();

            switch ((char)type)
            {
            case 'T': return(ProcessKeyValuePairs(data, path));

            case 'I': return(ProcessInt32List(data));

            case 'i': return(data.ReadInt32());

            case 'F': return(ProcessSingleList(data));

            case 'f': return(data.ReadSingle());

            case 'S': return(ProcessStringList(data));

            case 's': return(data.ReadString());

            case 'M': return(ProcessList(data, path));

            case '.': return(null);

            case 'R': return(ProcessRawBinary(data));

            default:
                throw new NotImplementedException(String.Format("Unknown type {0} ({0:X8}) at position {1}", (char)type, data.Position));
            }
        }
 protected dynamic ProcessValue(SubStream data, List<string> path)
 {
     int type = data.ReadByte();
     switch ((char)type)
     {
         case 'T': return ProcessKeyValuePairs(data, path);
         case 'I': return ProcessInt32List(data);
         case 'i': return data.ReadInt32();
         case 'F': return ProcessSingleList(data);
         case 'f': return data.ReadSingle();
         case 'S': return ProcessStringList(data);
         case 's': return data.ReadString();
         case 'M': return ProcessList(data, path);
         case '.': return null;
         case 'R': return ProcessRawBinary(data);
         default:
             throw new NotImplementedException(String.Format("Unknown type {0} ({0:X8}) at position {1}", (char)type, data.Position));
     }
 }