00001 00002 #ifndef _INSTIGATE_OPEN_SOURCE_INTERNAL_HEADER_IN_CONCEPT 00003 #error This is an internal header file used to implement Instigate STL.\ 00004 It should never be included directly by a program. 00005 #endif 00006 00007 #ifndef INSTIGATE_STL_BIDIRECTIONAL_ITERATOR_HPP 00008 #define INSTIGATE_STL_BIDIRECTIONAL_ITERATOR_HPP 00009 00058 // Headers from this project 00059 #include "_forward_iterator.hpp" 00060 #include "iterator_interface.hpp" 00061 00062 // Headers from other projects 00063 00064 // Headers from standard libraries 00065 00066 // Forward declarations 00067 namespace instigate { 00068 namespace stl { 00086 namespace bidirectional_iterator { 00087 struct tag; 00088 template <typename T> struct interface; 00089 template <typename T> struct requirements; 00090 } 00091 } 00092 } 00093 00100 struct instigate::stl::bidirectional_iterator::tag 00101 : instigate::stl::forward_iterator::tag 00102 { 00103 }; 00104 00109 template <typename T> 00110 struct instigate::stl::bidirectional_iterator::interface 00111 : instigate::stl::forward_iterator::interface<T> 00112 { 00118 static void decrement(T& a) 00119 { 00120 instigate::stl::interface<T>::decrement(a); 00121 } 00122 }; 00123 00130 template <typename T> 00131 struct instigate::stl::bidirectional_iterator::requirements 00132 : instigate::stl::forward_iterator::requirements<T> 00133 { 00138 static void require_decrement(T& a) 00139 { 00140 instigate::stl::bidirectional_iterator::interface<T>:: 00141 decrement(a); 00142 } 00143 00144 00152 requirements() 00153 { 00154 (void)require_decrement; 00155 } 00156 }; 00157 00158 // vim:et:tabstop=8:shiftwidth=8:cindent:fo=croq:textwidth=80: 00159 00160 #endif // INSTIGATE_STL_BIDIRECTIONAL_ITERATOR_HPP