예제 #1
0
        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);
        }
예제 #2
0
        //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));
        }
예제 #3
0
        //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);
        }
예제 #4
0
        IntProperty ReadConfigInt(string name)
        {
            var value = BinaryFile.ReadInt32(_input);

            return(new IntProperty(name, value));
        }