Salome HOME
1a09efc3dff3438a122861c2adef421691e44ab3
[modules/visu.git] / src / CONVERTOR / VISU_TypeList.hxx
1 //  VISU OBJECT : interactive object for VISU entities implementation
2 //
3 //  Copyright (C) 2003  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
4 //  CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
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
9 //  version 2.1 of the License.
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, write to the Free Software
18 //  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA
19 //
20 // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
21 //
22 //
23 //  File   : VISU_ColoredPrs3dCache_i.hh
24 //  Author : Oleg UVAROV
25 //  Module : VISU
26
27 #ifndef VISU_TypeList_HeaderFile
28 #define VISU_TypeList_HeaderFile
29
30 namespace VISU
31 {
32   namespace TL
33   {
34     //----------------------------------------------------------------------------
35     template <class T, class U>
36     struct TList
37     {
38       typedef T THead;
39       typedef U TTail;
40     };
41     
42     template <int v>
43     struct TInt2Type
44     {
45       enum { value = v };
46     };
47     
48     struct TNullType {};
49     
50     //----------------------------------------------------------------------------
51     template <class TypeList, unsigned int index> 
52     struct TTypeAt;
53
54     template <class THead, class TTail>
55     struct TTypeAt<TList<THead, TTail>, 0>
56     {
57       typedef THead TResult;
58     };
59
60
61     template <class THead, class TTail, unsigned int index>
62     struct TTypeAt<TList<THead, TTail>, index>
63     {
64       typedef typename TTypeAt<TTail, index - 1>::TResult TResult;
65     };
66
67     //----------------------------------------------------------------------------
68     template <class TypeList, class T> 
69     struct TIndexOf;
70
71     template <class T>
72     struct TIndexOf<TNullType, T>
73     {
74       enum { value = -1 };
75     };
76
77     template <class T, class TTail>
78     struct TIndexOf<TList<T, TTail>, T>
79     {
80       enum { value = 0 };
81     };
82
83     template <class THead, class TTail, class T>
84     struct TIndexOf<TList<THead, TTail>, T>
85     {
86     private:
87       enum { temp = TIndexOf<TTail, T>::value };
88     public:
89       enum { value = temp == -1? -1 : 1 + temp };
90     };
91     
92     //----------------------------------------------------------------------------
93   }
94 }
95
96 #endif