/[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 429 by william, Tue May 28 15:16:05 2013 UTC revision 456 by william, Mon Jun 3 01:45:40 2013 UTC
# Line 15  namespace RomCheater.Serialization Line 15  namespace RomCheater.Serialization
15      {      {
16    
17          private int ResultsWritten = 0;          private int ResultsWritten = 0;
18            protected override string TemporaryFolder { get { return SearchResultsConstants.SearchResultsFolder; } }
19          public SearchResultWriter() : base() { }          //public SearchResultWriter() : base() { }
20          public SearchResultWriter(int resultCount) : base(resultCount) { WriteHeader(); }          public SearchResultWriter(int resultCount, Guid guid) : base(resultCount, guid) { WriteHeader(guid); }
21          public SearchResultWriter(string filename) : base(filename) { WriteHeader(); }          //public SearchResultWriter(string filename, Guid guid) : base(CreateFileName(filename,guid), guid) { WriteHeader(guid); }
22          public SearchResultWriter(string filename, int resultCount) : base(filename, resultCount, false) { WriteHeader(); }          //public SearchResultWriter(string filename, int resultCount, Guid guid) : base(filename, resultCount, guid, false) { WriteHeader(guid); }
23          public SearchResultWriter(string filename, int resultCount, bool delete) : base(filename, resultCount, delete) { WriteHeader(); }          //public SearchResultWriter(string filename, int resultCount, Guid guid, bool delete) : base(filename, resultCount, guid, delete) { WriteHeader(guid); }      
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()          long ResultCountOffset = 0;
69            private void WriteHeader(Guid guid)
70          {          {
71              // write magic: SRD              try
72              binWriter.Write(Encoding.UTF8.GetBytes("SRD"));              {
73              // write version (int)                  // write magic: SRD
74              binWriter.Write((int)1);                  binWriter.Write(Encoding.UTF8.GetBytes("SRD"));
75              // write count (int)  
76              binWriter.Write(ResultCount);                  if (guid == Guid.Empty)
77                    {
78                        binWriter.Write((int)1);
79                    }
80                    else
81                    {
82                        binWriter.Write((int)2);
83                        // related guid - length
84                        binWriter.Write(guid.ToByteArray().Length);
85                        // related guid - data
86                        binWriter.Write(guid.ToByteArray());
87                    }
88                    // write count (int)
89                    binWriter.Write(ResultCount);
90                    ResultCountOffset = binWriter.BaseStream.Position - sizeof(int);
91                }
92                catch (Exception ex)
93                {
94                    throw ex;
95                }
96          }          }
97    
98          protected override void Dispose(bool disposing)          protected override void Dispose(bool disposing)
99          {                      {
100              base.Dispose(disposing);              if (Cancelled) { binWriter.Close(); fileStream.Close(); return; }
101              // ensure ResultCount and ResultsWritten are equal                          try
102              if (ResultCount != ResultsWritten)              {
103              {                
104                  string message = string.Format("ResultCount does not match ResultsWritten: 0x{0:x8} != 0x{1:x8} -- offset: 0x{2:x8}", ResultCount, ResultsWritten, ResultCount - ResultsWritten);                  //// ensure ResultCount and ResultsWritten are equal            
105                  Logging.logger.Error.WriteLine(message);                  //if (ResultCount != ResultsWritten)
106                  throw new InvalidOperationException(message);                  //{
107                    //    string message = string.Format("ResultCount does not match ResultsWritten: 0x{0:x8} != 0x{1:x8} -- offset: 0x{2:x8}", ResultCount, ResultsWritten, ResultCount - ResultsWritten);
108                    //    Logging.logger.Error.WriteLine(message);
109                    //    throw new InvalidOperationException(message);
110                    //}
111                    if (ResultCount != ResultsWritten)
112                    {
113                        // update the number of results written
114                        binWriter.BaseStream.Seek(ResultCountOffset, SeekOrigin.Begin);
115                        binWriter.Write(ResultsWritten);
116                    }
117                    base.Dispose(disposing);
118                }
119                catch (Exception ex)
120                {
121                    throw ex;
122              }              }
123          }          }
124      }      }

Legend:
Removed from v.429  
changed lines
  Added in v.456

  ViewVC Help
Powered by ViewVC 1.1.22