本文整理汇总了C++中InfoMap类的典型用法代码示例。如果您正苦于以下问题:C++ InfoMap类的具体用法?C++ InfoMap怎么用?C++ InfoMap使用的例子?那么, 这里精选的类代码示例或许可以为您提供帮助。
在下文中一共展示了InfoMap类的15个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: DeserializeMetadata
static void DeserializeMetadata(const std::string& document, CAddonBuilder& builder)
{
CVariant variant = CJSONVariantParser::Parse(document);
builder.SetAuthor(variant["author"].asString());
builder.SetDisclaimer(variant["disclaimer"].asString());
builder.SetBroken(variant["broken"].asString());
builder.SetPackageSize(variant["size"].asUnsignedInteger());
builder.SetPath(variant["path"].asString());
builder.SetFanart(variant["fanart"].asString());
builder.SetIcon(variant["icon"].asString());
std::vector<std::string> screenshots;
for (auto it = variant["screenshots"].begin_array(); it != variant["screenshots"].end_array(); ++it)
screenshots.push_back(it->asString());
builder.SetScreenshots(std::move(screenshots));
builder.SetType(TranslateType(variant["extensions"][0].asString()));
ADDONDEPS deps;
for (auto it = variant["dependencies"].begin_array(); it != variant["dependencies"].end_array(); ++it)
{
AddonVersion version((*it)["version"].asString());
deps.emplace((*it)["addonId"].asString(), std::make_pair(std::move(version), (*it)["optional"].asBoolean()));
}
builder.SetDependencies(std::move(deps));
InfoMap extraInfo;
for (auto it = variant["extrainfo"].begin_array(); it != variant["extrainfo"].end_array(); ++it)
extraInfo.emplace((*it)["key"].asString(), (*it)["value"].asString());
builder.SetExtrainfo(std::move(extraInfo));
}
示例2: toString
inline static QString toString(const InfoMap &infoMap, const QString sep="\n")
{
QString str("");
InfoMap::const_iterator it = infoMap.begin();
for (; it != infoMap.end() ; ++it)
str += QString("[%1]:%2%3").arg(it.key()).arg(*it).arg(sep);
return str;
}
示例3: SetTextFromMap
void MythGenericTree::SetTextFromMap(const InfoMap &infoMap,
const QString &state)
{
InfoMap::const_iterator map_it = infoMap.begin();
while (map_it != infoMap.end())
{
TextProperties textprop;
textprop.text = (*map_it);
textprop.state = state;
m_strings[map_it.key()] = textprop;
++map_it;
}
}
示例4:
mitk::PropertyPersistence::InfoMap mitk::PropertyPersistence::SelectInfo(const InfoMap &infoMap,
const SelectFunctionType &selectFunction)
{
InfoMap result;
for (auto pos : infoMap)
{
if (selectFunction(pos))
{
result.insert(pos);
}
}
return result;
};
示例5: infoPredicate
mitk::PropertyPersistence::InfoResultType mitk::PropertyPersistence::GetInfo(const std::string &propertyName,
const MimeTypeNameType &mime,
bool allowMimeWildCard,
bool allowNameRegEx) const
{
SelectFunctionType select = [propertyName, mime](const InfoMap::value_type &x) {
return infoPredicate(x, propertyName, mime);
};
InfoMap selection = SelectInfo(m_InfoMap, select);
if (allowNameRegEx)
{
select = [propertyName, mime](const InfoMap::value_type &x) { return infoPredicateRegEx(x, propertyName, mime); };
InfoMap regExSelection = SelectInfo(m_InfoMap, select);
selection.insert(regExSelection.begin(), regExSelection.end());
}
if (selection.empty() && allowMimeWildCard)
{ // no perfect match => second run through with "any mime type"
select = [propertyName](const InfoMap::value_type &x) {
return infoPredicate(x, propertyName, PropertyPersistenceInfo::ANY_MIMETYPE_NAME());
};
selection = SelectInfo(m_InfoMap, select);
if (allowNameRegEx)
{
select = [propertyName](const InfoMap::value_type &x) {
return infoPredicateRegEx(x, propertyName, PropertyPersistenceInfo::ANY_MIMETYPE_NAME());
};
InfoMap regExSelection = SelectInfo(m_InfoMap, select);
selection.insert(regExSelection.begin(), regExSelection.end());
}
}
InfoResultType result;
for (const auto &pos : selection)
{
result.push_back(pos.second->UnRegExByName(propertyName).GetPointer());
}
return result;
}
示例6: combine
Distribution combine(Distribution const& c, InfoMap const& info)
{
std::map<Cell, Value> tmp;
for (size_t i = 0; i < c.size(); ++i)
{
Distribution const& w = info.at(c.at(i).first)->weights;
Value const f = c.at(i).second;
for (size_t j = 0; j < w.size(); ++j)
{
Cell const v = w.at(j).first;
if (tmp.count(v) == 0)
tmp[v] = 0;
tmp[v] += f * w.at(j).second;
}
}
Distribution result(tmp.size());
std::map<Cell, Value>::const_iterator iter = tmp.begin();
for (size_t i = 0; i < tmp.size(); ++i, ++iter)
result[i] = std::make_pair(iter->first, iter->second);
return result;
}
示例7: GetPlayingInfoMap
bool PlayerContext::GetPlayingInfoMap(InfoMap &infoMap) const
{
bool loaded = false;
LockPlayingInfo(__FILE__, __LINE__);
if (playingInfo)
{
playingInfo->ToMap(infoMap);
infoMap["tvstate"] = StateToString(playingState);
infoMap["iconpath"] = ChannelUtil::GetIcon(playingInfo->GetChanID());
if ((playingInfo->IsVideoFile() || playingInfo->IsVideoDVD() ||
playingInfo->IsVideoBD()) && playingInfo->GetPathname() !=
playingInfo->GetBasename())
{
infoMap["coverartpath"] = VideoMetaDataUtil::GetArtPath(
playingInfo->GetPathname(), "Coverart");
infoMap["fanartpath"] = VideoMetaDataUtil::GetArtPath(
playingInfo->GetPathname(), "Fanart");
infoMap["bannerpath"] = VideoMetaDataUtil::GetArtPath(
playingInfo->GetPathname(), "Banners");
infoMap["screenshotpath"] = VideoMetaDataUtil::GetArtPath(
playingInfo->GetPathname(), "Screenshots");
}
if (player)
player->GetCodecDescription(infoMap);
infoMap.detach();
loaded = true;
}
UnlockPlayingInfo(__FILE__, __LINE__);
return loaded;
}
示例8: SetText
void ChannelEditor::SetText(const InfoMap &map)
{
if (map.contains("callsign"))
m_callsignEdit->SetText(map.value("callsign"));
if (map.contains("channum"))
m_channumEdit->SetText(map.value("channum"));
if (map.contains("channame"))
m_channameEdit->SetText(map.value("channame"));
if (map.contains("XMLTV"))
m_xmltvidEdit->SetText(map.value("XMLTV"));
}
示例9: updateUserInfo
inline
int UserInfoCache::updateUserInfo(int userId, UserInfo *userInfo)
{
int ret = 1;
//..
// Although we intend to update the information, we first acquire a *read*
// *lock* to locate the item. This allows other threads to read the list while
// we find the item. If we do not locate the item we can simply release the
// *read* *lock* and return an error without causing any other *reading* thread
// to block. (Again, other writers *will* block until this *read* *lock* is
// released.)
//..
d_lock.lockRead();
InfoMap::iterator it = d_infoMap.find(userId);
if (d_infoMap.end() != it) {
//..
// Since 'it != end()', we found the item. Now we need to upgrade to a *write*
// *lock*. If we can't do this atomically, then we need to locate the item
// again. This is because another thread may have changed 'd_infoMap' during
// the time between our *read* and *write* locks.
//..
if (d_lock.upgradeToWriteLock()) {
it = d_infoMap.find(userId);
}
//..
// This is a little more costly, but since we don't expect many concurrent
// writes, it should not happen often. In the (likely) event that we do
// upgrade to a *write* *lock* atomically, then the second lookup above is not
// performed. In any case, we can now update the information and release the
// lock, since we already have a pointer to the item and we know that the list
// could not have been changed by anyone else.
//..
if (d_infoMap.end() != it) {
it->second = *userInfo;
ret = 0;
}
d_lock.unlock();
}
else {
d_lock.unlock();
}
return ret;
}
示例10: DeserializeMetadata
static void DeserializeMetadata(const std::string& document, CAddonBuilder& builder)
{
CVariant variant;
if (!CJSONVariantParser::Parse(document, variant))
return;
builder.SetAuthor(variant["author"].asString());
builder.SetDisclaimer(variant["disclaimer"].asString());
builder.SetBroken(variant["broken"].asString());
builder.SetPackageSize(variant["size"].asUnsignedInteger());
builder.SetPath(variant["path"].asString());
builder.SetIcon(variant["icon"].asString());
std::map<std::string, std::string> art;
for (auto it = variant["art"].begin_map(); it != variant["art"].end_map(); ++it)
art.emplace(it->first, it->second.asString());
builder.SetArt(std::move(art));
std::vector<std::string> screenshots;
for (auto it = variant["screenshots"].begin_array(); it != variant["screenshots"].end_array(); ++it)
screenshots.push_back(it->asString());
builder.SetScreenshots(std::move(screenshots));
builder.SetType(CAddonInfo::TranslateType(variant["extensions"][0].asString()));
{
std::vector<DependencyInfo> deps;
for (auto it = variant["dependencies"].begin_array(); it != variant["dependencies"].end_array(); ++it)
{
deps.emplace_back(
(*it)["addonId"].asString(),
AddonVersion((*it)["version"].asString()),
(*it)["optional"].asBoolean());
}
builder.SetDependencies(std::move(deps));
}
InfoMap extraInfo;
for (auto it = variant["extrainfo"].begin_array(); it != variant["extrainfo"].end_array(); ++it)
extraInfo.emplace((*it)["key"].asString(), (*it)["value"].asString());
builder.SetExtrainfo(std::move(extraInfo));
}
示例11: getUserInfo
inline
int UserInfoCache::getUserInfo(int userId, UserInfo *userInfo)
{
int ret = 1;
//..
// Getting the user info does not require any write access. We do, however,
// need read access to 'd_infoMap', which is controlled by 'd_lock'. (Note
// that writers *will* block until this *read* *lock* is released, but
// concurrent reads are allowed.) The user info is copied into the
// caller-owned location 'userInfo'.
//..
d_lock.lockRead();
InfoMap::iterator it = d_infoMap.find(userId);
if (d_infoMap.end() != it) {
*userInfo = it->second;
ret = 0;
}
d_lock.unlock();
return ret;
}
示例12: ResetMap
void MythUIText::ResetMap(const InfoMap &map)
{
QString newText = GetTemplateText();
if (newText.isEmpty())
newText = GetDefaultText();
QRegExp regexp("%(([^\\|%]+)?\\||\\|(.))?([\\w#]+)(\\|(.+))?%");
regexp.setMinimal(true);
bool replaced = map.contains(objectName());
if (!replaced && !newText.isEmpty() && newText.contains(regexp))
{
int pos = 0;
QString translatedTemplate = qApp->translate("ThemeUI",
newText.toUtf8());
while ((pos = regexp.indexIn(translatedTemplate, pos)) != -1)
{
QString key = regexp.cap(4).toLower().trimmed();
if (map.contains(key))
{
replaced = true;
break;
}
pos += regexp.matchedLength();
}
}
if (replaced)
{
Reset();
}
}
示例13: SetTextFromMap
void MythUIText::SetTextFromMap(const InfoMap &map)
{
QString newText = GetTemplateText();
if (newText.isEmpty())
newText = GetDefaultText();
QRegExp regexp("%(([^\\|%]+)?\\||\\|(.))?([\\w#]+)(\\|(.+))?%");
regexp.setMinimal(true);
if (!newText.isEmpty() && newText.contains(regexp))
{
int pos = 0;
QString translatedTemplate = qApp->translate("ThemeUI",
newText.toUtf8());
QString tempString = translatedTemplate;
bool replaced = map.contains(objectName());
while ((pos = regexp.indexIn(translatedTemplate, pos)) != -1)
{
QString key = regexp.cap(4).toLower().trimmed();
QString replacement;
if (map.contains(key))
{
replaced = true;
}
if (!map.value(key).isEmpty())
{
replacement = QString("%1%2%3%4")
.arg(regexp.cap(2))
.arg(regexp.cap(3))
.arg(map.value(key))
.arg(regexp.cap(6));
}
tempString.replace(regexp.cap(0), replacement);
pos += regexp.matchedLength();
}
if (replaced)
{
SetText(tempString);
}
}
else if (map.contains(objectName()))
{
SetText(map.value(objectName()));
}
}
示例14: LOG
bool UPNPSubscription::ProcessRequest(HTTPRequest *pRequest)
{
if (!pRequest)
return false;
if (pRequest->m_sBaseUrl != "/Subscriptions")
return false;
if (pRequest->m_sMethod != "event")
return false;
LOG(VB_UPNP, LOG_DEBUG, LOC + QString("%1\n%2")
.arg(pRequest->m_sRawRequest).arg(pRequest->m_sPayload));
if (pRequest->m_sPayload.isEmpty())
return true;
pRequest->m_eResponseType = ResponseTypeHTML;
QString nt = pRequest->m_mapHeaders["nt"];
QString nts = pRequest->m_mapHeaders["nts"];
bool no = (pRequest->m_eType == RequestTypeNotify);
if (nt.isEmpty() || nts.isEmpty() || !no)
{
pRequest->m_nResponseStatus = 400;
return true;
}
pRequest->m_nResponseStatus = 412;
if (nt != "upnp:event" || nts != "upnp:propchange")
return true;
QString usn = pRequest->m_mapParams["usn"];
QString sid = pRequest->m_mapHeaders["sid"];
if (usn.isEmpty() || sid.isEmpty())
return true;
// N.B. Validating the usn and uuid here might mean blocking for some time
// while waiting for a subscription to complete. While this operates in a
// worker thread, worker threads are a limited resource which we could
// rapidly overload if a number of events arrive. Instead let the
// subscribing objects validate the usn - the uuid should be superfluous.
QString seq = pRequest->m_mapHeaders["seq"];
// mediatomb sends some extra character(s) at the end of the payload
// which throw Qt, so try and trim them off
int loc = pRequest->m_sPayload.lastIndexOf("propertyset>");
QString payload = (loc > -1) ? pRequest->m_sPayload.left(loc + 12) :
pRequest->m_sPayload;
LOG(VB_UPNP, LOG_DEBUG, LOC + QString("Payload:\n%1").arg(payload));
pRequest->m_nResponseStatus = 400;
QDomDocument body;
QString error;
int errorCol = 0;
int errorLine = 0;
if (!body.setContent(payload, true, &error, &errorLine, &errorCol))
{
LOG(VB_GENERAL, LOG_ERR, LOC +
QString("Failed to parse event: Line: %1 Col: %2 Error: '%3'")
.arg(errorLine).arg(errorCol).arg(error));
return true;
}
LOG(VB_UPNP, LOG_DEBUG, LOC + "/n/n" + body.toString(4) + "/n/n");
QDomNodeList properties = body.elementsByTagName("property");
InfoMap results;
// this deals with both one argument per property (compliant) and mutliple
// arguments per property as sent by mediatomb
for (int i = 0; i < properties.size(); i++)
{
QDomNodeList arguments = properties.at(i).childNodes();
for (int j = 0; j < arguments.size(); j++)
{
QDomElement e = arguments.at(j).toElement();
if (!e.isNull() && !e.text().isEmpty() && !e.tagName().isEmpty())
results.insert(e.tagName(), e.text());
}
}
// using MythObservable allows multiple objects to subscribe to the same
// service but is less efficient from an eventing perspective, especially
// if multiple objects are subscribing
if (!results.isEmpty())
{
pRequest->m_nResponseStatus = 200;
results.insert("usn", usn);
results.insert("seq", seq);
MythInfoMapEvent me("UPNP_EVENT", results);
dispatch(me);
}
return true;
}
示例15: PrepareSQL
bool CAddonDatabase::GetRepositoryContent(const std::string& repoId, VECADDONS& addons)
{
try
{
if (NULL == m_pDB.get()) return false;
if (NULL == m_pDS.get()) return false;
auto start = XbmcThreads::SystemClockMillis();
std::string commonConstraint = PrepareSQL(
"JOIN addonlinkrepo ON addon.id=addonlinkrepo.idAddon "
"JOIN repo ON addonlinkrepo.idRepo=repo.id "
"WHERE repo.checksum IS NOT NULL AND repo.checksum != ''");
if (!repoId.empty())
commonConstraint += PrepareSQL(" AND repo.addonId='%s'", repoId.c_str());
commonConstraint += PrepareSQL(" ORDER BY addon.addonID");
std::vector<CAddonBuilder> result;
// Read basic info from the `addon` table
{
std::string sql = PrepareSQL("SELECT addon.*, broken.reason FROM addon "
"LEFT JOIN broken ON broken.addonID=addon.addonID ") + commonConstraint;
auto start = XbmcThreads::SystemClockMillis();
m_pDS->query(sql);
CLog::Log(LOGDEBUG, "CAddonDatabase: query %s returned %d rows in %d ms", sql.c_str(),
m_pDS->num_rows(), XbmcThreads::SystemClockMillis() - start);
while (!m_pDS->eof())
{
std::string addonId = m_pDS->fv(addon_addonID).get_asString();
AddonVersion version(m_pDS->fv(addon_version).get_asString());
if (!result.empty() && result.back().GetId() == addonId && result.back().GetVersion() >= version)
{
// We already have a version of this addon in our list which is newer.
m_pDS->next();
continue;
}
CAddonBuilder builder;
builder.SetId(addonId);
builder.SetVersion(version);
builder.SetType(TranslateType(m_pDS->fv(addon_type).get_asString()));
builder.SetMinVersion(AddonVersion(m_pDS->fv(addon_minversion).get_asString()));
builder.SetName(m_pDS->fv(addon_name).get_asString());
builder.SetSummary(m_pDS->fv(addon_summary).get_asString());
builder.SetDescription(m_pDS->fv(addon_description).get_asString());
builder.SetChangelog(m_pDS->fv(addon_changelog).get_asString());
builder.SetDisclaimer(m_pDS->fv(addon_disclaimer).get_asString());
builder.SetAuthor(m_pDS->fv(addon_author).get_asString());
builder.SetPath(m_pDS->fv(addon_path).get_asString());
builder.SetIcon(m_pDS->fv(addon_icon).get_asString());
builder.SetFanart(m_pDS->fv(addon_fanart).get_asString());
builder.SetBroken(m_pDS->fv(broken_reason).get_asString());
if (!result.empty() && result.back().GetId() == addonId)
result.back() = std::move(builder);
else
result.push_back(std::move(builder));
m_pDS->next();
}
}
// Read extra info.
{
std::string sql = PrepareSQL(
"SELECT addon.addonID as owner, addonextra.key, addonextra.value "
"FROM addon JOIN addonextra ON addon.id=addonextra.id ") + commonConstraint;
auto start = XbmcThreads::SystemClockMillis();
m_pDS->query(sql);
CLog::Log(LOGDEBUG, "CAddonDatabase: query %s returned %d rows in %d ms", sql.c_str(),
m_pDS->num_rows(), XbmcThreads::SystemClockMillis() - start);
for (auto& builder : result)
{
//move cursor to current or next addon
while (!m_pDS->eof() && m_pDS->fv(0).get_asString() < builder.GetId())
m_pDS->next();
InfoMap extraInfo;
while (!m_pDS->eof() && m_pDS->fv(0).get_asString() == builder.GetId())
{
extraInfo.emplace(m_pDS->fv(1).get_asString(), m_pDS->fv(2).get_asString());
m_pDS->next();
}
builder.SetExtrainfo(std::move(extraInfo));
}
}
// Read dependency info.
{
std::string sql = PrepareSQL(
"SELECT addon.addonID as owner, dependencies.addon, dependencies.version, dependencies.optional "
"FROM addon JOIN dependencies ON addon.id=dependencies.id ") + commonConstraint;
auto start = XbmcThreads::SystemClockMillis();
m_pDS->query(sql);
CLog::Log(LOGDEBUG, "CAddonDatabase: query %s returned %d rows in %d ms", sql.c_str(),
//.........这里部分代码省略.........