Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
12 changes: 5 additions & 7 deletions lib/programmemory.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -47,8 +47,10 @@

ExprIdToken::ExprIdToken(const Token* tok) : tok(tok), exprid(tok ? tok->exprId() : 0) {}

ExprIdToken::ExprIdToken(nonneg int exprId) : exprid(exprId) {}

nonneg int ExprIdToken::getExpressionId() const {
return tok ? tok->exprId() : exprid;
return exprid;
}

std::size_t ExprIdToken::Hash::operator()(ExprIdToken etok) const
Expand Down Expand Up @@ -239,16 +241,12 @@ void ProgramMemory::copyOnWrite()
ProgramMemory::Map::const_iterator ProgramMemory::find(nonneg int exprid) const
{
const auto& cvalues = utils::as_const(*mValues);
return std::find_if(cvalues.cbegin(), cvalues.cend(), [&exprid](const Map::value_type& entry) {
return entry.first.getExpressionId() == exprid;
});
return cvalues.find(ExprIdToken::create(exprid));
}

ProgramMemory::Map::iterator ProgramMemory::find(nonneg int exprid)
{
return std::find_if(mValues->begin(), mValues->end(), [&exprid](const Map::value_type& entry) {
return entry.first.getExpressionId() == exprid;
});
return mValues->find(ExprIdToken::create(exprid));
}

static ValueFlow::Value execute(const Token* expr, ProgramMemory& pm, const Settings& settings);
Expand Down
9 changes: 9 additions & 0 deletions lib/programmemory.h
Original file line number Diff line number Diff line change
Expand Up @@ -90,6 +90,15 @@ struct ExprIdToken {
struct Hash {
std::size_t operator()(ExprIdToken etok) const;
};

/** create object for hashed lookups */
static ExprIdToken create(nonneg int exprId) {
return ExprIdToken(exprId);
}

private:
// for hashed lookups only
explicit ExprIdToken(nonneg int exprId);
};

struct CPPCHECKLIB ProgramMemory {
Expand Down