ViewVC Help
View File | Revision Log | Show Annotations | Download File | View Changeset | Root Listing
root/RomCheater/trunk/RomCheater/Serialization/SearchResultReader.cs
(Generate patch)

Comparing trunk/RomCheater/Serialization/SearchResultReader.cs (file contents):
Revision 408 by william, Thu Jun 21 18:10:21 2012 UTC vs.
Revision 409 by william, Thu Jun 21 20:02:40 2012 UTC

# Line 9 | Line 9 | namespace RomCheater.Serialization
9   {
10      public interface ISearchResultReader
11      {
12 <        void CurrentAddress(out uint Address);
13 <        uint CurrentAddress();
14 <        void CurrentResult<TValue>(out TValue Value);
15 <        TValue CurrentResult<TValue>();
16 <
17 <        bool ReadCurrentAddess { get; }
18 <        bool ReadCurrentValue { get; }
12 >        ResultType<TValue> GetNextResult<TValue>() where TValue : IConvertible;
13  
14      }
15      public class SearchResultReader : SerializationReader, ISearchResultReader
# Line 82 | Line 76 | namespace RomCheater.Serialization
76          #region ISearchResultReader members      
77          public bool ReadCurrentAddess { get; private set; }
78          public bool ReadCurrentValue { get; private set; }
79 <        public uint CurrentAddress()
80 <        {
87 <            uint Address = 0;
88 <            CurrentAddress(out Address);
89 <            return Address;
90 <        }
91 <        public void CurrentAddress(out uint Address)
92 <        {
93 <            Address = 0;
94 <            try
95 <            {
96 <                if (ReadCurrentAddess && !ReadCurrentValue)
97 <                {
98 <                    throw new InvalidOperationException("Cannot read Current Address because the current Value has not been read. Please call CurrentResult<TValue>() first.");
99 <                }
100 <                Address = binReader.ReadUInt32();
101 <                ReadCurrentAddess = true;
102 <                ReadCurrentValue = false;
103 <            }
104 <            catch (System.IO.EndOfStreamException) { }
105 <        }
106 <        public TValue CurrentResult<TValue>()
79 >
80 >        public ResultType<TValue> GetNextResult<TValue>() where TValue : IConvertible
81          {
82 +            ResultType<TValue> result = new ResultType<TValue>();
83 +
84 +            uint Address = binReader.ReadUInt32();
85              TValue Value = default(TValue);
86 <            CurrentResult<TValue>(out Value);
87 <            return Value;
111 <        }
112 <        public void CurrentResult<TValue>(out TValue Value)
113 <        {
114 <            Value = default(TValue);
115 <            if (!ReadCurrentAddess)
116 <            {
117 <                throw new InvalidOperationException("Cannot read Current Value because the current Address has not been read. Please call CurrentAddress() first.");
118 <            }
119 <            try
86 >            Type t = typeof(TValue);
87 >            switch (t.Name.ToLower())
88              {
89 <                Type t = typeof(TValue);
90 <                switch (t.Name.ToLower())
91 <                {
92 <                    case "byte":
93 <                        Value = (TValue)Convert.ChangeType(binReader.ReadByte(), typeof(TValue));
94 <                        break;
95 <                    case "sbyte":
96 <                        Value = (TValue)Convert.ChangeType(binReader.ReadSByte(), typeof(TValue));
97 <                        break;
98 <                    case "uint16":
99 <                        Value = (TValue)Convert.ChangeType(binReader.ReadUInt16(), typeof(TValue));
100 <                        break;
101 <                    case "int16":
102 <                        Value = (TValue)Convert.ChangeType(binReader.ReadInt16(), typeof(TValue));
103 <                        break;
104 <                    case "uint32":
105 <                        Value = (TValue)Convert.ChangeType(binReader.ReadUInt32(), typeof(TValue));
106 <                        break;
107 <                    case "int32":
108 <                        Value = (TValue)Convert.ChangeType(binReader.ReadInt32(), typeof(TValue));
109 <                        break;
110 <                    case "uint64":
111 <                        Value = (TValue)Convert.ChangeType(binReader.ReadUInt64(), typeof(TValue));
112 <                        break;
145 <                    case "int64":
146 <                        Value = (TValue)Convert.ChangeType(binReader.ReadInt64(), typeof(TValue));
147 <                        break;
148 <                }
149 <                ReadCurrentValue = true;
150 <                ReadCurrentAddess = false;
89 >                case "byte":
90 >                    Value = (TValue)Convert.ChangeType(binReader.ReadByte(), typeof(TValue));
91 >                    break;
92 >                case "sbyte":
93 >                    Value = (TValue)Convert.ChangeType(binReader.ReadSByte(), typeof(TValue));
94 >                    break;
95 >                case "uint16":
96 >                    Value = (TValue)Convert.ChangeType(binReader.ReadUInt16(), typeof(TValue));
97 >                    break;
98 >                case "int16":
99 >                    Value = (TValue)Convert.ChangeType(binReader.ReadInt16(), typeof(TValue));
100 >                    break;
101 >                case "uint32":
102 >                    Value = (TValue)Convert.ChangeType(binReader.ReadUInt32(), typeof(TValue));
103 >                    break;
104 >                case "int32":
105 >                    Value = (TValue)Convert.ChangeType(binReader.ReadInt32(), typeof(TValue));
106 >                    break;
107 >                case "uint64":
108 >                    Value = (TValue)Convert.ChangeType(binReader.ReadUInt64(), typeof(TValue));
109 >                    break;
110 >                case "int64":
111 >                    Value = (TValue)Convert.ChangeType(binReader.ReadInt64(), typeof(TValue));
112 >                    break;
113              }
114 <            catch (System.IO.EndOfStreamException) { }
114 >            result = new ResultType<TValue>(Address, Value);
115 >            return result;
116          }
117          #endregion
118      }

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines