File: used_types.h

package info (click to toggle)
meshlab 1.3.2%2Bdfsg1-4
  • links: PTS, VCS
  • area: main
  • in suites: buster
  • size: 21,096 kB
  • ctags: 33,630
  • sloc: cpp: 224,813; ansic: 8,170; xml: 119; makefile: 80
file content (83 lines) | stat: -rwxr-xr-x 2,771 bytes parent folder | download | duplicates (4)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
#ifndef VCG_USED_TYPES_H
#define VCG_USED_TYPES_H

#include <string>
#include <vcg/space/point3.h>
#include <vcg/container/derivation_chain.h>

#include <vcg/simplex/vertex/base.h>
#include <vcg/simplex/face/base.h>
#include <vcg/simplex/edge/base.h>
#include <vcg/connectors/hedge.h>

namespace vcg{

// dummy mesh

struct _Vertex;
struct _Edge  ;
struct _Face  ;
struct _HEdge ;

struct DummyTypes{
		typedef _Vertex VertexType; 		// simplex types
		typedef _Edge EdgeType;
		typedef _Face FaceType;
	 	typedef char TetraType;
		typedef _HEdge HEdgeType; 		// connector types

		typedef vcg::Point3<bool> CoordType; 		 
		typedef char ScalarType;						 

		typedef VertexType * VertexPointer;
		typedef EdgeType *	EdgePointer		;
		typedef FaceType * FacePointer		;
		typedef TetraType * TetraPointer	;
		typedef HEdgeType * HEdgePointer	;

    static void Name(std::vector<std::string> & /*name*/){}
		template < class LeftV>
		void ImportData(const LeftV  & /*left*/ ) {}
};

template <class A>
	struct Use{
		template <class T> struct AsVertexType: public T{typedef A VertexType;	typedef VertexType * VertexPointer	;};
		template <class T> struct AsEdgeType: public T{typedef A EdgeType;			typedef EdgeType *	EdgePointer			;};
		template <class T> struct AsFaceType: public T{typedef A FaceType;			typedef FaceType * FacePointer			;};
		template <class T> struct AsTetraType: public T{typedef A TetraType;		typedef TetraType * TetraPointer		;};
		template <class T> struct AsHEdgeType: public T{typedef A HEdgeType;		typedef HEdgeType * HEdgePointer		;};
};

template <template <typename> class A = DefaultDeriver, template <typename> class B = DefaultDeriver,
					template <typename> class C = DefaultDeriver, template <typename> class D = DefaultDeriver,
					template <typename> class E = DefaultDeriver, template <typename> class F = DefaultDeriver,
					template <typename> class G = DefaultDeriver, template <typename> class H = DefaultDeriver >
					class UsedTypes: public Arity12<DummyTypes, 
								Use<  Vertex	<UsedTypes< A, B, C, D , E, F, G, H > > > :: template AsVertexType,
								Use<  Edge		<UsedTypes< A, B, C, D , E, F, G, H > > > :: template AsEdgeType,
								Use<  Face		<UsedTypes< A, B, C, D , E, F, G, H > > > :: template AsFaceType,
								Use<  HEdge	  <UsedTypes< A, B, C, D , E, F, G, H > > > :: template AsHEdgeType,
							A, B, C, D, E, F, G, H    
					>  {
};




	
struct _UsedTypes: public UsedTypes< 
	Use<_Vertex>::AsVertexType,
	Use<_Edge  >::AsEdgeType,
	Use<_Face  >::AsFaceType,
	Use<_HEdge >::AsHEdgeType
>{};

struct _Vertex: public  Vertex<_UsedTypes>{};
struct _Edge  : public  Edge<_UsedTypes>{};
struct _Face  : public  Face<_UsedTypes>{};
struct _HEdge : public  HEdge<_UsedTypes>{};

};

#endif // USED_TYPES_H