int main( int argc, char * argv[ ] ) { void * ht; int rc; char * data; ht = pblHtCreate(); rc = pblHtInsert( ht, "123", 4, "123" ); rc = pblHtInsert( ht, "124", 4, "124" ); rc = pblHtInsert( ht, "125", 4, "125" ); rc = pblHtInsert( ht, "123", 4, "123" ); rc = pblHtInsert( ht, "123", 3, "123" ); data = pblHtLookup( ht, "123", 4 ); data = pblHtLookup( ht, "123", 3 ); data = pblHtLookup( ht, "124", 4 ); data = pblHtLookup( ht, "125", 4 ); data = pblHtLookup( ht, "126", 4 ); for( data = pblHtFirst( ht ); data; data = pblHtNext( ht )) { data = pblHtCurrent( ht ); } rc = pblHtRemove( ht, "125", 4 ); data = pblHtFirst( ht ); rc = pblHtDelete( ht ); while( !pblHtRemove( ht, 0, 0 )); rc = pblHtInsert( ht, "123", 4, "123" ); rc = pblHtInsert( ht, "124", 4, "124" ); rc = pblHtInsert( ht, "125", 4, "125" ); rc = pblHtInsert( ht, "123", 4, "123" ); rc = pblHtInsert( ht, "123", 3, "123" ); for( data = pblHtFirst( ht ); data; data = pblHtNext( ht )) { pblHtRemove( ht, 0, 0 ); } rc = pblHtDelete( ht ); return rc; }
int lockManagerCommitHashed(int xid, int datLen) { if(xid == -1) { return 0; } pthread_mutex_lock(&xid_table_mutex); pblHashTable_t * xidLocks = pblHtLookup_r(xidLockTable, &xid, sizeof(int)); pblHtRemove_r(xidLockTable, &xid, sizeof(int)); if(!xidLocks) { xidLocks = lockManagerBeginTransactionUnlocked(xid); } pthread_mutex_unlock(&xid_table_mutex); long currentLevel; int ret = 0; for(currentLevel = (long)pblHtFirst_r(xidLocks); currentLevel; currentLevel = (long)pblHtNext_r(xidLocks)) { void * currentKey = pblHtCurrentKey_r(xidLocks); int tmpret = decrementLock(currentKey, datLen, currentLevel); // Pass any error(s) up to the user. // (This logic relies on the fact that currently it only returns 0 and LLADD_INTERNAL_ERROR) if(tmpret) { ret = tmpret; } } pblHtDelete(xidLocks); return ret; }
/* * test frame for the hash table library * * this test frame calls the hash table library, * it does not have any parameters, it is meant for * debugging the hash table library */ int pblHASHTABLE_TestFrame( int argc, char * argv[ ] ) { pblHashTable_t * ht; int rc; size_t size; char * data; ht = pblHtCreate(); fprintf( stdout, "pblHtCreate() ht = %p\n", ht ); rc = pblHtInsert( ht, "123", 4, "123" ); fprintf( stdout, "pblHtInsert( ht, 123, 4, 123 ) rc = %d\n", rc ); rc = pblHtInsert( ht, "124", 4, "124" ); fprintf( stdout, "pblHtInsert( ht, 124, 4, 124 ) rc = %d\n", rc ); rc = pblHtInsert( ht, "125", 4, "125" ); fprintf( stdout, "pblHtInsert( ht, 125, 4, 125 ) rc = %d\n", rc ); rc = pblHtInsert( ht, "123", 4, "123" ); fprintf( stdout, "pblHtInsert( ht, 123, 4, 123 ) rc = %d\n", rc ); rc = pblHtInsert( ht, "123", 3, "123" ); fprintf( stdout, "pblHtInsert( ht, 123, 3, 123 ) rc = %d\n", rc ); data = pblHtLookup( ht, "123", 4 ); fprintf( stdout, "pblHtLookup( ht, 123, 4 ) data = %s\n", data ? data : "NULL" ); data = pblHtLookup( ht, "123", 3 ); fprintf( stdout, "pblHtLookup( ht, 123, 3 ) data = %s\n", data ? data : "NULL" ); data = pblHtLookup( ht, "124", 4 ); fprintf( stdout, "pblHtLookup( ht, 124, 4 ) data = %s\n", data ? data : "NULL" ); data = pblHtLookup( ht, "125", 4 ); fprintf( stdout, "pblHtLookup( ht, 125, 4 ) data = %s\n", data ? data : "NULL" ); data = pblHtLookup( ht, "126", 4 ); fprintf( stdout, "pblHtLookup( ht, 126, 4 ) data = %s\n", data ? data : "NULL" ); for( data = pblHtFirst( ht ); data; data = pblHtNext( ht )) { data = pblHtCurrent( ht ); fprintf( stdout, "pblHtCurrent( ht ) data = %s\n", data ? data : "NULL" ); size = 0; data = pblHtCurrentKey( ht, &size ); fprintf( stdout, "pblHtCurrentKey( ht, &size ) data = %s, size %ld\n", data ? data : "NULL", (long int)size ); } rc = pblHtRemove( ht, "125", 4 ); fprintf( stdout, "pblHtRemove( ht, 125, 4 ) rc = %d\n", rc ); data = pblHtFirst( ht ); fprintf( stdout, "pblHtFirst( ht ) data = %s\n", data ? data : "NULL" ); rc = pblHtDelete( ht ); fprintf( stdout, "pblHtDelete( ht, 125, 4 ) rc = %d\n", rc ); while( !pblHtRemove( ht, 0, 0 )); rc = pblHtInsert( ht, "123", 4, "123" ); fprintf( stdout, "pblHtInsert( ht, 123, 4, 123 ) rc = %d\n", rc ); rc = pblHtInsert( ht, "124", 4, "124" ); fprintf( stdout, "pblHtInsert( ht, 124, 4, 124 ) rc = %d\n", rc ); rc = pblHtInsert( ht, "125", 4, "125" ); fprintf( stdout, "pblHtInsert( ht, 125, 4, 125 ) rc = %d\n", rc ); rc = pblHtInsert( ht, "123", 4, "123" ); fprintf( stdout, "pblHtInsert( ht, 123, 4, 123 ) rc = %d\n", rc ); rc = pblHtInsert( ht, "123", 3, "123" ); fprintf( stdout, "pblHtInsert( ht, 123, 3, 123 ) rc = %d\n", rc ); for( data = pblHtFirst( ht ); data; data = pblHtNext( ht )) { pblHtRemove( ht, 0, 0 ); } rc = pblHtDelete( ht ); fprintf( stdout, "pblHtDelete( ht ) rc = %d\n", rc ); return( rc ); }