GIMBLE_HANDLE SAP::add(CollisionObject *o) { SAPObject *obj = new SAPObject(o); GIMBLE_HANDLE handle = mFirstFreeObjectIndex; mObjects[handle] = obj; obj->mIndex = handle; while (mObjects[mFirstFreeObjectIndex] && mFirstFreeObjectIndex < mMaxEntries/2) mFirstFreeObjectIndex++; mNumObjects++; insertEntries(obj); return handle; }
void AccountListWidget::updateEntries( const QModelIndex& topLeft, const QModelIndex& bottomRight ) { for( int row = topLeft.row(); row <= bottomRight.row(); ++row ) { QPersistentModelIndex idx( m_model->index( row, 0 ) ); int newCount = idx.data( Tomahawk::Accounts::AccountModel::ChildrenOfFactoryRole ) .value< QList< Tomahawk::Accounts::Account* > >().count(); if( m_entries.value( idx ).count() == newCount ) { updateEntry( idx ); } else { removeEntries( idx.parent(), idx.row(), idx.row() ); insertEntries( idx.parent(), idx.row(), idx.row() ); } } }
int main() { int scan1; int eNentry; int eAentry; int eSentry; int dAentry; int eage; float esal; char edname[40]; empName[9] = '\0'; char fltname[40]; int recordid = 1; char errStr[200]; int* ivalue = NULL; char* cvalue = NULL; AM_Init(); strcpy(empAge, "TestDb3"); if (AM_CreateIndex(empAge, STRING, sizeof(empName) - 1, INTEGER, sizeof(int)) != AME_OK) { sprintf(errStr, "Error in AM_CreateIndex called on %s \n", empAge); AM_PrintError(errStr); return 1; } if ((eAentry = AM_OpenIndex(empAge)) < 0) { sprintf(errStr, "Error in AM_OpenIndex called on %s \n", empAge); AM_PrintError(errStr); return 1; } srand(time(NULL)); int i, j; recordid = 0; int count = 0; for (i = 1; i <= 100000; ++i) { for (j = 0; j < 9; ++j) { empName[j] = (char) abs(rand()%(122-97) + 97); } if(empName[0] == 'a') count++; insertEntries(eAentry, empName, ++recordid); // printf("record id : %d\n", recordid); } strcpy(empName, "bla"); insertEntries(eAentry, empName, ++recordid); printf("names starting with a : %d\n", count); empName[0] = 'b'; empName[1] = '\0'; int scan = AM_OpenIndexScan(eAentry, LESS_THAN, empName); i = 0; while(AM_FindNextEntry(scan) != NULL) i++; printf("Names with less than b : %d\n", i); AM_CloseIndexScan(scan); empName[0] = 'b'; empName[1] = '\0'; scan = AM_OpenIndexScan(eAentry, GREATER_THAN, empName); i = 0; while(AM_FindNextEntry(scan) != NULL) i++; printf("Names with more than b : %d\n", i); AM_CloseIndexScan(scan); strcpy(empName, "bla"); scan = AM_OpenIndexScan(eAentry, EQUAL, empName); i = 0; int * kappa = NULL; while((kappa = (int *) AM_FindNextEntry(scan) )!= NULL) { printf("%d\n", *kappa); i++; } printf("Names equal with bla : %d\n", i); AM_CloseIndexScan(scan); printf("record id : %d\n", recordid); AM_CloseIndex(eAentry); AM_DestroyIndex(empAge); return 0; }
Status ChunkIndex::buildChunkIndex(unsigned chunkType) { if(idTable == NULL) { idTable = new MemoryBuffer(HASH_CAPACITY); tableSize = idTable->getSize() / sizeof(unsigned); offsetTable = new MemoryBuffer(HASH_CAPACITY); idTableEntries = (ID*)idTable->getBuffer(); offsetTableEntries = (ID*)offsetTable->getBuffer(); tableSize = 0; } const uchar* begin, *limit, *reader; ID x,y; if(chunkType == 1) { reader = chunkManager.getStartPtr(1); begin = reader; if(chunkManager.getStartPtr(chunkType) == chunkManager.getEndPtr(chunkType)) return OK; x = 0; reader = Chunk::readXId(reader, x); insertEntries(x, 0); reader = reader + (int)MemoryBuffer::pagesize; limit = chunkManager.getEndPtr(1); while(reader < limit) { x = 0; //const char* temp = this->backSkip(reader); const uchar* temp = Chunk::skipBackward(reader); Chunk::readXId(temp, x); insertEntries(x, temp - begin); reader = reader + (int)MemoryBuffer::pagesize; } //reader = backSkip(limit); reader = Chunk::skipBackward(limit); x = 0; Chunk::readXId(reader, x); insertEntries(x, reader - begin); } if(chunkType == 2) { reader = chunkManager.getStartPtr(2); begin = reader; if(chunkManager.getStartPtr(chunkType) == chunkManager.getEndPtr(chunkType)) return OK; x = 0; y = 0; Chunk::readYId(Chunk::readXId(reader, x), y); insertEntries(x + y, 0); reader = reader + (int)MemoryBuffer::pagesize; limit = chunkManager.getEndPtr(2); while(reader < limit) { x = 0; y = 0; //const char* temp = this->backSkip(reader); const uchar* temp = Chunk::skipBackward(reader); Chunk::readYId(Chunk::readXId(temp, x), y); insertEntries(x + y, temp - begin); reader = reader + (int)MemoryBuffer::pagesize; } x= y = 0; //reader = backSkip(limit); reader = Chunk::skipBackward(limit); Chunk::readYId(Chunk::readXId(reader, x), y); insertEntries(x + y, reader - begin); } return OK; }