diff options
Diffstat (limited to 'libcutl/cutl/compiler/traversal.hxx')
| -rw-r--r-- | libcutl/cutl/compiler/traversal.hxx | 171 | 
1 files changed, 0 insertions, 171 deletions
diff --git a/libcutl/cutl/compiler/traversal.hxx b/libcutl/cutl/compiler/traversal.hxx deleted file mode 100644 index e0b6d77..0000000 --- a/libcutl/cutl/compiler/traversal.hxx +++ /dev/null @@ -1,171 +0,0 @@ -// file      : cutl/compiler/traversal.hxx -// copyright : Copyright (c) 2009-2013 Code Synthesis Tools CC -// license   : MIT; see accompanying LICENSE file - -#ifndef CUTL_COMPILER_TRAVERSAL_HXX -#define CUTL_COMPILER_TRAVERSAL_HXX - -#include <map> -#include <set> -#include <vector> - -#include <cutl/compiler/type-info.hxx> - -namespace cutl -{ -  namespace compiler -  { -    // -    // -    template<typename B> -    class traverser -    { -    public: -      virtual -      ~traverser (); - -      virtual void -      trampoline (B&) = 0; -    }; - -    // -    // -    template<typename B> -    class traverser_map -    { -    public: -      typedef std::vector<traverser<B>*> traversers; - -      struct map_type: std::map<type_id, traversers> -      { -        map_type () {} - -        // Don't copy traverser maps. We do it here instead of in -        // traverser_map to pacify GCC's -Wextra insisting we must -        // explicitly initialize virtual bases in copy constructor. -        // -        map_type (map_type const&): std::map<type_id, traversers> () {} -        map_type& operator= (map_type const&) {return *this;} -      }; - -      typedef typename map_type::const_iterator iterator; - -      iterator -      begin () const -      { -        return map_.begin (); -      } - -      iterator -      end () const -      { -        return map_.end (); -      } - -      void -      add (type_id const& id, traverser<B>& t) -      { -        traversers& travs (map_[id]); -        travs.push_back (&t); -      } - -    protected: -      map_type map_; -    }; - -    // -    // -    template <typename X, typename B> -    class traverser_impl: public traverser<B>, -                          public virtual traverser_map<B> -    { -    public: -      typedef X type; - -      traverser_impl () -      { -        this->add (typeid (type), *this); -      } - -      traverser_impl (traverser_impl const&) -      { -        this->add (typeid (type), *this); -      } - -      virtual void -      traverse (type&) = 0; - -    public: -      virtual void -      trampoline (B&); -    }; - -    // -    // -    template <typename B> -    class dispatcher: public virtual traverser_map<B> -    { -    public: -      virtual -      ~dispatcher (); - -      void -      traverser (traverser_map<B>&); - -      virtual void -      dispatch (B&); - -    public: -      template <typename I, typename X> -      static void -      iterate_and_dispatch (I begin, I end, dispatcher<X>& d) -      { -        for (; begin != end; ++begin) -        { -          d.dispatch (*begin); -        } -      } - -      template <typename T, typename A, typename I, typename X> -      static void -      iterate_and_dispatch (I begin, -                            I end, -                            dispatcher<X>& d, -                            T& t, -                            void (T::*next)(A&), -                            A& a) -      { -        for (; begin != end;) -        { -          d.dispatch (*begin); - -          if (++begin != end && next != 0) -            (t.*next) (a); -        } -      } - -    private: -      struct comparator -      { -        bool -        operator () (type_info const& a, type_info const& b) const -        { -          return a.type_id () < b.type_id (); -        } -      }; - -      typedef std::map<type_info, std::size_t, comparator> level_map; -      typedef std::set<type_info, comparator> type_info_set; - -      static std::size_t -      compute_levels (type_info const&, std::size_t current, level_map&); - -      static void -      flatten_tree (type_info const&, type_info_set&); -    }; -  } -} - -#include <cutl/compiler/traversal.txx> - -#endif // CUTL_COMPILER_TRAVERSAL_HXX  | 
