Blender  V3.3
BaseIterator.h
Go to the documentation of this file.
1 /* SPDX-License-Identifier: GPL-2.0-or-later */
2 
3 #pragma once
4 
10 #include <iterator>
11 
12 #ifdef WITH_CXX_GUARDEDALLOC
13 # include "MEM_guardedalloc.h"
14 #endif
15 
16 namespace Freestyle {
17 
18 // use for iterators definitions
19 template<class Element> class Nonconst_traits;
20 
21 template<class Element> class Const_traits {
22  public:
23  typedef Element value_type;
24  typedef const Element &reference;
25  typedef const Element *pointer;
26  typedef ptrdiff_t difference_type;
28 
29 #ifdef WITH_CXX_GUARDEDALLOC
30  MEM_CXX_CLASS_ALLOC_FUNCS("Freestyle:Const_traits")
31 #endif
32 };
33 
34 template<class Element> class Nonconst_traits {
35  public:
36  typedef Element value_type;
37  typedef Element &reference;
38  typedef Element *pointer;
39  typedef ptrdiff_t difference_type;
41 
42 #ifdef WITH_CXX_GUARDEDALLOC
43  MEM_CXX_CLASS_ALLOC_FUNCS("Freestyle:Nonconst_traits")
44 #endif
45 };
46 
48  public:
49  typedef std::input_iterator_tag iterator_category;
50 
51 #ifdef WITH_CXX_GUARDEDALLOC
52  MEM_CXX_CLASS_ALLOC_FUNCS("Freestyle:InputIteratorTag_Traits")
53 #endif
54 };
55 
57  public:
58  typedef std::bidirectional_iterator_tag iterator_category;
59 
60 #ifdef WITH_CXX_GUARDEDALLOC
61  MEM_CXX_CLASS_ALLOC_FUNCS("Freestyle:BidirectionalIteratorTag_Traits")
62 #endif
63 };
64 
65 template<class Traits, class IteratorTagTraits> class IteratorBase {
66  public:
67  virtual ~IteratorBase()
68  {
69  }
70 
71  virtual bool begin() const = 0;
72  virtual bool end() const = 0;
73 
74  typedef typename IteratorTagTraits::iterator_category iterator_category;
75  typedef typename Traits::value_type value_type;
76  typedef typename Traits::difference_type difference_type;
77  typedef typename Traits::pointer pointer;
78  typedef typename Traits::reference reference;
79 
80  protected:
82  {
83  }
84 
85 #ifdef WITH_CXX_GUARDEDALLOC
86  MEM_CXX_CLASS_ALLOC_FUNCS("Freestyle:IteratorBase")
87 #endif
88 };
89 
90 } /* namespace Freestyle */
Read Guarded memory(de)allocation.
std::bidirectional_iterator_tag iterator_category
Definition: BaseIterator.h:58
const Element & reference
Definition: BaseIterator.h:24
Nonconst_traits< Element > Non_const_traits
Definition: BaseIterator.h:27
const Element * pointer
Definition: BaseIterator.h:25
std::input_iterator_tag iterator_category
Definition: BaseIterator.h:49
Traits::difference_type difference_type
Definition: BaseIterator.h:76
Traits::reference reference
Definition: BaseIterator.h:78
virtual bool begin() const =0
IteratorTagTraits::iterator_category iterator_category
Definition: BaseIterator.h:74
Traits::value_type value_type
Definition: BaseIterator.h:75
Traits::pointer pointer
Definition: BaseIterator.h:77
virtual bool end() const =0
Nonconst_traits< Element > Non_const_traits
Definition: BaseIterator.h:40
inherits from class Rep
Definition: AppCanvas.cpp:18