本文整理汇总了C++中EventType::key方法的典型用法代码示例。如果您正苦于以下问题:C++ EventType::key方法的具体用法?C++ EventType::key怎么用?C++ EventType::key使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类EventType
的用法示例。
在下文中一共展示了EventType::key方法的3个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: addListenerCore
///
/// リスナー追加
bool EventManager::addListenerCore(
const EventHandler& in_listener,
const EventType& in_type
) {
if (!isValidateEventType(in_type)) {
// 無効なイベント
return false;
}
// リスナーマップのエントリを探し、このエントリに対応するテーブルが
// まだ存在しなければエントリを作成
EventListenerMap::iterator elm_it = registry_.find(in_type.key());
if (elm_it == registry_.end()) {
// 未発見なのでエントリを作成
EventListenerMapInsertResult elm_res = registry_.insert(
EventListenerMapEntry(in_type.key(), EventListenerTable())
);
if (elm_res.second == false) {
//挿入失敗
return false;
}
if (elm_res.first == registry_.end()) {
// 空のテーブル
return false;
}
// これでマップリストを更新できるようになる
elm_it = elm_res.first;
}
// リスナーのマップリストを更新する
// 既存のリストをたどりリスナーを二重に追加することを防ぐ
EventListenerTable& table = (*elm_it).second;
for (auto& it : table) {
// 既に同じインスタンスのハンドラが登録されている
T3_ASSERT(it->target() != in_listener->target());
}
// まだ未登録だったので登録する
table.push_back(in_listener);
return true;
}
示例2: getListenerList
///
/// リスナーのリストを取得
EventListenerList EventManager::getListenerList(
const EventType &event_type
) {
if (!isValidateEventType(event_type)) {
// 無効なイベントの場合
// 空のリスナーリストを返す
return EventListenerList();
}
// イベントのリスナーリストを取得
auto map_it = registry_.find(event_type.key());
if (map_it == registry_.end()) {
// このイベント型にはリスナーがいない
// 空のリストを返す
return EventListenerList();
}
const EventListenerTable& table = map_it->second;
if (table.empty()) {
// このイベント型には以前はリスナーがあったが現在は無い
// 空のリストを返す
return EventListenerList();
}
// ※ここまで来るということは、このイベントの
// リスナーのリストは確かに存在する
// リスナーのリストを別インスタンスとして作成して返す
EventListenerList result;
result.reserve(table.size());
auto table_it = table.begin();
auto table_end = table.end();
for (; table_it != table_end; ++table_it) {
// もどす用のリストにリスナーのリスト内容をコピー
result.push_back((*table_it)->target());
}
// もどす
return result;
}
示例3: isValidateEventType
///
/// イベントの有効性を判定
bool EventManager::isValidateEventType(
const EventType& in_type
) {
if (in_type.string().length() == 0) {
return false;
}
if (in_type.key() == 0) {
return false;
}
T3_ASSERT_MSG(
type_list_.find(in_type) == type_list_.end(),
"it was provavly not registerd whit the EventManager."
);
return true;
}