⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 storage.hpp

📁 CGAL is a collaborative effort of several sites in Europe and Israel. The goal is to make the most i
💻 HPP
📖 第 1 页 / 共 5 页
字号:
        bool operator != (const basic_slice &s) const {            return ! (*this == s);        }        // Iterator types    private:        // Use and index        typedef size_type const_iterator_type;    public:#ifdef BOOST_UBLAS_USE_INDEXED_ITERATOR        typedef indexed_const_iterator<self_type, std::random_access_iterator_tag> const_iterator;#else        class const_iterator:            public container_const_reference<basic_slice>,            public random_access_iterator_base<std::random_access_iterator_tag,                                               const_iterator, value_type> {        public:#ifdef BOOST_MSVC_STD_ITERATOR            typedef const_reference reference;#else            typedef typename basic_slice::value_type value_type;            typedef typename basic_slice::difference_type difference_type;            typedef typename basic_slice::const_reference reference;            typedef typename basic_slice::const_pointer pointer;#endif            // Construction and destruction            BOOST_UBLAS_INLINE            const_iterator ():                container_const_reference<basic_slice> (), it_ () {}            BOOST_UBLAS_INLINE            const_iterator (const basic_slice &s, const const_iterator_type &it):                container_const_reference<basic_slice> (s), it_ (it) {}            // Arithmetic            BOOST_UBLAS_INLINE            const_iterator &operator ++ () {                ++it_;                return *this;            }            BOOST_UBLAS_INLINE            const_iterator &operator -- () {                BOOST_UBLAS_CHECK (it_ > 0, bad_index ());                --it_;                return *this;            }            BOOST_UBLAS_INLINE            const_iterator &operator += (difference_type n) {                BOOST_UBLAS_CHECK (n >= 0 || it_ >= size_type(-n), bad_index ());                it_ += n;                return *this;            }            BOOST_UBLAS_INLINE            const_iterator &operator -= (difference_type n) {                BOOST_UBLAS_CHECK (n <= 0 || it_ >= size_type(n), bad_index ());                it_ -= n;                return *this;            }            BOOST_UBLAS_INLINE            difference_type operator - (const const_iterator &it) const {                return it_ - it.it_;            }            // Dereference            BOOST_UBLAS_INLINE            const_reference operator * () const {                BOOST_UBLAS_CHECK (it_ < (*this) ().size (), bad_index ());                return (*this) ().start () + it_* (*this) ().stride ();            }            // Index            BOOST_UBLAS_INLINE            size_type index () const {                BOOST_UBLAS_CHECK (it_ < (*this) ().size (), bad_index ());                return it_;            }            // Assignment            BOOST_UBLAS_INLINE            const_iterator &operator = (const const_iterator &it) {                // Comeau recommends...                this->assign (&it ());                it_ = it.it_;                return *this;            }            // Comparison            BOOST_UBLAS_INLINE            bool operator == (const const_iterator &it) const {                BOOST_UBLAS_CHECK ((*this) () == it (), external_logic ());                return it_ == it.it_;            }            BOOST_UBLAS_INLINE            bool operator < (const const_iterator &it) const {                BOOST_UBLAS_CHECK ((*this) () == it (), external_logic ());                return it_ < it.it_;            }        private:            const_iterator_type it_;        };#endif        BOOST_UBLAS_INLINE        const_iterator begin () const {            return const_iterator (*this, 0);        }        BOOST_UBLAS_INLINE        const_iterator end () const {            return const_iterator (*this, size_);        }        // Reverse iterator#ifdef BOOST_MSVC_STD_ITERATOR        typedef std::reverse_iterator<const_iterator, value_type, const_reference> const_reverse_iterator;#else        typedef std::reverse_iterator<const_iterator> const_reverse_iterator;#endif        BOOST_UBLAS_INLINE        const_reverse_iterator rbegin () const {            return const_reverse_iterator (end ());        }        BOOST_UBLAS_INLINE        const_reverse_iterator rend () const {            return const_reverse_iterator (begin ());        }        BOOST_UBLAS_INLINE        basic_slice preprocess (size_type size) const {            if (*this != all ())                return *this;            return basic_slice (0, 1, size);        }        static        BOOST_UBLAS_INLINE        basic_slice all () {            return basic_slice (0, 1, size_type (-1));        }    private:        size_type start_;        difference_type stride_;        size_type size_;    };    // Indirect array class    template<class A>    class indirect_array {    public:        typedef A array_type;        typedef const A const_array_type;        typedef typename A::size_type size_type;        typedef typename A::difference_type difference_type;        typedef typename A::value_type value_type;        typedef typename A::const_reference const_reference;        typedef typename A::reference reference;        typedef typename A::const_pointer const_pointer;        typedef typename A::pointer pointer;    private:        typedef indirect_array<A> self_type;    public:        // Construction and destruction        BOOST_UBLAS_INLINE        indirect_array ():            size_ (), data_ () {}        explicit BOOST_UBLAS_INLINE        indirect_array (size_type size):            size_ (size), data_ (size) {}        BOOST_UBLAS_INLINE        indirect_array (size_type size, const array_type &data):            size_ (size), data_ (data) {}        BOOST_UBLAS_INLINE        indirect_array (pointer start, pointer stop):            size_ (stop - start), data_ (stop - start) {            std::copy (start, stop, data_.begin ());        }        BOOST_UBLAS_INLINE        size_type size () const {            return size_;        }        BOOST_UBLAS_INLINE        const_array_type data () const {            return data_;        }        BOOST_UBLAS_INLINE        array_type data () {            return data_;        }        // Element access        BOOST_UBLAS_INLINE        const_reference operator () (size_type i) const {            BOOST_UBLAS_CHECK (i < size_, bad_index ());            return data_ [i];        }        BOOST_UBLAS_INLINE        reference operator () (size_type i) {            BOOST_UBLAS_CHECK (i < size_, bad_index ());            return data_ [i];        }        BOOST_UBLAS_INLINE        const_reference operator [] (size_type i) const {            return (*this) (i);        }        BOOST_UBLAS_INLINE        reference operator [] (size_type i) {            return (*this) (i);        }        // Composition        BOOST_UBLAS_INLINE        indirect_array compose (const basic_range<size_type, difference_type> &r) const {            BOOST_UBLAS_CHECK (r.start () + r.size () <= size_, bad_size ());            array_type data (r.size ());            for (size_type i = 0; i < r.size (); ++ i)                data [i] = data_ [r.start () + i];            return indirect_array (r.size (), data);        }        BOOST_UBLAS_INLINE        indirect_array compose (const basic_slice<size_type, difference_type> &s) const {            BOOST_UBLAS_CHECK (s.start () + s.stride () * (s.size () - (s.size () > 0)) <= size (), bad_size ());            array_type data (s.size ());            for (size_type i = 0; i < s.size (); ++ i)                data [i] = data_ [s.start () + s.stride () * i];            return indirect_array (s.size (), data);        }        BOOST_UBLAS_INLINE        indirect_array compose (const indirect_array &ia) const {            array_type data (ia.size_);            for (size_type i = 0; i < ia.size_; ++ i) {                BOOST_UBLAS_CHECK (ia.data_ [i] <= size_, bad_size ());                data [i] = data_ [ia.data_ [i]];            }            return indirect_array (ia.size_, data);        }        // Comparison        template<class OA>        BOOST_UBLAS_INLINE        bool operator == (const indirect_array<OA> &ia) const {            if (size_ != ia.size_)                return false;            for (size_type i = 0; i < BOOST_UBLAS_SAME (size_, ia.size_); ++ i)                if (data_ [i] != ia.data_ [i])                    return false;            return true;        }        template<class OA>        BOOST_UBLAS_INLINE        bool operator != (const indirect_array<OA> &ia) const {            return ! (*this == ia);        }        // Iterator types    private:        // Use a index difference        typedef difference_type const_iterator_type;    public:#ifdef BOOST_UBLAS_USE_INDEXED_ITERATOR        typedef indexed_const_iterator<indirect_array, std::random_access_iterator_tag> const_iterator;#else        class const_iterator:            public container_const_reference<indirect_array>,            public random_access_iterator_base<std::random_access_iterator_tag,                                               const_iterator, value_type> {        public:#ifdef BOOST_MSVC_STD_ITERATOR            typedef const_reference reference;#else            typedef typename indirect_array::value_type value_type;            typedef typename indirect_array::difference_type difference_type;            typedef typename indirect_array::const_reference reference;            typedef typename indirect_array::const_pointer pointer;#endif            // Construction and destruction            BOOST_UBLAS_INLINE            const_iterator ():                container_const_reference<indirect_array> (), it_ () {}            BOOST_UBLAS_INLINE            const_iterator (const indirect_array &ia, const const_iterator_type &it):                container_const_reference<indirect_array> (ia), it_ (it) {}            // Arithmetic            BOOST_UBLAS_INLINE            const_iterator &operator ++ () {                ++ it_;                return *this;            }            BOOST_UBLAS_INLINE            const_iterator &operator -- () {                -- it_;                return *this;            }            BOOST_UBLAS_INLINE            const_iterator &operator += (difference_type n) {                it_ += n;                return *this;            }            BOOST_UBLAS_INLINE            const_iterator &operator -= (difference_type n) {                it_ -= n;                return *this;            }            BOOST_UBLAS_INLINE            difference_type operator - (const const_iterator &it) const {                return it_ - it.it_;            }            // Dereference            BOOST_UBLAS_INLINE            const_reference operator * () const {                return (*this) () (it_);            }            // Index            BOOST_UBLAS_INLINE            size_type index () const {                return it_;            }            // Assignment            BOOST_UBLAS_INLINE            const_iterator &operator = (const const_iterator &it) {                // Comeau recommends...                this->assign (&it ());                it_ = it.it_;                return *this;            }            // Comparison            BOOST_UBLAS_INLINE            bool operator == (const const_iterator &it) const {                BOOST_UBLAS_CHECK ((*this) () == it (), external_logic ());                return it_ == it.it_;            }            BOOST_UBLAS_INLINE            bool operator < (const const_iterator &it) const {                BOOST_UBLAS_CHECK ((*this) () == it (), external_logic ());                return it_ < it.it_;            }        private:            const_iterator_type it_;        };#endif        BOOST_UBLAS_INLINE        const_iterator begin () const {            return const_iterator (*this, 0);        }        BOOST_UBLAS_INLINE        const_iterator end () const {            return const_iterator (*this, size_);        }        // Reverse iterator#ifdef BOOST_MSVC_STD_ITERATOR        typedef std::reverse_iterator<const_iterator, value_type, const_reference> const_reverse_iterator;#else        typedef std::reverse_iterator<const_iterator> const_reverse_iterator;#endif        BOOST_UBLAS_INLINE        const_reverse_iterator rbegin () const {            return const_reverse_iterator (end ());        }        BOOST_UBLAS_INLINE        const_reverse_iterator rend () const {            return const_reverse_iterator (begin ());        }        BOOST_UBLAS_INLINE        indirect_array preprocess (size_type size) const {            if (*this != all ())                return *this;            indirect_array ia (size);            for (size_type i = 0; i < size; ++ i)               ia (i) = i;            return ia;        }        static        BOOST_UBLAS_INLINE

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -