Browse Source

Fix interrogate warnings, flesh out iterator header

rdb 9 years ago
parent
commit
ba5bba42b0
2 changed files with 71 additions and 3 deletions
  1. 70 2
      dtool/src/parser-inc/iterator
  2. 1 1
      dtool/src/parser-inc/memory

+ 70 - 2
dtool/src/parser-inc/iterator

@@ -1,6 +1,74 @@
 #pragma once
 
+#include <stdtypedefs.h>
+#include <string>
+
 namespace std {
-  template<class Iterator> class iterator;
-  template<class Iterator> class reverse_iterator;
+  // Iterator tags
+  struct input_iterator_tag {};
+  struct output_iterator_tag {};
+  struct forward_iterator_tag : public input_iterator_tag {};
+  struct bidirectional_iterator_tag : public forward_iterator_tag {};
+  struct random_access_iterator_tag : public bidirectional_iterator_tag {};
+
+  // Iterator traits
+  template<class Iterator> struct iterator_traits {
+    typedef typename Iterator::difference_type difference_type;
+    typedef typename Iterator::value_type value_type;
+    typedef typename Iterator::pointer pointer;
+    typedef typename Iterator::reference reference;
+    typedef typename Iterator::iterator_category iterator_category;
+  };
+
+  template<class T> struct iterator_traits<T*> {
+    typedef ptrdiff_t difference_type;
+    typedef T value_type;
+    typedef T *pointer;
+    typedef T &reference;
+    typedef random_access_iterator_tag iterator_category;
+  };
+
+  template<class T> struct iterator_traits<const T*> {
+    typedef ptrdiff_t difference_type;
+    typedef T value_type;
+    typedef const T *pointer;
+    typedef const T &reference;
+    typedef random_access_iterator_tag iterator_category;
+  };
+
+  // Iterators
+  template<class Category, class T, class Distance = ptrdiff_t,
+           class Pointer = T*, class Reference = T&> struct iterator {
+    typedef T value_type;
+    typedef Distance difference_type;
+    typedef Pointer pointer;
+    typedef Reference reference;
+    typedef Category iterator_category;
+  };
+
+  template<class Iterator>
+  class reverse_iterator : public
+    iterator<typename iterator_traits<Iterator>::iterator_category,
+             typename iterator_traits<Iterator>::value_type,
+             typename iterator_traits<Iterator>::difference_type,
+             typename iterator_traits<Iterator>::pointer,
+             typename iterator_traits<Iterator>::reference> {
+  public:
+    typedef Iterator iterator_type;
+    typedef typename iterator_traits<Iterator>::difference_type difference_type;
+    typedef typename iterator_traits<Iterator>::reference reference;
+    typedef typename iterator_traits<Iterator>::pointer pointer;
+  };
+
+  template<class T, class charT = char, class traits = char_traits<charT>,
+            class Distance = ptrdiff_t>
+    class istream_iterator;
+
+  template<class T, class charT = char, class traits = char_traits<charT>>
+    class ostream_iterator;
+
+  template<class charT, class traits = char_traits<charT>>
+    class istreambuf_iterator;
+  template <class charT, class traits = char_traits<charT>>
+    class ostreambuf_iterator;
 };

+ 1 - 1
dtool/src/parser-inc/memory

@@ -122,7 +122,7 @@ namespace std {
         struct is_always_equal;
  
         template <class T> using rebind_alloc = size_t;
-        template <class T> using rebind_traits = allocator_traits<rebind_alloc<T> >;
+        //template <class T> using rebind_traits = allocator_traits<rebind_alloc<T> >;
     };
 
     template <class T> class allocator;