dbCreateRecord use ellSortStable()
sort records once per dbLoadCOM()
This commit is contained in:
committed by
Ralph Lange
parent
40d110fd7d
commit
70fc52bca0
@@ -194,7 +194,16 @@ static void freeInputFileList(void)
|
||||
free((void *)pinputFileNow);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
static
|
||||
int cmp_dbRecordNode(const ELLNODE *lhs, const ELLNODE *rhs)
|
||||
{
|
||||
dbRecordNode *LHS = (dbRecordNode*)lhs,
|
||||
*RHS = (dbRecordNode*)rhs;
|
||||
|
||||
return strcmp(LHS->recordname, RHS->recordname);
|
||||
}
|
||||
|
||||
static long dbReadCOM(DBBASE **ppdbbase,const char *filename, FILE *fp,
|
||||
const char *path,const char *substitutions)
|
||||
{
|
||||
@@ -289,6 +298,15 @@ static long dbReadCOM(DBBASE **ppdbbase,const char *filename, FILE *fp,
|
||||
dbFinishEntry(pdbEntry);
|
||||
}
|
||||
cleanup:
|
||||
{
|
||||
ELLNODE *cur;
|
||||
for(cur = ellFirst(&pdbbase->recordTypeList); cur; cur=ellNext(cur))
|
||||
{
|
||||
dbRecordType *rtype = CONTAINER(cur, dbRecordType, node);
|
||||
|
||||
ellSortStable(&rtype->recList, &cmp_dbRecordNode);
|
||||
}
|
||||
}
|
||||
if(macHandle) macDeleteHandle(macHandle);
|
||||
macHandle = NULL;
|
||||
if(mac_input_buffer) free((void *)mac_input_buffer);
|
||||
|
||||
@@ -1426,17 +1426,7 @@ long dbCreateRecord(DBENTRY *pdbentry,const char *precordName)
|
||||
pNewRecNode->recordname = dbRecordName(pdbentry);
|
||||
ellInit(&pNewRecNode->infoList);
|
||||
/* install record node in list in sorted postion */
|
||||
status = dbFirstRecord(pdbentry);
|
||||
while(status==0) {
|
||||
if(strcmp(precordName,dbGetRecordName(pdbentry)) < 0) break;
|
||||
status = dbNextRecord(pdbentry);
|
||||
}
|
||||
if(status==0) {
|
||||
precnode = pdbentry->precnode;
|
||||
ellInsert(preclist,ellPrevious(&precnode->node),&pNewRecNode->node);
|
||||
} else {
|
||||
ellAdd(preclist,&pNewRecNode->node);
|
||||
}
|
||||
ellAdd(preclist, &pNewRecNode->node);
|
||||
pdbentry->precnode = pNewRecNode;
|
||||
ppvd = dbPvdAdd(pdbentry->pdbbase,precordType,pNewRecNode);
|
||||
if(!ppvd) {errMessage(-1,"Logic Err: Could not add to PVD");return(-1);}
|
||||
|
||||
Reference in New Issue
Block a user