Cleanup xgzarc classes, cleanup comments, update copyright
authorMichael Petch <mpetch@capp-sysware.com>
Thu, 2 Jan 2014 00:04:29 +0000 (17:04 -0700)
committerMichael Petch <mpetch@capp-sysware.com>
Thu, 2 Jan 2014 00:04:29 +0000 (17:04 -0700)
extractxgdata.py
xgimport.py
xgstruct.py
xgzarc.py

index e2e2d07..bd4079d 100755 (executable)
@@ -1,7 +1,7 @@
 #
 #   extractxgdata.py - Simple XG data extraction tool
-#   Copyright (C) 2013  Michael Petch <mpetch@gnubg.org>
-#                                     <mpetch@capp-sysware.com>
+#   Copyright (C) 2013,2014  Michael Petch <mpetch@gnubg.org>
+#                                          <mpetch@capp-sysware.com>
 #
 #   This program is free software: you can redistribute it and/or modify
 #   it under the terms of the GNU General Public License as published by
index 99a5a3c..d7aa4da 100644 (file)
@@ -1,7 +1,7 @@
 #
 #   xgimport.py - XG import module
-#   Copyright (C) 2013  Michael Petch <mpetch@gnubg.org>
-#                                     <mpetch@capp-sysware.com>
+#   Copyright (C) 2013,2014  Michael Petch <mpetch@gnubg.org>
+#                                          <mpetch@capp-sysware.com>
 #
 #   This program is free software: you can redistribute it and/or modify
 #   it under the terms of the GNU General Public License as published by
index 9b079c0..5d357ec 100644 (file)
@@ -1,7 +1,7 @@
 #
 #   xgstruct.py - classes to read XG file structures
-#   Copyright (C) 2013  Michael Petch <mpetch@gnubg.org>
-#                                     <mpetch@capp-sysware.com>
+#   Copyright (C) 2013,2014  Michael Petch <mpetch@gnubg.org>
+#                                          <mpetch@capp-sysware.com>
 #
 #   This program is free software: you can redistribute it and/or modify
 #   it under the terms of the GNU General Public License as published by
@@ -651,7 +651,6 @@ class MoveEntry(dict):
             'TimeDelayMove': 0,             # v26: Bit list: position is marked for later RO
             'TimeDelayMoveDone': 0,         # v26: Bit list: position later RO has been done
             'NumberOfAutoDoubleMove': 0     # v27: Number of Autodouble that happen in that game
-                                            # filler, ignore, should be set to 0
             }
         super(MoveEntry, self).__init__(defaults, **kw)
 
@@ -821,11 +820,8 @@ class RolloutContextEntry(dict):
             'FirstRoll': False,             # is it a first roll rollout
             'DoDouble': False,              # roll both line (ND and D/T) in multiple rollout
             'Extent': False,                # if the ro is extended
-                                            
-                                            
             'Rolled': 0,                    # game rolled
             'DoubleFirst': False,           # a double happens immediatly.
-                                            
             'Sum1': None,                   # sum of equities for all 36 1st roll
             'SumSquare1': None,             # sum of square equities for all 36 1st roll
             'Sum2': None,                   # D/T sum of equities for all 36 1st roll
@@ -835,30 +831,22 @@ class RolloutContextEntry(dict):
             'RolledD': None,                # number of game rolled for all 36 1st roll
             'Error1': 0.0,                  # 95% CI
             'Error2': 0.0,                  # D/T 95% CI
-                                            
             'Result1': None,                # evaluation of the position
             'Result2': None,                # D/T evaluation of the position
             'Mwc1': 0.0,                    # ND  mwc equivalent of result1[1,6]
             'Mwc2': 0.0,                    # D/T mwc equivalent of result2[1,6]
-                                            
             'PrevLevel': 0,                 # store the previous analyze level (for deleting RO)
             'PrevEval': None,               # store the previous analyze result (for deleting RO)
             'PrevND': 0.0,                  # store the previous analyze equities (for deleting RO)
             'PrevD': 0.0,                   
-                                            
             'Duration': 0.0,                # duration in seconds
-                                            
-                                            
             'LevelTrunc': 0,                # level used at truncation
-                                            
             'Rolled2': 0,                   # D/T number of game rolled
-                                            
             'MultipleMin': 0,               # Multiple RO minimum # of game
             'MultipleStopAll': False,       # Multiple RO stop all if one move reach MultipleStopAllValue
             'MultipleStopOne': False,       # Multiple RO stop one move is reach under MultipleStopOneValue
             'MultipleStopAllValue': 0.0,    # value to stop all RO (for instance 99.9%)
             'MultipleStopOneValue': 0.0,    # value to stop one move(for instance 0.01%)
-                                            
             'AsTake': False,                # when running ND and D/T if AsTake is true, checker decision are made using the cube position in the D/T line
             'Rotation': 0,                  # 0=36 dice, 1=21 dice (XG1), 2=30 dice (for 1st pos)
             'UserInterrupted': False,       # RO was interrupted by user
index 518bf7d..2541994 100644 (file)
--- a/xgzarc.py
+++ b/xgzarc.py
@@ -1,7 +1,7 @@
 #
 #   xgzarc.py - XG ZLib archive module
-#   Copyright (C) 2013  Michael Petch <mpetch@gnubg.org>
-#                                     <mpetch@capp-sysware.com>
+#   Copyright (C) 2013,2014  Michael Petch <mpetch@gnubg.org>
+#                                          <mpetch@capp-sysware.com>
 #
 #   This program is free software: you can redistribute it and/or modify
 #   it under the terms of the GNU General Public License as published by
@@ -39,21 +39,27 @@ class Error(Exception):
         return repr(self.value)
 
 
-class ArchiveRecord(object):
+class ArchiveRecord(dict):
 
     SIZEOFREC = 36
 
-    def __init__(self):
-        self.crc = 0
-        self.filecount = 0
-        self.version = 0
-        self.registrysize = 0
-        self.archivesize = 0
-        self.compressedregistry = False
-        self.reserved = []
+    def __init__(self, **kw):
+        defaults = {
+            'crc': 0,
+            'filecount': 0,
+            'version': 0,
+            'registrysize': 0,
+            'archivesize': 0,
+            'compressedregistry': False,
+            'reserved': []
+            }
+        super(ArchiveRecord, self).__init__(defaults, **kw)
 
-    def __str__(self):
-        return str(self.todict())
+    def __setattr__(self, key, value):
+        self[key] = value
+
+    def __getattr__(self, key):
+        return self[key]
 
     def fromstream(self, stream):
         unpacked_data = _struct.unpack('<llllll12B',
@@ -74,20 +80,29 @@ class ArchiveRecord(object):
                 'reserved': self.reserved}
 
 
-class FileRecord(object):
+class FileRecord(dict):
 
     SIZEOFREC = 532
 
-    def __init__(self):
-        self.name = None
-        self.path = None
-        self.osize = 0
-        self.csize = 0
-        self.start = 0
-        self.crc = 0
-        self.compressed = False
-        self.stored = False
-        self.compressionlevel = 0
+    def __init__(self, **kw):
+        defaults = {
+            'name': None,
+            'path': None,
+            'osize': 0,
+            'csize': 0,
+            'start': 0,
+            'crc': 0,
+            'compressed': False,
+            'stored': False,
+            'compressionlevel': 0
+            }
+        super(FileRecord, self).__init__(defaults, **kw)
+
+    def __setattr__(self, key, value):
+        self[key] = value
+
+    def __getattr__(self, key):
+        return self[key]
 
     def fromstream(self, stream):
         unpacked_data = _struct.unpack('<256B256BllllxBxB',