本文整理汇总了C++中HashTableIterator类的典型用法代码示例。如果您正苦于以下问题:C++ HashTableIterator类的具体用法?C++ HashTableIterator怎么用?C++ HashTableIterator使用的例子?那么, 这里精选的类代码示例或许可以为您提供帮助。
在下文中一共展示了HashTableIterator类的10个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1:
TemplateManager::~TemplateManager() {
delete templateCRCMap;
templateCRCMap = NULL;
delete clientTemplateCRCMap;
clientTemplateCRCMap = NULL;
delete luaTemplatesInstance;
luaTemplatesInstance = NULL;
delete portalLayoutMap;
portalLayoutMap = NULL;
delete floorMeshMap;
floorMeshMap = NULL;
HashTableIterator<String, AppearanceTemplate* > iterator = appearanceMap->iterator();
while (iterator.hasNext()) {
delete iterator.getNextValue();
}
delete appearanceMap;
appearanceMap = NULL;
}
示例2: TEST_F
TEST_F(LuaMobileTest, LuaMobileTemplatesTest) {
CreatureTemplateManager::DEBUG_MODE = 1;
// Verify that all mobiles load
ASSERT_EQ(CreatureTemplateManager::instance()->loadTemplates(), 0);
// Verify loot group map loads
LootGroupMap* lootGroupMap = LootGroupMap::instance();
ASSERT_EQ(lootGroupMap->initialize(), 0);
HashTableIterator<uint32, Reference<CreatureTemplate*> > iter = CreatureTemplateManager::instance()->iterator();
while (iter.hasNext()) {
CreatureTemplate* creature = iter.next();
std::string templateName( creature->getTemplateName().toCharArray() );
// Verify loot group percentages
LootGroupCollection* groupCollection = creature->getLootGroups();
if( groupCollection->count() > 0 ){
for( int i = 0; i < groupCollection->count(); i++ ){
LootGroupCollectionEntry* collectionEntry = groupCollection->get(i);
LootGroups* groups = collectionEntry->getLootGroups();
if( groups->count() > 0){
int totalChance = 0;
for( int j = 0; j < groups->count(); j++ ){
LootGroupEntry* lootGroup = groups->get(j);
totalChance += lootGroup->getLootChance();
// Verify loot group is configured correctly
LootGroupTemplate* foundGroup = lootGroupMap->getLootGroupTemplate( lootGroup->getLootGroupName() );
std::string groupName( lootGroup->getLootGroupName().toCharArray() );
EXPECT_TRUE( foundGroup != NULL ) << "Loot group " << groupName << " from " << templateName << " was not found in LootGroupMap";
}
EXPECT_EQ( 10000000, totalChance ) << "Loot groups total chance is incorrect " << templateName;
}
}
}
// Verify weapon groups exist
Vector<String> weapons = creature->getWeapons();
for (int i = 0; i < weapons.size(); i++) {
String weaponGroup = weapons.get(i);
std::string groupName( weaponGroup.toCharArray() );
Vector<String> group = CreatureTemplateManager::instance()->getWeapons(weaponGroup);
EXPECT_TRUE( group.size() > 0 ) << "Weapon group " << groupName << " from " << templateName << " was not found in weaponMap";
}
}
}
示例3: _locker
void ChatManagerImplementation::destroyRooms() {
Locker _locker(_this.getReferenceUnsafeStaticCast());
HashTableIterator<unsigned int, ManagedReference<ChatRoom* > > iter = roomMap->iterator();
while (iter.hasNext()) {
ChatRoom* room = iter.next();
room->finalize();
}
roomMap->removeAll();
gameRooms.removeAll();
}
示例4: locker
void CreatureManagerImplementation::spawnRandomCreature(int number, float x, float z, float y, uint64 parentID) {
Locker locker(_this.get());
if (reservePool.size() != 0) {
int id = System::random(reservePool.size() - 1);
ManagedReference<AiAgent*> aiAgent = reservePool.get(id);
reservePool.remove(id);
locker.release();
placeCreature(aiAgent, x, z, y, parentID);
//aiAgent->info("respawning from reserve Pool", true);
++spawnedRandomCreatures;
return;
}
locker.release();
if (creatureTemplateManager->size() == 0)
return;
int max = creatureTemplateManager->size() - 1;
uint32 randomCreature = System::random(max);
uint32 randomTemplate = 0;
Reference<CreatureTemplate*> creoTempl = NULL;
HashTableIterator<uint32, Reference<CreatureTemplate*> > iterator = creatureTemplateManager->iterator();
for (int i = 0; i < randomCreature; ++i) {
iterator.getNextKeyAndValue(randomTemplate, creoTempl);
//randomTemplate = iterator.getNextKey();
}
if (creoTempl == NULL || creoTempl->getLevel() > 100)
return;
for (int i = 0; i < number; ++i) {
if (spawnCreature(randomTemplate, 0, x, z, y, parentID) != NULL)
++spawnedRandomCreatures;
}
}
示例5: fillAttributeList
void DroidDeedImplementation::fillAttributeList(AttributeListMessage* alm, CreatureObject* object) {
DeedImplementation::fillAttributeList(alm, object);
// @TODO Add attributes
// Deed needs to show a few important bits
// 1.) HAM
int maxHam = DroidMechanics::determineHam(overallQuality,species);
alm->insertAttribute("challenge_level", level);
alm->insertAttribute("creature_health", maxHam);
alm->insertAttribute("creature_action", maxHam);
alm->insertAttribute("creature_mind", maxHam);
if(combatRating > 0 || (species == DroidObject::DZ70 || species == DroidObject::PROBOT) ) {
StringBuffer attdisplayValue;
float attackSpeed = DroidMechanics::determineSpeed(species,maxHam);
float chanceHit = DroidMechanics::determineHit(species,maxHam);
// do we have a combat module installed?
float damageMin = DroidMechanics::determineMinDamage(species,combatRating);
float damageMax = DroidMechanics::determineMaxDamage(species,combatRating);
attdisplayValue << Math::getPrecision(attackSpeed, 2);
StringBuffer hitdisplayValue;
hitdisplayValue << Math::getPrecision(chanceHit, 2);
alm->insertAttribute("creature_attack", attdisplayValue);
alm->insertAttribute("creature_tohit", hitdisplayValue);
alm->insertAttribute("creature_damage", String::valueOf(damageMin) + " - " + String::valueOf(damageMax));
}
// hit and speed?
// if object is the master
String key;
ManagedReference<DroidComponent*> comp = NULL;
HashTableIterator<String, ManagedReference<DroidComponent*> > iterator = modules.iterator();
for(int i = 0; i < modules.size(); ++i) {
iterator.getNextKeyAndValue(key, comp);
if (comp) {
DataObjectComponentReference* data = comp->getDataObjectComponent();
BaseDroidModuleComponent* module = NULL;
if(data != NULL && data->get() != NULL && data->get()->isDroidModuleData() ){
module = cast<BaseDroidModuleComponent*>(data->get());
}
if (module == NULL) {
continue;
}
module->fillAttributeList(alm,object);
}
}
}
示例6: TEST_F
TEST_F(LuaMobileTest, LuaLootGroupsTest) {
// Verify loot group map loaded
ASSERT_EQ(LootGroupMap::ERROR_CODE, 0);
// Test Loot Items
HashTableIterator<String, Reference<LootItemTemplate*> > itemIter = lootGroupMap->itemTemplates.iterator();
while (itemIter.hasNext()) {
LootItemTemplate* lootItemTemplate = itemIter.next();
String itemTemplateName( lootItemTemplate->getTemplateName().toCharArray() );
// Make sure that no loot items have the same name as a loot group
EXPECT_FALSE( lootGroupMap->lootGroupExists(itemTemplateName) ) << "Loot item " << std::string(itemTemplateName.toCharArray()) << " has the same name as a loot group.";
// Verify that directObjectTemplate is valid
String directObjectTemplate = lootItemTemplate->getDirectObjectTemplate();
SharedObjectTemplate* templateObject = templateManager->getTemplate(directObjectTemplate.hashCode());
EXPECT_TRUE( templateObject != NULL && templateObject->isSharedTangibleObjectTemplate() ) << "directObjectTemplate is invalid in loot item " << std::string(itemTemplateName.toCharArray());
}
// Test Loot Groups
HashTableIterator<String, Reference<LootGroupTemplate*> > iter = lootGroupMap->groupTemplates.iterator();
while (iter.hasNext()) {
LootGroupTemplate* lootGroupTemplate = iter.next();
String groupTemplateName( lootGroupTemplate->getTemplateName().toCharArray() );
// Verify that group is not empty
EXPECT_TRUE( lootGroupTemplate->getLootGroupEntryForRoll(-1).length() > 0 ) << "No entries in loot group: " << std::string(groupTemplateName.toCharArray());
// Check loot group to make sure their chances total correctly
EXPECT_GT( lootGroupTemplate->getLootGroupEntryForRoll(10000000).length(), 0 ) << "Item total chance is less than 10000000: " << std::string(groupTemplateName.toCharArray());
EXPECT_EQ( lootGroupTemplate->getLootGroupEntryForRoll(10000001).length(), 0 ) << "Item total chance is greater than 10000000: " << std::string(groupTemplateName.toCharArray());
// Check that all loot group entries are valid
for( int i = 0; i < lootGroupTemplate->size(); i++ ){
Vector<String> parentGroups;
parentGroups.add(groupTemplateName);
String entryName = lootGroupTemplate->getLootGroupEntryAt(i);
checkLootGroupEntryRecursive(entryName, &parentGroups);
}
}
}
示例7: SetUp
void SetUp() {
// Perform setup of common constructs here.
lootGroupMap->initialize();
ASSERT_TRUE( templateManager != NULL );
if( templateManager->loadedTemplatesCount == 0 ) {
templateManager->loadLuaTemplates();
}
commandConfigManager->registerSpecialCommands(list);
commandConfigManager->loadSlashCommandsFile();
Vector<String> files;
files.add("string/en/mob/creature_names.stf");
files.add("string/en/npc_name.stf");
files.add("string/en/monster_name.stf");
files.add("string/en/droid_name.stf");
files.add("string/en/npc_spawner_n.stf");
files.add("string/en/theme_park_name.stf");
files.add("string/en/event_perk.stf");
files.add("string/en/bestine.stf");
files.add("string/en/theme_park/warren/warren_system_messages.stf");
files.add("string/en/newbie_tutorial/system_messages.stf");
files.add("string/en/chassis_npc.stf");
int count = 0;
for (int i = 0; i < files.size(); i++) {
String file = files.get(i);
ObjectInputStream* stream = templateManager->openTreFile(file);
if (stream != NULL) {
if (stream->size() > 4) {
StringFile stringFile;
if (stringFile.load(stream)) {
file = file.replaceFirst("string/en/","");
file = file.replaceFirst(".stf","");
HashTable<String, UnicodeString>* hashTable = stringFile.getStringMap();
HashTableIterator<String, UnicodeString> iterator = hashTable->iterator();
while (iterator.hasNext()) {
String name;
UnicodeString value;
iterator.getNextKeyAndValue(name, value);
String full = "@" + file + ":" + name;
mobNames.add(full);
count++;
}
}
}
delete stream;
}
}
ASSERT_TRUE( count > 0 ) << "Could not load creature names.";
}
示例8: locker
//.........这里部分代码省略.........
Locker clocker(creatureObject, player);
Reference<DroidObject*> droid = creatureObject.castTo<DroidObject*>();
if( droid == NULL ) {
controlDevice->destroyObjectFromDatabase(true);
creatureObject->destroyObjectFromDatabase(true);
return 1;
}
droid->loadTemplateData( creatureTemplate );
droid->setCustomObjectName(StringIdManager::instance()->getStringId(*droid->getObjectName()), true);
// Transfer crafting components from deed to droid
ManagedReference<SceneObject*> craftingComponents = getSlottedObject("crafted_components");
if(craftingComponents != NULL) {
SceneObject* satchel = craftingComponents->getContainerObject(0);
// remove all items form satchel and add int he new items
Vector<ManagedReference<SceneObject*> > toRemove;
for (int i = 0; i < satchel->getContainerObjectsSize(); ++i) {
ManagedReference<SceneObject*> sceno = satchel->getContainerObject(i);
if (sceno != NULL) {
toRemove.add(sceno);
}
}
satchel->removeAllContainerObjects();
for(int i=0;i<toRemove.size();i++) {
SceneObject* component = toRemove.get(i);
Locker componenetLocker(component);
component->destroyObjectFromWorld(true);
}
// this will change to use stacked modules. we wont care about non droid modules as they arent needed.
String key;
ManagedReference<DroidComponent*> comp = NULL;
HashTableIterator<String, ManagedReference<DroidComponent*> > iterator = modules.iterator();
droid->setResists(0);
droid->setHitChance(0);
for(int i = 0; i < modules.size(); ++i) {
iterator.getNextKeyAndValue(key, comp);
if (comp) {
satchel->transferObject(comp, -1, false);
DataObjectComponentReference* data = comp->getDataObjectComponent();
BaseDroidModuleComponent* module = NULL;
if(data != NULL && data->get() != NULL && data->get()->isDroidModuleData()) {
module = cast<BaseDroidModuleComponent*>(data->get());
module->initialize(droid);
}
}
}
droid->transferObject(craftingComponents, 4, false);
craftingComponents->setSendToClient(false);
}
// Copy color customization from deed to droid
CustomizationVariables* customVars = getCustomizationVariables();
if( customVars != NULL ){
for (int i = 0; i < customVars->size(); ++i) {
uint8 id = customVars->elementAt(i).getKey();
int16 val = customVars->elementAt(i).getValue();
String name = CustomizationIdManager::instance()->getCustomizationVariable(id);
if( name.contains( "color" ) ){
droid->setCustomizationVariable( name, val, true );
}
}
droid->refreshPaint();
}
示例9: updateCraftingValues
void DroidDeedImplementation::updateCraftingValues(CraftingValues* values, bool firstUpdate) {
/*
* Values available: Range:
*
*/
String key;
ManagedReference<DroidComponent*> comp = NULL;
HashTableIterator<String, ManagedReference<DroidComponent*> > iterator = modules.iterator();
for(int i = 0; i < modules.size(); ++i) {
iterator.getNextKeyAndValue(key, comp);
if (comp) {
comp->destroyObjectFromWorld(true);
comp->destroyObjectFromDatabase(true);
}
}
modules.removeAll();
overallQuality = values->getCurrentPercentage("power_level"); // effectiveness
if (overallQuality < 0)
overallQuality = 0.1;
combatRating = values->getCurrentValue("cmbt_module");
if (combatRating < 0)
combatRating = 0;
// @TODO Add crafting values, this should adjust toHit and Speed based on droid ham, also
// we need to stack modules if they are stackable.
// walk all components and ensure we have all modules that are stackable there.
ManagedReference<ManufactureSchematic*> manufact = values->getManufactureSchematic();
for (int i = 0; i < manufact->getSlotCount(); ++i) {
// Droid Component Slots
Reference<IngredientSlot* > iSlot = manufact->getSlot(i);
if (iSlot->isComponentSlot()) {
ComponentSlot* cSlot = cast<ComponentSlot*>(iSlot.get());
ManagedReference<TangibleObject*> tano = cSlot->getPrototype();
ManagedReference<DroidComponent*> component = cast<DroidComponent*>( tano.get());
// only check modules
if (component != NULL) {
if (component->isSocketCluster()) {
// pull out the objects
ManagedReference<SceneObject*> craftingComponents = component->getSlottedObject("crafted_components");
if(craftingComponents != NULL) {
SceneObject* satchel = craftingComponents->getContainerObject(0);
for (int i = 0; i < satchel->getContainerObjectsSize(); ++i) {
ManagedReference<SceneObject*> sceno = satchel->getContainerObject(i);
if (sceno != NULL) {
// now we have the componet used in this socket item
ManagedReference<DroidComponent*> sub = cast<DroidComponent*>( sceno.get());
if (sub != NULL) {
DataObjectComponentReference* data = sub->getDataObjectComponent();
BaseDroidModuleComponent* module = NULL;
if(data != NULL && data->get() != NULL && data->get()->isDroidModuleData() ){
module = cast<BaseDroidModuleComponent*>(data->get());
}
if (module == NULL) {
continue;
}
processModule(module,sceno->getServerObjectCRC());
}
}
}
}
} else {
DataObjectComponentReference* data = component->getDataObjectComponent();
BaseDroidModuleComponent* module = NULL;
if(data != NULL && data->get() != NULL && data->get()->isDroidModuleData() ){
module = cast<BaseDroidModuleComponent*>(data->get());
}
if (module == NULL) {
continue;
}
processModule(module,tano->getServerObjectCRC());
}
}
}
}
// module stacking is completed!
}
示例10: error
void StringIdManager::populateDatabase() {
int count = 0;
TemplateManager::instance();
TreeArchive* treeArchive = DataArchiveStore::instance()->getTreeArchive();
Vector<String>* files = treeArchive->getFilesAndSubDirectoryFiles("string/en");
if (files == NULL) {
error("string/en directory missing");
ObjectDatabaseManager::instance()->commitLocalTransaction();
return;
}
for (int i = 0; i < files->size(); ++i) {
String file = files->get(i);
ObjectInputStream* stream = TemplateManager::instance()->openTreFile(files->get(i));
if (stream == NULL) {
//error("could not open file " + files->get(i));
continue;
} else {
if (stream->size() > 4) {
//info("opening " + files->get(i), true);
StringFile stringFile;
if (!stringFile.load(stream)) {
delete stream;
error("could not parse " + files->get(i));
continue;
}
file = file.replaceFirst("string/en/","");
file = file.replaceFirst(".stf","");
HashTable<String, UnicodeString>* hashTable = stringFile.getStringMap();
HashTableIterator<String, UnicodeString> iterator = hashTable->iterator();
while (iterator.hasNext()) {
String name;
UnicodeString value;
iterator.getNextKeyAndValue(name, value);
String full = "@" + file + ":" + name;
//info("key = " + full + " value = " + value.toString(), true);
ObjectOutputStream* data = new ObjectOutputStream();
value.toBinaryStream(data);
uint64 longKey = (uint64)full.hashCode();
ObjectOutputStream* key = new ObjectOutputStream();
TypeInfo<uint64>::toBinaryStream(&longKey, key);
stringsDatabase->putData(key, data);
++count;
}
}
delete stream;
}
}
delete files;
info("writing to the db " + String::valueOf(count) + " strings", true);
}