//
// | ----------------------------------------------- --------------------------------
// | Copyright(C)2001 Reuters、-
// | 1400ケンジントンロード、オークブルック、イリノイ州。60523-
// | 全著作権所有。複製または配布は禁止されています-
// | ----------------------------------------------- --------------------------------
//
//
// SubscriptionInfoMap.h:サービス中のサブスクリプションのストレージクラス
//名前とアイテム名のペア
//
#if!defined(SUBSCIPTION_INFO_MAP_INCLUDED_)
#define SUBSCIPTION_INFO_MAP_INCLUDED_
#if _MSC_VER> 1000
#プラグマ1回
#endifの// _MSC_VER> 1000年
#IFNDEF WIN32
#include <cassert>
#undefを_ASSERTE
#define_ASSERTEアサート
#endifの
#include <set>
#include <map>
クラスSubscriptionInfoMap
{{
公衆:
typedef std :: map <std :: string、std :: set <std :: string> *> SUBSCRIPTIONSMAP;
SubscriptionInfoMap();
仮想〜SubscriptionInfoMap();
void addSubscriptionBySubject(const std :: string&subject);
void addSubscriptionByServiceItem(const std :: string&serviceName、const std :: string&itemName);
const std :: set <std :: string> * getSubListByServiceName(const std :: string&serviceName)const ;
bool hasService(const std :: string&serviceName)const ;
民間:
フレンドクラスSubscriptionInfoMapIterator;
SUBSCRIPTIONSMAP _subscriptions;
bool _isSubjectList;
};
クラスSubscriptionInfoMapIterator
{{
公衆:
明示的なSubscriptionInfoMapIterator(const SubscriptionInfoMap&infoMap);
〜SubscriptionInfoMapIterator();
void start();
void forth();
bool off()const ;
const std :: string&getServiceName()const ;
const std :: set <std :: string>&getItemSet()const ;
民間:
const SubscriptionInfoMap&_infoMap;
SubscriptionInfoMap :: SUBSCRIPTIONSMAP :: const_iterator _mapIt;
};
#endifの//!定義された(SUBSCIPTION_INFO_MAP_INCLUDED_)
// SubscriptionInfoMap。cpp:SubscriptionInfoMapクラスの実装。
//
//
#プラグマ警告(無効:4786)
#プラグマ警告(無効:4503)
#include "StdAfx.h"
#include "SubscriptionInfoMap.h"
//
//建設/破壊
//
SubscriptionInfoMap :: SubscriptionInfoMap()
{{
}
SubscriptionInfoMap :: 〜SubscriptionInfoMap()
{{
if(_subscriptions.size())
{{
for(SUBSCRIPTIONSMAP :: iterator it = _subscriptions.begin();
it!= _subscriptions.end();
it = _subscriptions.begin())
{{
std :: set <std :: string> * pItemSet = static_cast <std :: set <std :: string> *>((* it).second);
_subscriptions.erase(it);
pItemSet-> clear();
pItemSetを削除します。
}
}
}
void SubscriptionInfoMap :: addSubscriptionBySubject(const std :: string&subject)
{{
std :: string serviceName;
int pos = subject.find_first_of( "。"、0);
if(pos == std :: string :: npos)
戻る;
そうしないと
serviceName =件名。substr(0、pos);
addSubscriptionByServiceItem(serviceName、subject);
}
void SubscriptionInfoMap :: addSubscriptionByServiceItem(const std :: string&serviceName、const std :: string&itemName)
{{
SUBSCRIPTIONSMAP :: const_iterator it = _subscriptions.find(serviceName);
std :: set <std :: string> * pItemSet = 0;
if(it!= _subscriptions.end())
{{
pItemSet =(* it).second;
pItemSet-> insert(itemName.c_str());
}
そうしないと
{{
pItemSet = new std :: set <std :: string>;
pItemSet-> insert(itemName.c_str());
_subscriptions.insert(SUBSCRIPTIONSMAP :: value_type(serviceName.c_str()、pItemSet));
}
}
const
std :: set <std :: string> * SubscriptionInfoMap :: getSubListByServiceName(const std :: string&serviceName)const
{{
SUBSCRIPTIONSMAP :: const_iterator it = _subscriptions.find(serviceName);
std :: set <std :: string> * pItemSet = 0;
if(it!= _subscriptions.end())
return(* it).second;
そうしないと
0を返します。
}
ブール
SubscriptionInfoMap :: hasService(const std :: string&serviceName)const
{{
SUBSCRIPTIONSMAP :: const_iterator it = _subscriptions.find(serviceName);
それを返す== _ subscriptions.end()?真偽;
}
SubscriptionInfoMapIterator :: SubscriptionInfoMapIterator(const SubscriptionInfoMap&infoMap)
:_infoMap(infoMap)
{{
_mapIt = _infoMap._subscriptions.end();
}
SubscriptionInfoMapIterator :: 〜SubscriptionInfoMapIterator()
{{
}
void SubscriptionInfoMapIterator :: start()
{{
if(!_ infoMap._subscriptions.empty())
_mapIt = _infoMap._subscriptions.begin();
}
void SubscriptionInfoMapIterator :: forth()
{{
_mapIt ++;
}
ブール
SubscriptionInfoMapIterator :: off()const
{{
return(_mapIt == _infoMap._subscriptions.end())?true:false;
}
const
std :: string&SubscriptionInfoMapIterator :: getServiceName()const
{{
return(* _mapIt).first;
}
const
std :: set <std :: string>&SubscriptionInfoMapIterator :: getItemSet()const
{{
*((* _ mapIt).second);を返します。
}