Browse Source

add |= operator

master
Martin Dørum 3 years ago
parent
commit
1b1fa101f6
2 changed files with 33 additions and 1 deletions
  1. 32
    1
      src/BXParser.cc
  2. 1
    0
      src/BXParser.h

+ 32
- 1
src/BXParser.cc View File

@@ -30,6 +30,10 @@ BXParser::Operator BXParser::readOperator() {
skip(); // '='
skip(); // '+'
return Operator::EQUALS_PLUS;
} else if (peek() == '|' && ch2 == '|') {
skip(); // '|'
skip(); // '='
return Operator::BAR_EQUALS;
}

return Operator::NONE;
@@ -225,8 +229,14 @@ bool BXParser::parseString(const BXVariables &vars, std::string &content, int se
break;

default:
if (ch == ':' && peek(2) == '=')
int ch2 = peek(2);
if (
(ch == ':' && ch2 == '=') ||
(ch == '+' && ch2 == '=') ||
(ch == '=' && ch2 == '+') ||
(ch == '|' && ch2 == '=')) {
return success;
}

content.push_back(get());
success = true;
@@ -305,6 +315,27 @@ void BXParser::parse(BXVariables &vars) {
values.clear();
break;

case Operator::BAR_EQUALS:
{
auto &vec = vars[key];
for (size_t i = 0; i < vec.size(); ++i) {
bool exists = false;
for (auto &val: values) {
if (val == vec[i]) {
exists = true;
break;
}
}

if (!exists) {
values.push_back(std::move(vec[i]));
}
}
vec = std::move(values);
}
values.clear();
break;

case Operator::NONE:
break;
}

+ 1
- 0
src/BXParser.h View File

@@ -43,6 +43,7 @@ private:
COLON_EQUALS,
PLUS_EQUALS,
EQUALS_PLUS,
BAR_EQUALS,
NONE,
};


Loading…
Cancel
Save