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 List <float> ProcessSingleList(SubStream data)
        {
            List <float> vals  = new List <float>();
            int          nents = data.ReadInt32();

            for (int i = 0; i < nents; i++)
            {
                vals.Add(data.ReadSingle());
            }
            return(vals);
        }
 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 List<float> ProcessSingleList(SubStream data)
 {
     List<float> vals = new List<float>();
     int nents = data.ReadInt32();
     for (int i = 0; i < nents; i++)
     {
         vals.Add(data.ReadSingle());
     }
     return vals;
 }