ENH: add LIST(CONTAINS ...) patch from "Miguel A. Figueroa-Villanueva, miguelf (AT) ieee.org
added tests for LIST(CONTAINS, SORT, REVERSE) Alex
This commit is contained in:
parent
a5be2b7782
commit
c8010cd7fb
|
@ -42,6 +42,10 @@ bool cmListCommand::InitialPass(std::vector<std::string> const& args)
|
||||||
{
|
{
|
||||||
return this->HandleAppendCommand(args);
|
return this->HandleAppendCommand(args);
|
||||||
}
|
}
|
||||||
|
if(subCommand == "CONTAINS")
|
||||||
|
{
|
||||||
|
return this->HandleContainsCommand(args);
|
||||||
|
}
|
||||||
if(subCommand == "INSERT")
|
if(subCommand == "INSERT")
|
||||||
{
|
{
|
||||||
return this->HandleInsertCommand(args);
|
return this->HandleInsertCommand(args);
|
||||||
|
@ -199,6 +203,39 @@ bool cmListCommand::HandleAppendCommand(std::vector<std::string> const& args)
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//----------------------------------------------------------------------------
|
||||||
|
bool cmListCommand::HandleContainsCommand(std::vector<std::string> const& args)
|
||||||
|
{
|
||||||
|
if(args.size() != 4)
|
||||||
|
{
|
||||||
|
this->SetError("sub-command CONTAINS requires three arguments.");
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
const std::string& listName = args[1];
|
||||||
|
const std::string& variableName = args[args.size() - 1];
|
||||||
|
// expand the variable
|
||||||
|
std::vector<std::string> varArgsExpanded;
|
||||||
|
if ( !this->GetList(varArgsExpanded, listName.c_str()) )
|
||||||
|
{
|
||||||
|
this->Makefile->AddDefinition(variableName.c_str(), "FALSE");
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
std::vector<std::string>::iterator it;
|
||||||
|
for ( it = varArgsExpanded.begin(); it != varArgsExpanded.end(); ++ it )
|
||||||
|
{
|
||||||
|
if ( *it == args[2] )
|
||||||
|
{
|
||||||
|
this->Makefile->AddDefinition(variableName.c_str(), "TRUE");
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
this->Makefile->AddDefinition(variableName.c_str(), "FALSE");
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
//----------------------------------------------------------------------------
|
//----------------------------------------------------------------------------
|
||||||
bool cmListCommand::HandleInsertCommand(std::vector<std::string> const& args)
|
bool cmListCommand::HandleInsertCommand(std::vector<std::string> const& args)
|
||||||
{
|
{
|
||||||
|
|
|
@ -68,20 +68,24 @@ public:
|
||||||
" LIST(GET <list> <element index> [<element index> ...] "
|
" LIST(GET <list> <element index> [<element index> ...] "
|
||||||
"<output variable>)\n"
|
"<output variable>)\n"
|
||||||
" LIST(APPEND <list> <element> [<element> ...])\n"
|
" LIST(APPEND <list> <element> [<element> ...])\n"
|
||||||
|
" LIST(CONTAINS <list> <value> <output variable>)\n"
|
||||||
" LIST(INSERT <list> <element_index> <element> [<element> ...])\n"
|
" LIST(INSERT <list> <element_index> <element> [<element> ...])\n"
|
||||||
" LIST(REMOVE_ITEM <list> <value> [<value> ...])\n"
|
" LIST(REMOVE_ITEM <list> <value> [<value> ...])\n"
|
||||||
" LIST(REMOVE_AT <list> <index> [<index> ...])\n"
|
" LIST(REMOVE_AT <list> <index> [<index> ...])\n"
|
||||||
" LIST(SORT <list>)\n"
|
|
||||||
" LIST(REVERSE <list>)\n"
|
" LIST(REVERSE <list>)\n"
|
||||||
|
" LIST(SORT <list>)\n"
|
||||||
"LENGTH will return a given list's length.\n"
|
"LENGTH will return a given list's length.\n"
|
||||||
"GET will return list of elements specified by indices from the list.\n"
|
"GET will return list of elements specified by indices from the list.\n"
|
||||||
"APPEND will append elements to the list.\n"
|
"APPEND will append elements to the list.\n"
|
||||||
|
"CONTAINS will return TRUE if the element specified is in the list.\n"
|
||||||
"INSERT will insert elements to the list to the specified location.\n"
|
"INSERT will insert elements to the list to the specified location.\n"
|
||||||
"When specifying an index, negative value corresponds to index from the"
|
"When specifying an index, negative value corresponds to index from the"
|
||||||
" end of the list.\n"
|
" end of the list.\n"
|
||||||
"REMOVE_AT and REMOVE_ITEM will remove items from the list. The "
|
"REMOVE_AT and REMOVE_ITEM will remove items from the list. The "
|
||||||
"difference is that REMOVE_ITEM will remove the given items, while "
|
"difference is that REMOVE_ITEM will remove the given items, while "
|
||||||
"REMOVE_AT will remove the items at the given indices.\n"
|
"REMOVE_AT will remove the items at the given indices.\n"
|
||||||
|
"REVERSE reverses the contents of the list in-place.\n"
|
||||||
|
"SORT sorts the list in-place alphabetically.\n"
|
||||||
;
|
;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -90,6 +94,7 @@ protected:
|
||||||
bool HandleLengthCommand(std::vector<std::string> const& args);
|
bool HandleLengthCommand(std::vector<std::string> const& args);
|
||||||
bool HandleGetCommand(std::vector<std::string> const& args);
|
bool HandleGetCommand(std::vector<std::string> const& args);
|
||||||
bool HandleAppendCommand(std::vector<std::string> const& args);
|
bool HandleAppendCommand(std::vector<std::string> const& args);
|
||||||
|
bool HandleContainsCommand(std::vector<std::string> const& args);
|
||||||
bool HandleInsertCommand(std::vector<std::string> const& args);
|
bool HandleInsertCommand(std::vector<std::string> const& args);
|
||||||
bool HandleRemoveAtCommand(std::vector<std::string> const& args);
|
bool HandleRemoveAtCommand(std::vector<std::string> const& args);
|
||||||
bool HandleRemoveItemCommand(std::vector<std::string> const& args);
|
bool HandleRemoveItemCommand(std::vector<std::string> const& args);
|
||||||
|
|
|
@ -66,3 +66,17 @@ TEST("REMOVE_ITEM result bob" "andy;bill;brad;ken")
|
||||||
SET(result andy bill bob brad ken peter)
|
SET(result andy bill bob brad ken peter)
|
||||||
LIST(REMOVE_AT result 2 -1)
|
LIST(REMOVE_AT result 2 -1)
|
||||||
TEST("REMOVE_AT result 2 -1" "andy;bill;brad;ken")
|
TEST("REMOVE_AT result 2 -1" "andy;bill;brad;ken")
|
||||||
|
|
||||||
|
LIST(CONTAINS mylist ken result)
|
||||||
|
TEST("CONTAINS mylist ken result" "TRUE")
|
||||||
|
|
||||||
|
LIST(CONTAINS mylist nobody result)
|
||||||
|
TEST("CONTAINS mylist nobody result" "FALSE")
|
||||||
|
|
||||||
|
SET(result ken bill andy brad)
|
||||||
|
LIST(SORT result)
|
||||||
|
TEST("SORT result" "andy;bill;brad;ken")
|
||||||
|
|
||||||
|
SET(result andy bill brad ken)
|
||||||
|
LIST(REVERSE result)
|
||||||
|
TEST("REVERSE result" "ken;brad;bill;andy")
|
||||||
|
|
Loading…
Reference in New Issue