| 1660 | }; |
| 1661 | |
| 1662 | bool CheckIOImpl::ArgumentInfo::isStdContainer(const Token *tok) |
| 1663 | { |
| 1664 | if (!isCPP) |
| 1665 | return false; |
| 1666 | if (tok && tok->variable()) { |
| 1667 | const Variable* variable = tok->variable(); |
| 1668 | if (variable->isStlType(stl_container)) { |
| 1669 | typeToken = variable->typeStartToken()->tokAt(4); |
| 1670 | return true; |
| 1671 | } |
| 1672 | if (variable->isStlType(stl_string)) { |
| 1673 | typeToken = variable->typeStartToken(); |
| 1674 | return true; |
| 1675 | } |
| 1676 | if (variable->type() && !variable->type()->derivedFrom.empty()) { |
| 1677 | for (const Type::BaseInfo &baseInfo : variable->type()->derivedFrom) { |
| 1678 | const Token* nameTok = baseInfo.nameTok; |
| 1679 | if (Token::Match(nameTok, "std :: vector|array|bitset|deque|list|forward_list|map|multimap|multiset|priority_queue|queue|set|stack|hash_map|hash_multimap|hash_set|unordered_map|unordered_multimap|unordered_set|unordered_multiset <")) { |
| 1680 | typeToken = nameTok->tokAt(4); |
| 1681 | return true; |
| 1682 | } |
| 1683 | if (Token::Match(nameTok, "std :: string|wstring")) { |
| 1684 | typeToken = nameTok; |
| 1685 | return true; |
| 1686 | } |
| 1687 | } |
| 1688 | } |
| 1689 | } |
| 1690 | |
| 1691 | return false; |
| 1692 | } |
| 1693 | |
| 1694 | bool CheckIOImpl::ArgumentInfo::isArrayOrPointer() const |
| 1695 | { |