dbCreateRecord use ellSortStable()

sort records once per dbLoadCOM()
This commit is contained in:
Michael Davidsaver
2016-04-26 13:57:22 -04:00
committed by Ralph Lange
parent 40d110fd7d
commit 70fc52bca0
2 changed files with 20 additions and 12 deletions

View File

@@ -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);

View File

@@ -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);}