formatters_data_channels::formatters_data_channels( formatters_factory const &factory, request_impl const &req, response_impl const &resp) : default_formatter_(NULL) { std::map<channel_info, std::string> ch_data = resp.channels_data(); assert(!ch_data.empty()); request request_adapter(req); for (std::map<channel_info, std::string>::iterator it = ch_data.begin(), end = ch_data.end(); it != end; ++it) { channel_info const &ch_info = it->first; assert(!ch_info.empty()); std::string const &fmt_id = it->second; if (fmt_id.empty()) { channels_data_[ch_info] = channel_data(ch_info.data(), NULL); continue; } std::map<std::string, formatter*>::const_iterator fmt_it = formatters_.find(fmt_id); if (formatters_.end() != fmt_it) { channels_data_[ch_info] = channel_data(ch_info.data(), fmt_it->second); } else { std::auto_ptr<formatter> fmt_ptr = factory.find(fmt_id, request_adapter); channels_data_[ch_info] = channel_data(ch_info.data(), fmt_ptr.get()); formatters_.insert(std::make_pair(fmt_id, fmt_ptr.get())); fmt_ptr.release(); } } std::string const &def_fmt_id = resp.default_formatter_id(); if (!def_fmt_id.empty()) { std::map<std::string, formatter*>::const_iterator it = formatters_.find(def_fmt_id); if (formatters_.end() != it) { default_formatter_ = it->second; } else { std::auto_ptr<formatter> fmt_ptr = factory.find(def_fmt_id, request_adapter); formatters_.insert(make_pair(def_fmt_id, fmt_ptr.get())); default_formatter_ = fmt_ptr.release(); } } }
void eDVBLocalTimeHandler::DVBChannelAdded(eDVBChannel *chan) { if ( chan ) { // eDebug("[eDVBLocalTimerHandler] add channel %p", chan); std::pair<std::map<iDVBChannel*, channel_data>::iterator, bool> tmp = m_knownChannels.insert( std::pair<iDVBChannel*, channel_data>(chan, channel_data()) ); tmp.first->second.tdt = NULL; tmp.first->second.channel = chan; tmp.first->second.m_prevChannelState = -1; chan->connectStateChange(slot(*this, &eDVBLocalTimeHandler::DVBChannelStateChanged), tmp.first->second.m_stateChangedConn); } }