Added missing functionality to <container> elements in Librarie, completed STL container definitions in std.cfg
This commit is contained in:
parent
4abc0b7c1f
commit
6590d46013
66
cfg/std.cfg
66
cfg/std.cfg
|
@ -3966,6 +3966,11 @@
|
|||
<function name="clear" action="clear"/>
|
||||
<function name="size" yields="size"/>
|
||||
<function name="empty" yields="empty"/>
|
||||
<function name="erase" action="erase"/>
|
||||
<function name="insert" action="insert"/>
|
||||
<function name="emplace" action="push"/>
|
||||
<function name="swap" action="change"/>
|
||||
<function name="assign" action="change"/>
|
||||
</size>
|
||||
<access>
|
||||
<function name="begin" yields="start-iterator"/>
|
||||
|
@ -3981,8 +3986,10 @@
|
|||
<container id="stdVectorDeque" startPattern="std :: vector|deque <" inherits="stdContainer" opLessAllowed="true">
|
||||
<size>
|
||||
<function name="push_back" action="push"/>
|
||||
<function name="emplace_back" action="push"/>
|
||||
<function name="pop_back" action="pop"/>
|
||||
<function name="push_front" action="push"/>
|
||||
<function name="emplace_front" action="push"/>
|
||||
<function name="pop_front" action="pop"/>
|
||||
</size>
|
||||
<access indexOperator="array-like">
|
||||
|
@ -3990,15 +3997,20 @@
|
|||
<function name="front" yields="item"/>
|
||||
<function name="back" yields="item"/>
|
||||
<function name="data" yields="buffer"/>
|
||||
<function name="shrink_to_fit" action="change-internal"/>
|
||||
<function name="reserve" action="change-internal"/>
|
||||
</access>
|
||||
</container>
|
||||
<container id="stdArray" startPattern="std :: array <" inherits="stdContainer" opLessAllowed="true">
|
||||
<size templateParameter="1"/>
|
||||
<size templateParameter="1">
|
||||
<function name="max_size" yields="size"/>
|
||||
</size>
|
||||
<access indexOperator="array-like">
|
||||
<function name="at" yields="at_index"/>
|
||||
<function name="front" yields="item"/>
|
||||
<function name="back" yields="item"/>
|
||||
<function name="data" yields="buffer"/>
|
||||
<function name="fill" action="change-content"/>
|
||||
</access>
|
||||
</container>
|
||||
<container id="stdBitset" startPattern="std :: bitset <" inherits="stdContainer" itEndPattern="">
|
||||
|
@ -4006,41 +4018,78 @@
|
|||
<access indexOperator="array-like" />
|
||||
</container>
|
||||
<container id="stdQueue" startPattern="std :: queue|priority_queue <" inherits="stdContainer">
|
||||
<access>
|
||||
<function name="push" action="push"/>
|
||||
<function name="pop" action="pop"/>
|
||||
<function name="front" yields="item"/>
|
||||
<function name="back" yields="item"/>
|
||||
</access>
|
||||
</container>
|
||||
<container id="stdStack" startPattern="std :: stack <" inherits="stdContainer">
|
||||
<access>
|
||||
<function name="push" action="push"/>
|
||||
<function name="pop" action="pop"/>
|
||||
<function name="top" yields="item"/>
|
||||
</access>
|
||||
</container>
|
||||
<container id="stdSet" startPattern="std :: set|unoredered_set|multiset|unoredered_multiset <" inherits="stdContainer">
|
||||
<access>
|
||||
<function name="find" action="find"/>
|
||||
<function name="find" action="find" yields="iterator"/>
|
||||
<function name="count" action="find"/>
|
||||
<function name="emplace_hint" action="push"/>
|
||||
<function name="rehash" action="change-internal"/>
|
||||
<function name="lower_bound" yields="iterator"/>
|
||||
<function name="upper_bound" yields="iterator"/>
|
||||
</access>
|
||||
</container>
|
||||
<container id="stdMap" startPattern="std :: map|unordered_map|multimap|unordered_multimap <" inherits="stdContainer">
|
||||
<type templateParameter="1"/>
|
||||
<access>
|
||||
<function name="at" yields="at_index"/>
|
||||
<function name="find" action="find"/>
|
||||
<function name="count" action="find"/>
|
||||
<function name="find" action="find" yields="iterator"/>
|
||||
<function name="emplace_hint" action="push"/>
|
||||
<function name="rehash" action="change-internal"/>
|
||||
<function name="lower_bound" yields="iterator"/>
|
||||
<function name="upper_bound" yields="iterator"/>
|
||||
</access>
|
||||
</container>
|
||||
<container id="stdList" startPattern="std :: list|forward_list <" inherits="stdContainer">
|
||||
<size>
|
||||
<function name="push_back" action="push"/>
|
||||
<function name="emplace_back" action="push"/>
|
||||
<function name="emplace_after" action="push"/>
|
||||
<function name="pop_back" action="pop"/>
|
||||
<function name="push_front" action="push"/>
|
||||
<function name="emplace_front" action="push"/>
|
||||
<function name="pop_front" action="pop"/>
|
||||
<function name="erase_after" action="erase"/>
|
||||
<function name="insert_after" action="insert"/>
|
||||
<function name="remove" action="change"/>
|
||||
<function name="remove_if" action="change"/>
|
||||
<function name="unique" action="change"/>
|
||||
<function name="merge" action="change"/>
|
||||
<function name="splice" action="change"/>
|
||||
<function name="splice_after" action="change"/>
|
||||
</size>
|
||||
<access>
|
||||
<function name="front" yields="item"/>
|
||||
<function name="back" yields="item"/>
|
||||
<function name="before_begin" yields="iterator"/>
|
||||
<function name="cbefore_begin" yields="iterator"/>
|
||||
<function name="reverse" action="change-content"/>
|
||||
<function name="sort" action="change-content"/>
|
||||
</access>
|
||||
</container>
|
||||
<container id="stdComplex" startPattern="std :: complex <" endPattern="> !!::">
|
||||
<type templateParameter="1"/>
|
||||
</container>
|
||||
<container id="stdAllString" inherits="stdContainer" opLessAllowed="true">
|
||||
<type string="std-like"/>
|
||||
<size>
|
||||
<function name="push_back" action="push"/>
|
||||
<function name="pop_back" action="pop"/>
|
||||
<function name="append" action="change"/>
|
||||
<function name="replace" action="change"/>
|
||||
<function name="reserve" action="change-internal"/>
|
||||
<function name="shrink_to_fit" action="change-internal"/>
|
||||
</size>
|
||||
<access indexOperator="array-like">
|
||||
<function name="at" yields="at_index"/>
|
||||
|
@ -4050,6 +4099,11 @@
|
|||
<function name="c_str" yields="buffer-nt"/>
|
||||
<function name="length" yields="size"/>
|
||||
<function name="find" action="find"/>
|
||||
<function name="rfind" action="find"/>
|
||||
<function name="find_last_of" action="find"/>
|
||||
<function name="find_last_not_of" action="find"/>
|
||||
<function name="find_first_of" action="find"/>
|
||||
<function name="find_first_not_of" action="find"/>
|
||||
</access>
|
||||
</container>
|
||||
<container id="stdBasicString" startPattern="std :: basic_string <" inherits="stdAllString">
|
||||
|
|
|
@ -86,7 +86,7 @@ void CheckStl::iterators()
|
|||
continue;
|
||||
|
||||
Library::Container::Yield yield = container->getYield(containertok->strAt(2));
|
||||
if (yield != Library::Container::END_ITERATOR && yield != Library::Container::START_ITERATOR)
|
||||
if (yield != Library::Container::END_ITERATOR && yield != Library::Container::START_ITERATOR && yield != Library::Container::ITERATOR)
|
||||
continue;
|
||||
} else
|
||||
continue;
|
||||
|
@ -693,7 +693,7 @@ void CheckStl::if_find()
|
|||
if (if_findCompare(funcTok->next()))
|
||||
continue;
|
||||
|
||||
if (printWarning && !container->stdStringLike)
|
||||
if (printWarning && container->getYield(funcTok->str()) == Library::Container::ITERATOR)
|
||||
if_findError(tok, false);
|
||||
else if (printPerformance && container->stdStringLike)
|
||||
if_findError(tok, true);
|
||||
|
@ -1405,13 +1405,14 @@ void CheckStl::readingEmptyStlContainer_parseUsage(const Token* tok, const Libra
|
|||
const Token* parent = tok->tokAt(3)->astParent();
|
||||
// Member function call
|
||||
if (yield != Library::Container::NO_YIELD &&
|
||||
((yield != Library::Container::START_ITERATOR &&
|
||||
((yield != Library::Container::ITERATOR &&
|
||||
yield != Library::Container::START_ITERATOR &&
|
||||
yield != Library::Container::END_ITERATOR) || !parent || Token::Match(parent, "%cop%|=|*"))) { // These functions read from the container
|
||||
if (!noerror)
|
||||
readingEmptyStlContainerError(tok);
|
||||
} else {
|
||||
Library::Container::Action action = container->getAction(tok->strAt(2));
|
||||
if (action == Library::Container::FIND) {
|
||||
if (action == Library::Container::FIND || action == Library::Container::ERASE || action == Library::Container::POP || action == Library::Container::CLEAR) {
|
||||
if (!noerror)
|
||||
readingEmptyStlContainerError(tok);
|
||||
} else
|
||||
|
|
|
@ -356,6 +356,16 @@ Library::Error Library::load(const tinyxml2::XMLDocument &doc)
|
|||
action = Container::POP;
|
||||
else if (actionName == "find")
|
||||
action = Container::FIND;
|
||||
else if (actionName == "insert")
|
||||
action = Container::INSERT;
|
||||
else if (actionName == "erase")
|
||||
action = Container::ERASE;
|
||||
else if (actionName == "change-content")
|
||||
action = Container::CHANGE_CONTENT;
|
||||
else if (actionName == "change-internal")
|
||||
action = Container::CHANGE_INTERNAL;
|
||||
else if (actionName == "change")
|
||||
action = Container::CHANGE;
|
||||
else
|
||||
return Error(BAD_ATTRIBUTE_VALUE, actionName);
|
||||
}
|
||||
|
@ -376,6 +386,8 @@ Library::Error Library::load(const tinyxml2::XMLDocument &doc)
|
|||
yield = Container::START_ITERATOR;
|
||||
else if (yieldName == "end-iterator")
|
||||
yield = Container::END_ITERATOR;
|
||||
else if (yieldName == "iterator")
|
||||
yield = Container::ITERATOR;
|
||||
else if (yieldName == "size")
|
||||
yield = Container::SIZE;
|
||||
else if (yieldName == "empty")
|
||||
|
|
|
@ -142,11 +142,11 @@ public:
|
|||
}
|
||||
|
||||
enum Action {
|
||||
RESIZE, CLEAR, PUSH, POP, FIND,
|
||||
RESIZE, CLEAR, PUSH, POP, FIND, INSERT, ERASE, CHANGE_CONTENT, CHANGE, CHANGE_INTERNAL,
|
||||
NO_ACTION
|
||||
};
|
||||
enum Yield {
|
||||
AT_INDEX, ITEM, BUFFER, BUFFER_NT, START_ITERATOR, END_ITERATOR, SIZE, EMPTY,
|
||||
AT_INDEX, ITEM, BUFFER, BUFFER_NT, START_ITERATOR, END_ITERATOR, ITERATOR, SIZE, EMPTY,
|
||||
NO_YIELD
|
||||
};
|
||||
struct Function {
|
||||
|
|
Loading…
Reference in New Issue