\r
class MetaFileTable():\r
# TRICK: use file ID as the part before '.'\r
- _ID_STEP_ = 0.00000001\r
- _ID_MAX_ = 0.99999999\r
+ _ID_STEP_ = 1\r
+ _ID_MAX_ = 99999999\r
\r
## Constructor\r
def __init__(self, DB, MetaFile, FileType, Temporary, FromItem=None):\r
self.TableName = ""\r
self.DB = DB\r
self._NumpyTab = None\r
- self.FileId = len(DB.TblFile)\r
- self.ID = self.FileId\r
+\r
self.CurrentContent = []\r
DB.TblFile.append([MetaFile.Name,\r
MetaFile.Ext,\r
FileType,\r
MetaFile.TimeStamp,\r
FromItem])\r
+ self.FileId = len(DB.TblFile)\r
+ self.ID = self.FileId * 10**8\r
if Temporary:\r
self.TableName = "_%s_%s_%s" % (FileType, len(DB.TblFile), uuid.uuid4().hex)\r
else:\r
def IsIntegrity(self):\r
try:\r
TimeStamp = self.MetaFile.TimeStamp\r
- Result = int(self.CurrentContent[-1][0]) < 0\r
+ if not self.CurrentContent:\r
+ Result = False\r
+ else:\r
+ Result = self.CurrentContent[-1][0] < 0\r
if not Result:\r
# update the timestamp in database\r
self.DB.SetFileTimeStamp(self.FileId, TimeStamp)\r
self.CurrentContent.append(self._DUMMY_)\r
\r
def GetAll(self):\r
- return [item for item in self.CurrentContent if item[0] > 0 ]\r
+ return [item for item in self.CurrentContent if item[0] >= 0 ]\r
\r
## Python class representation of table storing module data\r
class ModuleTable(MetaFileTable):\r
- _ID_STEP_ = 0.00000001\r
- _ID_MAX_ = 0.99999999\r
_COLUMN_ = '''\r
ID REAL PRIMARY KEY,\r
Model INTEGER NOT NULL,\r
self.CurrentContent.append(row)\r
return self.ID\r
\r
-\r
## Query table\r
#\r
# @param Model: The Model of Record\r
BelongsToItem=-1, StartLine=-1, StartColumn=-1, EndLine=-1, EndColumn=-1, Enabled=0):\r
(Value1, Value2, Value3, Scope1, Scope2) = (Value1.strip(), Value2.strip(), Value3.strip(), Scope1.strip(), Scope2.strip())\r
self.ID = self.ID + self._ID_STEP_\r
- if self.ID >= (MODEL_FILE_INF + self._ID_MAX_):\r
- self.ID = MODEL_FILE_INF + self._ID_STEP_\r
\r
row = [ self.ID,\r
Model,\r
ExtraData=oricomment, File=self.MetaFile, Line=LineNum)\r
return set(), set(), set()\r
return set(validateranges), set(validlists), set(expressions)\r
+\r
## Python class representation of table storing platform data\r
class PlatformTable(MetaFileTable):\r
_COLUMN_ = '''\r
FromItem=-1, StartLine=-1, StartColumn=-1, EndLine=-1, EndColumn=-1, Enabled=1):\r
(Value1, Value2, Value3, Scope1, Scope2, Scope3) = (Value1.strip(), Value2.strip(), Value3.strip(), Scope1.strip(), Scope2.strip(), Scope3.strip())\r
self.ID = self.ID + self._ID_STEP_\r
- if self.ID >= (MODEL_FILE_INF + self._ID_MAX_):\r
- self.ID = MODEL_FILE_INF + self._ID_STEP_\r
\r
row = [ self.ID,\r
Model,\r
".dec" : MODEL_FILE_DEC,\r
".dsc" : MODEL_FILE_DSC,\r
}\r
-\r
+ _ObjectCache = {}\r
## Constructor\r
def __new__(Class, Cursor, MetaFile, FileType=None, Temporary=False, FromItem=None):\r
# no type given, try to find one\r
+ key = (MetaFile.Path, FileType,Temporary,FromItem)\r
+ if key in Class._ObjectCache:\r
+ return Class._ObjectCache[key]\r
if not FileType:\r
if MetaFile.Type in self._FILE_TYPE_:\r
FileType = Class._FILE_TYPE_[MetaFile.Type]\r
Args = Args + (FromItem,)\r
\r
# create the storage object and return it to caller\r
- return Class._FILE_TABLE_[FileType](*Args)\r
+ reval = Class._FILE_TABLE_[FileType](*Args)\r
+ if not Temporary:\r
+ Class._ObjectCache[key] = reval\r
+ return reval\r
\r