1 /****************************************************************************
2 **
3 ** Copyright (C) 2016 The Qt Company Ltd.
4 ** Contact: https://www.qt.io/licensing/
5 **
6 ** This file is part of the test suite of Qt for Python.
7 **
8 ** $QT_BEGIN_LICENSE:GPL-EXCEPT$
9 ** Commercial License Usage
10 ** Licensees holding valid commercial Qt licenses may use this file in
11 ** accordance with the commercial license agreement provided with the
12 ** Software or, alternatively, in accordance with the terms contained in
13 ** a written agreement between you and The Qt Company. For licensing terms
14 ** and conditions see https://www.qt.io/terms-conditions. For further
15 ** information use the contact form at https://www.qt.io/contact-us.
16 **
17 ** GNU General Public License Usage
18 ** Alternatively, this file may be used under the terms of the GNU
19 ** General Public License version 3 as published by the Free Software
20 ** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
21 ** included in the packaging of this file. Please review the following
22 ** information to ensure the GNU General Public License requirements will
23 ** be met: https://www.gnu.org/licenses/gpl-3.0.html.
24 **
25 ** $QT_END_LICENSE$
26 **
27 ****************************************************************************/
28 
29 #ifndef LIST_H
30 #define LIST_H
31 
32 #include <list>
33 #include "libsamplemacros.h"
34 #include "point.h"
35 
36 class ObjectType;
37 
38 template<class T>
39 class List : public std::list<T>
40 {
41 };
42 
43 class IntList : public List<int>
44 {
45 public:
46     enum CtorEnum {
47         NoParamsCtor,
48         IntCtor,
49         CopyCtor,
50         ListOfIntCtor
51     };
52 
IntList()53     inline IntList() : m_ctorUsed(NoParamsCtor) {}
IntList(int val)54     inline explicit IntList(int val) : m_ctorUsed(IntCtor) { push_back(val); }
IntList(const IntList & lst)55     inline IntList(const IntList& lst) : List<int>(lst), m_ctorUsed(CopyCtor) {}
IntList(const List<int> & lst)56     inline IntList(const List<int>& lst) : List<int>(lst), m_ctorUsed(ListOfIntCtor) {}
57 
append(int v)58     inline void append(int v) { insert(end(), v); }
constructorUsed()59     CtorEnum constructorUsed() { return m_ctorUsed; }
60 private:
61     CtorEnum m_ctorUsed;
62 };
63 
64 class PointValueList : public List<Point>
65 {
66 public:
67     enum CtorEnum {
68         NoParamsCtor,
69         PointCtor,
70         CopyCtor,
71         ListOfPointValuesCtor
72     };
73 
PointValueList()74     inline PointValueList() : m_ctorUsed(NoParamsCtor) {}
PointValueList(Point val)75     inline explicit PointValueList(Point val) : m_ctorUsed(PointCtor) { push_back(val); }
PointValueList(const PointValueList & lst)76     inline PointValueList(const PointValueList& lst) : List<Point>(lst), m_ctorUsed(CopyCtor) {}
PointValueList(const List<Point> & lst)77     inline PointValueList(const List<Point>& lst) : List<Point>(lst), m_ctorUsed(ListOfPointValuesCtor) {}
78 
append(Point v)79     inline void append(Point v) { insert(end(), v); }
constructorUsed()80     CtorEnum constructorUsed() { return m_ctorUsed; }
81 private:
82     CtorEnum m_ctorUsed;
83 };
84 
85 class ObjectTypePtrList : public List<ObjectType*>
86 {
87 public:
88     enum CtorEnum {
89         NoParamsCtor,
90         ObjectTypeCtor,
91         CopyCtor,
92         ListOfObjectTypePtrCtor
93     };
94 
ObjectTypePtrList()95     inline ObjectTypePtrList() : m_ctorUsed(NoParamsCtor) {}
ObjectTypePtrList(ObjectType * val)96     inline explicit ObjectTypePtrList(ObjectType* val) : m_ctorUsed(ObjectTypeCtor) { push_back(val); }
ObjectTypePtrList(const ObjectTypePtrList & lst)97     inline ObjectTypePtrList(const ObjectTypePtrList& lst) : List<ObjectType*>(lst), m_ctorUsed(CopyCtor) {}
ObjectTypePtrList(const List<ObjectType * > & lst)98     inline ObjectTypePtrList(const List<ObjectType*>& lst) : List<ObjectType*>(lst), m_ctorUsed(ListOfObjectTypePtrCtor) {}
99 
append(ObjectType * v)100     inline void append(ObjectType* v) { insert(end(), v); }
constructorUsed()101     CtorEnum constructorUsed() { return m_ctorUsed; }
102 private:
103     CtorEnum m_ctorUsed;
104 };
105 
106 #endif // LIST_H
107