TrinityCore
Loading...
Searching...
No Matches
TypeContainerVisitor.h
Go to the documentation of this file.
1/*
2 * This file is part of the TrinityCore Project. See AUTHORS file for Copyright information
3 *
4 * This program is free software; you can redistribute it and/or modify it
5 * under the terms of the GNU General Public License as published by the
6 * Free Software Foundation; either version 2 of the License, or (at your
7 * option) any later version.
8 *
9 * This program is distributed in the hope that it will be useful, but WITHOUT
10 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
11 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
12 * more details.
13 *
14 * You should have received a copy of the GNU General Public License along
15 * with this program. If not, see <http://www.gnu.org/licenses/>.
16 */
17
18#ifndef TRINITY_TYPECONTAINERVISITOR_H
19#define TRINITY_TYPECONTAINERVISITOR_H
20
21/*
22 * @class TypeContainerVisitor is implemented as a visitor pattern. It is
23 * a visitor to the TypeContainerList or TypeContainerMapList. The visitor has
24 * to overload its types as a visit method is called.
25 */
26
28
29// visitor helper
30template <class Visitor, template <typename> typename UnderlyingContainer, typename... Types>
31inline void VisitorHelper(Visitor& /*v*/, [[maybe_unused]] TypeListContainerStorage<UnderlyingContainer, Types...>& /*c*/)
32{
33}
34
35template <class Visitor, template <typename> typename UnderlyingContainer, typename First, typename... Types>
37{
38 v.Visit(c.Head);
39 VisitorHelper(v, c.Tail);
40}
41
42template <class Visitor, template <typename> typename UnderlyingContainer, typename... Types>
47
48template<class Visitor, class TypeContainer>
50{
51public:
52 TypeContainerVisitor(Visitor& v) : i_visitor(v) { }
53
54 void Visit(TypeContainer& c)
55 {
57 }
58
59 void Visit(TypeContainer const& c) const
60 {
62 }
63
64private:
65 Visitor& i_visitor;
66};
67#endif
void VisitorHelper(Visitor &, TypeListContainerStorage< UnderlyingContainer, Types... > &)
void Visit(TypeContainer &c)
void Visit(TypeContainer const &c) const
TypeListContainerStorage< UnderlyingContainer, Types... > Data