Cutelee 6.1.0
cycle.h
1/*
2 This file is part of the Cutelee template system.
3
4 Copyright (c) 2009,2010 Stephen Kelly <steveire@gmail.com>
5
6 This library is free software; you can redistribute it and/or
7 modify it under the terms of the GNU Lesser General Public
8 License as published by the Free Software Foundation; either version
9 2.1 of the Licence, or (at your option) any later version.
10
11 This library is distributed in the hope that it will be useful,
12 but WITHOUT ANY WARRANTY; without even the implied warranty of
13 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
14 Lesser General Public License for more details.
15
16 You should have received a copy of the GNU Lesser General Public
17 License along with this library. If not, see <http://www.gnu.org/licenses/>.
18
19*/
20
21#ifndef CYCLENODE_H
22#define CYCLENODE_H
23
24#include "node.h"
25
26using namespace Cutelee;
27
29{
30 Q_OBJECT
31public:
33
34 Node *getNode(const QString &tagContent, Parser *p) const override;
35};
36
40template <typename T> class RingIterator
41{
42public:
44
45 RingIterator<T>(const QList<T> &list)
46 : m_begin(list.constBegin()), m_it(list.constBegin()),
47 m_end(list.constEnd())
48 {
49 Q_ASSERT(!list.isEmpty());
50 }
51
56 T next()
57 {
58 Q_ASSERT(m_it != m_end);
59
60 const T t = *m_it++;
61 if (m_it == m_end)
62 m_it = m_begin;
63 return t;
64 }
65
66private:
67 typename QList<T>::const_iterator m_begin;
68 typename QList<T>::const_iterator m_it;
69 typename QList<T>::const_iterator m_end;
70};
71
73
74Q_DECLARE_METATYPE(FilterExpressionRotator)
75
76class CycleNode : public Node
77{
78 Q_OBJECT
79public:
80 CycleNode(const QList<FilterExpression> &list, const QString &name,
81 QObject *parent = {});
82
83 void render(OutputStream *stream, Context *c) const override;
84
85private:
86 const QList<FilterExpression> m_list;
87 FilterExpressionRotator m_variableIterator;
88 const QString m_name;
89};
90
91#endif
Base class for all NodeFactories.
Definition node.h:300
The Context class holds the context to render a Template with.
Definition context.h:119
Base class for all nodes.
Definition node.h:78
The OutputStream class is used to render templates to a QTextStream.
The Parser class processes a string template into a tree of nodes.
Definition parser.h:49
Node * getNode(const QString &tagContent, Parser *p) const override
Definition cycle.cpp:32
T next()
Definition cycle.h:56
The Cutelee namespace holds all public Cutelee API.
Definition Mainpage.dox:8