Skip to content

Commit

Permalink
Avoid unnecessary DDLGlobalRegistry calls
Browse files Browse the repository at this point in the history
When parsing the elements of a Vector, we already know which
DDLVector to use (it is 'this').
  • Loading branch information
Dr15Jones committed Jun 15, 2018
1 parent 9654e6a commit fe0332d
Show file tree
Hide file tree
Showing 2 changed files with 11 additions and 42 deletions.
46 changes: 9 additions & 37 deletions DetectorDescription/Parser/src/DDLVector.cc
Expand Up @@ -13,39 +13,9 @@

class DDCompactView;

class VectorMakeDouble
{
public:
void operator() (char const* str, char const* end) const
{
ddlVector_->do_makeDouble(str, end);
}

VectorMakeDouble() {
ddlVector_ = std::static_pointer_cast<DDLVector>(DDLGlobalRegistry::instance().getElement("Vector"));
}
private:
std::shared_ptr<DDLVector> ddlVector_;
};

class VectorMakeString
{
public:
void operator() (char const* str, char const* end) const
{
ddlVector_->do_makeString(str, end);
}

VectorMakeString() {
ddlVector_ = std::static_pointer_cast<DDLVector>(DDLGlobalRegistry::instance().getElement("Vector"));
}
private:
std::shared_ptr<DDLVector> ddlVector_;
};

namespace {
template<typename F>
void parse(char const* str, F& f) {
void parse(char const* str, F&& f) {

auto ptr = str;

Expand Down Expand Up @@ -80,18 +50,20 @@ void parse(char const* str, F& f) {


bool
DDLVector::parse_numbers(char const* str) const
DDLVector::parse_numbers(char const* str)
{
static VectorMakeDouble makeDouble;
parse(str, makeDouble);
parse(str, [this](char const* st, char const* end) {
do_makeDouble(st, end);
});
return true;
}

bool
DDLVector::parse_strings(char const* str) const
DDLVector::parse_strings(char const* str)
{
static VectorMakeString makeString;
parse(str,makeString);
parse(str,[this](char const* st, char const* end) {
do_makeString(st,end);
});
return true;
}

Expand Down
7 changes: 2 additions & 5 deletions DetectorDescription/Parser/src/DDLVector.h
Expand Up @@ -31,9 +31,6 @@ class VectorMakeString;
class DDLVector final : public DDXMLElement
{

friend class VectorMakeDouble;
friend class VectorMakeString;

public:

DDLVector( DDLElementRegistry* myreg );
Expand All @@ -54,8 +51,8 @@ class DDLVector final : public DDXMLElement
void errorOut(const char* str) const;
void do_makeDouble(char const* str, char const* end);
void do_makeString(char const* str, char const* end);
bool parse_numbers(char const* str) const;
bool parse_strings(char const* str) const;
bool parse_numbers(char const* str);
bool parse_strings(char const* str);
};

#endif

0 comments on commit fe0332d

Please sign in to comment.