int countTypes( int max_types, int num_cpus, int** array_ptr, bool except ) { int i, num=0, num_set=0; MyString param_name; MyString cruft_name; int* my_type_nums = new int[max_types]; if( ! array_ptr ) { EXCEPT( "ResMgr:countTypes() called with NULL array_ptr!" ); } // Type 0 is special, user's shouldn't define it. _checkInvalidParam("NUM_SLOTS_TYPE_0", except); // CRUFT _checkInvalidParam("NUM_VIRTUAL_MACHINES_TYPE_0", except); for( i=1; i<max_types; i++ ) { param_name.formatstr("NUM_SLOTS_TYPE_%d", i); if (param_boolean("ALLOW_VM_CRUFT", false)) { cruft_name.formatstr("NUM_VIRTUAL_MACHINES_TYPE_%d", i); my_type_nums[i] = param_integer(param_name.Value(), param_integer(cruft_name.Value(), 0)); } else { my_type_nums[i] = param_integer(param_name.Value(), 0); } if (my_type_nums[i]) { num_set = 1; num += my_type_nums[i]; } } if( num_set ) { // We found type-specific stuff, use that. my_type_nums[0] = 0; } else { // We haven't found any special types yet. Therefore, // we're evenly dividing things, so we only have to figure // out how many nodes to advertise. if (param_boolean("ALLOW_VM_CRUFT", false)) { my_type_nums[0] = param_integer("NUM_SLOTS", param_integer("NUM_VIRTUAL_MACHINES", num_cpus)); } else { my_type_nums[0] = param_integer("NUM_SLOTS", num_cpus); } num = my_type_nums[0]; } *array_ptr = my_type_nums; return num; }
void initTypes( int max_types, StringList **type_strings, int except ) { int i; char* tmp; MyString buf; _checkInvalidParam("SLOT_TYPE_0", except); // CRUFT _checkInvalidParam("VIRTUAL_MACHINE_TYPE_0", except); if (! type_strings[0]) { // Type 0 is the special type for evenly divided slots. type_strings[0] = new StringList(); type_strings[0]->initializeFromString("auto"); } for( i=1; i < max_types; i++ ) { if( type_strings[i] ) { continue; } buf.formatstr("SLOT_TYPE_%d", i); tmp = param(buf.Value()); if (!tmp) { if (param_boolean("ALLOW_VM_CRUFT", false)) { buf.formatstr("VIRTUAL_MACHINE_TYPE_%d", i); if (!(tmp = param(buf.Value()))) { continue; } } else { continue; } } type_strings[i] = new StringList(); type_strings[i]->initializeFromString( tmp ); free( tmp ); #if 0 // check for pairings buf += "PAIRED_WITH"; tmp = param(buf.Value()); if ( ! tmp) continue; PRAGMA_REMIND("tj: treating the slot that has PAIRED_WITH as subordinate! fix this!") type_strings[i]->insert("minimal"); free (tmp); #endif } }
void initTypes( int max_types, StringList **type_strings, int except ) { int i; char* tmp; MyString buf; _checkInvalidParam("SLOT_TYPE_0", except); // CRUFT _checkInvalidParam("VIRTUAL_MACHINE_TYPE_0", except); if (! type_strings[0]) { // Type 0 is the special type for evenly divided slots. type_strings[0] = new StringList(); type_strings[0]->initializeFromString("auto"); } for( i=1; i < max_types; i++ ) { if( type_strings[i] ) { continue; } buf.formatstr("SLOT_TYPE_%d", i); tmp = param(buf.Value()); if (!tmp) { if (param_boolean("ALLOW_VM_CRUFT", false)) { buf.formatstr("VIRTUAL_MACHINE_TYPE_%d", i); if (!(tmp = param(buf.Value()))) { continue; } } else { continue; } } type_strings[i] = new StringList(); type_strings[i]->initializeFromString( tmp ); free( tmp ); } }