PageRenderTime 40ms CodeModel.GetById 31ms app.highlight 7ms RepoModel.GetById 1ms app.codeStats 0ms

/Src/Dependencies/Boost/libs/geometry/test/test_geometries/all_custom_container.hpp

http://hadesmem.googlecode.com/
C++ Header | 137 lines | 94 code | 33 blank | 10 comment | 0 complexity | b2c017075ca77704a95d49a60a70c78e MD5 | raw file
  1// Boost.Geometry (aka GGL, Generic Geometry Library) 
  2// Unit Test
  3
  4// Copyright (c) 2011 Barend Gehrels, Amsterdam, the Netherlands.
  5
  6// Use, modification and distribution is subject to the Boost Software License,
  7// Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
  8// http://www.boost.org/LICENSE_1_0.txt)
  9
 10
 11#ifndef GEOMETRY_TEST_TEST_GEOMETRIES_ALL_CUSTOM_CONTAINER_HPP
 12#define GEOMETRY_TEST_TEST_GEOMETRIES_ALL_CUSTOM_CONTAINER_HPP
 13
 14#include <cstddef>
 15#include <deque>
 16
 17
 18template <typename Item>
 19class all_custom_container
 20{
 21private :
 22    std::deque<Item> m_hidden_deque;
 23
 24public :
 25    typedef typename std::deque<Item>::iterator custom_iterator_type;
 26    typedef typename std::deque<Item>::const_iterator custom_const_iterator_type;
 27
 28    inline std::size_t custom_size() const { return m_hidden_deque.size(); }
 29
 30    inline custom_const_iterator_type custom_begin() const { return m_hidden_deque.begin(); }
 31    inline custom_const_iterator_type custom_end() const { return m_hidden_deque.end(); }
 32    inline custom_iterator_type custom_begin() { return m_hidden_deque.begin(); }
 33    inline custom_iterator_type custom_end() { return m_hidden_deque.end(); }
 34
 35    inline void custom_clear() { m_hidden_deque.clear(); }
 36    inline void custom_push_back(Item const& p) { m_hidden_deque.push_back(p); }
 37    inline void custom_resize(std::size_t new_size) { m_hidden_deque.resize(new_size); }
 38};
 39
 40
 41// 1. Adapt to Boost.Geometry (for e.g. inner rings)
 42namespace boost { namespace geometry
 43{
 44
 45namespace traits
 46{
 47    template <typename Item>
 48    struct clear<all_custom_container<Item> >
 49    {
 50        static inline void apply(all_custom_container<Item>& container)
 51        {
 52            container.custom_clear();
 53        }
 54    };
 55
 56    template <typename Item>
 57    struct push_back<all_custom_container<Item> >
 58    {
 59        static inline void apply(all_custom_container<Item>& container, Item const& item)
 60        {
 61            container.custom_push_back(item);
 62        }
 63    };
 64
 65    template <typename Item>
 66    struct resize<all_custom_container<Item> >
 67    {
 68        static inline void apply(all_custom_container<Item>& container, std::size_t new_size)
 69        {
 70            container.custom_resize(new_size);
 71        }
 72    };
 73
 74} // namespace traits
 75
 76}} // namespace boost::geometry
 77
 78
 79// 2a. Adapt to Boost.Range, meta-functions
 80namespace boost
 81{
 82    template<typename Item>
 83    struct range_mutable_iterator<all_custom_container<Item> >
 84    {
 85        typedef typename all_custom_container<Item>::custom_iterator_type type;
 86    };
 87
 88    template<typename Item>
 89    struct range_const_iterator<all_custom_container<Item> >
 90    {
 91        typedef typename all_custom_container<Item>::custom_const_iterator_type  type;
 92    };
 93
 94} // namespace boost
 95
 96
 97// 2b. Adapt to Boost.Range, part 2, ADP
 98
 99template<typename Item>
100inline typename all_custom_container<Item>::custom_iterator_type
101    range_begin(all_custom_container<Item>& container)
102{
103    return container.custom_begin();
104}
105
106template<typename Item>
107inline typename all_custom_container<Item>::custom_const_iterator_type
108    range_begin(all_custom_container<Item> const& container)
109{
110    return container.custom_begin();
111}
112
113template<typename Item>
114inline typename all_custom_container<Item>::custom_iterator_type
115    range_end(all_custom_container<Item>& container)
116{
117    return container.custom_end();
118}
119
120template<typename Item>
121inline typename all_custom_container<Item>::custom_const_iterator_type
122    range_end(all_custom_container<Item> const& container)
123{
124    return container.custom_end();
125}
126
127// (Optional)
128template<typename Item>
129inline std::size_t range_calculate_size(all_custom_container<Item> const& container)
130{
131    return container.custom_size();
132}
133
134
135
136
137#endif // GEOMETRY_TEST_TEST_GEOMETRIES_ALL_CUSTOM_CONTAINER_HPP