static IEnumerable <Object> ReadAnonymousArray(Stream input) { var entries = BinaryFile.ReadCompressedInteger(input); var objects = new List <Object>(); for (var i = 0; i < entries; i++) { var subType = input.ReadByte(); switch (subType) { case 0: objects.Add(BinaryFile.ReadString(input)); break; case 1: objects.Add(BinaryFile.ReadFloat32(input)); break; case 2: objects.Add(BinaryFile.ReadInt32(input)); break; case 3: objects.Add(ReadAnonymousArray(input)); break; //TODO - need to do something with this ! //case 4: objects.Add(BinaryFile.ReadString(input)); break; default: throw new RapFormatException("Unexpected array element type " + subType + " found in rap file"); } } return(objects); }
//class headers are separated from their declarations //so we need to fetch them separately ConfigClass ReadConfigClass() { var name = BinaryFile.ReadString(_input); long bodyOffset = BinaryFile.ReadInt32(_input); return(ReadClassBody(name, bodyOffset)); }
//the enums list is just a list of strings with values ConfigEnum ReadEnums(long bodyOffset) { _input.Seek(bodyOffset, SeekOrigin.Begin); var entryCount = BinaryFile.ReadInt32(_input); if (entryCount == 0) { return(null); } var ret = new ConfigEnum(); for (var c = 0; c < entryCount; c++) { var name = BinaryFile.ReadString(_input); var val = BinaryFile.ReadInt32(_input); ret.Add(name, val); } return(ret); }
IntProperty ReadConfigInt(string name) { var value = BinaryFile.ReadInt32(_input); return(new IntProperty(name, value)); }