/[RomCheater]/trunk/RomCheater/Serialization/SearchResultWriter.cs
ViewVC logotype

Diff of /trunk/RomCheater/Serialization/SearchResultWriter.cs

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

revision 444 by william, Sun Jun 2 18:56:41 2013 UTC revision 445 by william, Sun Jun 2 19:21:16 2013 UTC
# Line 24  namespace RomCheater.Serialization Line 24  namespace RomCheater.Serialization
24          #region ISearchResultWriter members          #region ISearchResultWriter members
25          public void WriteResult<TValue>(uint address, TValue value) where TValue : IConvertible          public void WriteResult<TValue>(uint address, TValue value) where TValue : IConvertible
26          {          {
27                try
28                {
29                    Type t = typeof(TValue);
30    
31              Type t = typeof(TValue);                  binWriter.Write(address);
32                    switch (t.Name.ToLower())
33              binWriter.Write(address);                  {
34              switch (t.Name.ToLower())                      case "byte":
35                            binWriter.Write(Convert.ToByte(value));
36                            break;
37                        case "sbyte":
38                            binWriter.Write(Convert.ToSByte(value));
39                            break;
40                        case "uint16":
41                            binWriter.Write(Convert.ToUInt16(value));
42                            break;
43                        case "int16":
44                            binWriter.Write(Convert.ToInt16(value));
45                            break;
46                        case "uint32":
47                            binWriter.Write(Convert.ToUInt32(value));
48                            break;
49                        case "int32":
50                            binWriter.Write(Convert.ToInt32(value));
51                            break;
52                        case "uint64":
53                            binWriter.Write(Convert.ToUInt64(value));
54                            break;
55                        case "int64":
56                            binWriter.Write(Convert.ToInt64(value));
57                            break;
58                    }
59                    ResultsWritten++;
60                }
61                catch (Exception ex)
62              {              {
63                  case "byte":                  throw ex;
                     binWriter.Write(Convert.ToByte(value));  
                     break;  
                 case "sbyte":  
                     binWriter.Write(Convert.ToSByte(value));  
                     break;  
                 case "uint16":  
                     binWriter.Write(Convert.ToUInt16(value));  
                     break;  
                 case "int16":  
                     binWriter.Write(Convert.ToInt16(value));  
                     break;  
                 case "uint32":  
                     binWriter.Write(Convert.ToUInt32(value));  
                     break;  
                 case "int32":  
                     binWriter.Write(Convert.ToInt32(value));  
                     break;  
                 case "uint64":  
                     binWriter.Write(Convert.ToUInt64(value));  
                     break;  
                 case "int64":  
                     binWriter.Write(Convert.ToInt64(value));  
                     break;  
64              }              }
             ResultsWritten++;  
65          }          }
66          #endregion          #endregion
67    
68          private void WriteHeader(Guid guid)          private void WriteHeader(Guid guid)
69          {          {
70              // write magic: SRD              try
             binWriter.Write(Encoding.UTF8.GetBytes("SRD"));  
   
             if (guid == Guid.Empty)  
71              {              {
72                  binWriter.Write((int)1);                  // write magic: SRD
73                    binWriter.Write(Encoding.UTF8.GetBytes("SRD"));
74    
75                    if (guid == Guid.Empty)
76                    {
77                        binWriter.Write((int)1);
78                    }
79                    else
80                    {
81                        binWriter.Write((int)2);
82                        // related guid - length
83                        binWriter.Write(guid.ToByteArray().Length);
84                        // related guid - data
85                        binWriter.Write(guid.ToByteArray());
86                    }
87                    // write count (int)
88                    binWriter.Write(ResultCount);
89              }              }
90              else              catch (Exception ex)
91              {              {
92                  binWriter.Write((int)2);                  throw ex;
93                  // related guid - length              }
                 binWriter.Write(guid.ToByteArray().Length);  
                 // related guid - data  
                 binWriter.Write(guid.ToByteArray());  
             }              
             // write count (int)  
             binWriter.Write(ResultCount);  
94          }          }
95    
96          protected override void Dispose(bool disposing)          protected override void Dispose(bool disposing)
97          {                      {
98              base.Dispose(disposing);              try
99              // ensure ResultCount and ResultsWritten are equal                          {
100              if (ResultCount != ResultsWritten)                  base.Dispose(disposing);
101              {                  // ensure ResultCount and ResultsWritten are equal            
102                  string message = string.Format("ResultCount does not match ResultsWritten: 0x{0:x8} != 0x{1:x8} -- offset: 0x{2:x8}", ResultCount, ResultsWritten, ResultCount - ResultsWritten);                  if (ResultCount != ResultsWritten)
103                  Logging.logger.Error.WriteLine(message);                  {
104                  throw new InvalidOperationException(message);                      string message = string.Format("ResultCount does not match ResultsWritten: 0x{0:x8} != 0x{1:x8} -- offset: 0x{2:x8}", ResultCount, ResultsWritten, ResultCount - ResultsWritten);
105                        Logging.logger.Error.WriteLine(message);
106                        throw new InvalidOperationException(message);
107                    }
108                }
109                catch (Exception ex)
110                {
111                    throw ex;
112              }              }
113          }          }
114      }      }

Legend:
Removed from v.444  
changed lines
  Added in v.445

  ViewVC Help
Powered by ViewVC 1.1.22