File: stdIteratorWrapper.h

package info (click to toggle)
ball 1.4.3~beta1-3
  • links: PTS, VCS
  • area: main
  • in suites: stretch
  • size: 318,984 kB
  • sloc: cpp: 346,579; ansic: 4,097; python: 2,664; yacc: 1,778; lex: 1,099; xml: 964; sh: 688; sql: 316; awk: 118; makefile: 108
file content (38 lines) | stat: -rw-r--r-- 1,102 bytes parent folder | download | duplicates (7)
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
#ifndef BALL_CONCEPT_STDITERATORWRAPPER_H
#define BALL_CONCEPT_STDITERATORWRAPPER_H

#define IteratorWrapper(type)\
	template<typename T>\
	class type##IteratorWrapper\
	{\
		public:\
			type##IteratorWrapper(T* c) : container_(c) {}\
			type##Iterator begin() { return container_->begin##type(); }\
			type##Iterator end() { return container_->end##type(); }\
\
		private:\
			T* container_;\
	};

#define ConstIteratorWrapper(type)\
	template<typename T>\
	class type##ConstIteratorWrapper\
	{\
		public:\
			type##ConstIteratorWrapper(const T* c) : container_(c) {}\
			type##ConstIterator begin() { return container_->begin##type(); }\
			type##ConstIterator end() { return container_->end##type(); }\
\
		private:\
			const T* container_;\
	};

#define BALL_DECLARE_STD_ITERATOR_WRAPPER(container, type, method_name)\
	type##IteratorWrapper< container > method_name () {\
		return type##IteratorWrapper< container >(this);\
	}\
	type##ConstIteratorWrapper< container > method_name () const {\
		return type##ConstIteratorWrapper< container >(this);\
	}

#endif //BALL_CONCEPT_STDITERATORWRAPPER_H