static int set_seq_contains(intset_t *set, val_t val) { int result; node_t prev, next; #ifdef LOCKS global_lock(); #endif /* We have at least 2 elements */ LOAD_NODE(prev, set->head); LOAD_NODE(next, ND(prev.next)); while (next.val < val) { prev.next = next.next; LOAD_NODE(next, ND(prev.next)); } result = (next.val == val); #ifdef LOCKS global_lock_release(); #endif return result; }
void set_delete(intset_t *set) { node_t node, next; LOAD_NODE(node, set->head); nxt_t to_del = OF(set->head); while (node.next != 0) { to_del = node.next; LOAD_NODE(next, ND(node.next)); sys_shfree(ND(to_del)); node.next = next.next; } sys_shfree((void*) set); }
int set_size(intset_t* set) { int size = 0; node_t node, head; /* We have at least 2 elements */ LOAD_NODE(head, set->head); LOAD_NODE(node, ND(head.next)); while (node.next != 0) { size++; LOAD_NODE(node, ND(node.next)); } return size; }
static int set_seq_add(intset_t* set, val_t val) { int result; node_t prev, nnext; #ifdef LOCKS global_lock(); #endif nxt_t to_store = OF(set->head); /* int seq = 0; */ node_t* hd = set->head; LOAD_NODE(prev, hd); /* PRINT("%3d LOAD: head: %10lu val: %10ld %d", seq++, to_store, prev.val, prev.next); */ node_t* nd = ND(prev.next); LOAD_NODE(nnext, nd); /* PRINT("%3d LOAD: addr: %10d val: %10ld %d", seq++, prev.next, nnext.val, nnext.next); */ while (nnext.val < val) { to_store = prev.next; prev.val = nnext.val; prev.next = nnext.next; node_t* nd = ND(prev.next); LOAD_NODE(nnext, nd); /* PRINT("%3d LOAD: addr: %10lu val: %10ld %d", seq++, prev.next, nnext.val, nnext.next); */ } result = (nnext.val != val); if (result) { node_t *nn = new_node(val, prev.next, 0); prev.next = OF(nn); node_t* nd = ND(to_store); NONTX_STORE(nd, prev.to_int64, TYPE_INT); /* PRINT("%3d STORE: addr: %10lu val: %10ld %d", seq++, to_store, prev.val, prev.next); */ } #ifdef LOCKS global_lock_release(); #endif return result; }
void set_print(intset_t* set) { node_t node; LOAD_NODE(node, set->head); /* printf("min -%d-> ", node.next); */ printf("min --> "); LOAD_NODE(node, pgas_app_addr_from_offs(node.next)); if (node.next == 0) { goto null; } while (node.next != 0) { /* printf("%d -%d-> ", node.val, node.next); */ printf("%d --> ", node.val); LOAD_NODE(node, pgas_app_addr_from_offs(node.next)); } null: PRINTSF("max -> NULL\n"); }
bool Profile::LoadAllFromDir( CString sDir, bool bRequireSignature ) { CHECKPOINT; LOG->Trace( "Profile::LoadAllFromDir( %s )", sDir.c_str() ); InitAll(); LoadEditableDataFromDir( sDir ); // Read stats.xml FOR_ONCE { CString fn = sDir + STATS_XML; if( !IsAFile(fn) ) break; // // Don't unreasonably large stats.xml files. // if( !IsMachine() ) // only check stats coming from the player { int iBytes = FILEMAN->GetFileSizeInBytes( fn ); if( iBytes > MAX_PLAYER_STATS_XML_SIZE_BYTES ) { LOG->Warn( "The file '%s' is unreasonably large. It won't be loaded.", fn.c_str() ); break; } } if( bRequireSignature ) { CString sStatsXmlSigFile = fn+SIGNATURE_APPEND; CString sDontShareFile = sDir + DONT_SHARE_SIG; LOG->Trace( "Verifying don't share signature" ); // verify the stats.xml signature with the "don't share" file if( !CryptManager::VerifyFileWithFile(sStatsXmlSigFile, sDontShareFile) ) { LOG->Warn( "The don't share check for '%s' failed. Data will be ignored.", sStatsXmlSigFile.c_str() ); break; } LOG->Trace( "Done." ); // verify stats.xml LOG->Trace( "Verifying stats.xml signature" ); if( !CryptManager::VerifyFileWithFile(fn, sStatsXmlSigFile) ) { LOG->Warn( "The signature check for '%s' failed. Data will be ignored.", fn.c_str() ); break; } LOG->Trace( "Done." ); } LOG->Trace( "Loading %s", fn.c_str() ); XNode xml; if( !xml.LoadFromFile( fn ) ) { LOG->Warn( "Couldn't open file '%s' for reading.", fn.c_str() ); break; } LOG->Trace( "Done." ); /* The placeholder stats.xml file has an <html> tag. Don't load it, but don't * warn about it. */ if( xml.name == "html" ) break; if( xml.name != "Stats" ) WARN_AND_BREAK_M( xml.name ); LOAD_NODE( GeneralData ); LOAD_NODE( SongScores ); LOAD_NODE( CourseScores ); LOAD_NODE( CategoryScores ); LOAD_NODE( ScreenshotData ); LOAD_NODE( CalorieData ); LOAD_NODE( RecentSongScores ); LOAD_NODE( RecentCourseScores ); } return true; // FIXME? Investigate what happens if we always return true. }