示例#1
0
        /// <summary>
        /// The managed object.
        /// </summary>
        /// <param name="hash">
        /// The hash.
        /// </param>
        /// <param name="pObj">
        /// The p obj.
        /// </param>
        /// <exception cref="FormatException">
        /// </exception>
        /// <exception cref="ArgumentException">
        /// </exception>
        /// <exception cref="FormatException">
        /// </exception>
        public void ManagedObject(uint hash, ref CIwManaged pObj)
        {
            if (this.mode == IwSerialiseMode.Read)
            {
                IwClassFactory factory = this.ClassRegistry.Get(hash);
                if (factory == null)
                {
                    throw new FormatException(string.Format("Can't Serialise unknown type 0x{0:x}", hash));
                }

                pObj = factory.Create();
            }
            else
            {
                if (hash != pObj.Hash)
                {
                    throw new ArgumentException();
                }
            }

            try
            {
                pObj.Serialise(this);
            }
            catch (Exception ex)
            {
                throw new FormatException(
                          string.Format("Can't Serialise GetResHashed(0x{0:x}, \"0x{1}\")", pObj.Hash, pObj.GetType().Name), ex);
            }
        }
示例#2
0
        private void Parse()
        {
            for (;;)
            {
                var s = this.ReadString();
                if (s == null)
                {
                    break;
                }

                if (s == "include")
                {
                    var fileName = this.ReadString();
                    continue;
                }

                if (s == "}")
                {
                    this.GetObject(0).ParseClose(this);
                    this.PopObject();
                    continue;
                }

                if (this.parseStack.Count > 0)
                {
                    if (this.GetObject(0).ParseAttribute(this, s))
                    {
                        continue;
                    }
                }

                if (this.PeekString() == "{")
                {
                    this.ReadString();
                    IwClassFactory iwClassFactory = this.classRegistry.Get(S3E.HashString(s));
                    if (iwClassFactory == null)
                    {
                        throw new Exception(string.Format("Can't find class {0}", s));
                    }

                    this.PushObject(iwClassFactory.Create());
                    this.GetObject(0).ParseOpen(this);
                }
                else
                {
                    throw new Exception(string.Format("{0} is not an attribute in {1}", s, this.GetObject(0).GetType().Name));
                }
            }
        }
示例#3
0
        /// <summary>
        /// The managed object.
        /// </summary>
        /// <param name="pObj">
        /// The p obj.
        /// </param>
        /// <exception cref="FormatException">
        /// </exception>
        public void ManagedObject(ref CIwManaged pObj)
        {
            if (this.mode == IwSerialiseMode.Read)
            {
                uint hash = 0;
                this.UInt32(ref hash);
                IwClassFactory factory = this.ClassRegistry.Get(hash);
                if (factory == null)
                {
                    throw new FormatException(string.Format("Can't Serialise unknown type 0x{0:x}", hash));
                }

                pObj = factory.Create();
            }
            else
            {
                uint hash = pObj.Hash;
                this.UInt32(ref hash);
            }

            Debug.WriteLine(string.Format("Serialise {0}", pObj.GetType().Name));
            pObj.Serialise(this);
        }