void stateful_protocol_strategy_wrapper::Parse( const wchar_t* pData, int charCount, ClientInfoPtr pClientInfo) { purge_dead_clients(); std::weak_ptr<ClientInfo> weak(pClientInfo); ProtocolStrategyPtr strategy; auto strategy_iter = strategies_.find(weak); if (strategy_iter == strategies_.end()) { strategy = factory_(); strategies_.insert(std::make_pair(weak, strategy)); } else { strategy = strategy_iter->second; } strategy->Parse(pData, charCount, pClientInfo); }
virtual void parse(const std::basic_string<wchar_t>& data) { auto p = data.c_str(); strategy_->Parse(p, static_cast<int>(data.length()), client_info_); }