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

📄 concepts.hpp

📁 CGAL is a collaborative effort of several sites in Europe and Israel. The goal is to make the most i
💻 HPP
📖 第 1 页 / 共 5 页
字号:
    vector<std::complex<float> >    ZeroElement (vector<std::complex<float> >) {        return zero_vector<std::complex<float> > ();    }    template<>    vector<std::complex<double> >    ZeroElement (vector<std::complex<double> >) {        return zero_vector<std::complex<double> > ();    }    template<>    matrix<std::complex<float> >    ZeroElement (matrix<std::complex<float> >) {        return zero_matrix<std::complex<float> > ();    }    template<>    matrix<std::complex<double> >    ZeroElement (matrix<std::complex<double> >) {        return zero_matrix<std::complex<double> > ();    }#endif    template<class T>    T    OneElement (T);    template<>    float    OneElement (float) {        return 1.f;    }    template<>    double    OneElement (double) {        return 1.;    }    template<>    matrix<float>    OneElement (matrix<float>) {        return identity_matrix<float> ();    }    template<>    matrix<double>    OneElement (matrix<double>) {        return identity_matrix<double> ();    }#if !(defined(BOOST_MSVC) && BOOST_MSVC <= 1300)    template<>    std::complex<float>    OneElement (std::complex<float>) {        return std::complex<float> (1.f);    }    template<>    std::complex<double>    OneElement (std::complex<double>) {        return std::complex<double> (1.);    }    template<>    matrix<std::complex<float> >    OneElement (matrix<std::complex<float> >) {        return identity_matrix<std::complex<float> > ();    }    template<>    matrix<std::complex<double> >    OneElement (matrix<std::complex<double> >) {        return identity_matrix<std::complex<double> > ();    }#endif    template<class E1, class E2>    bool    operator == (const vector_expression<E1> &e1, const vector_expression<E2> &e2) {        typedef BOOST_UBLAS_TYPENAME promote_traits<BOOST_UBLAS_TYPENAME E1::value_type,                                                    BOOST_UBLAS_TYPENAME E2::value_type>::promote_type value_type;        typedef BOOST_UBLAS_TYPENAME type_traits<value_type>::real_type real_type;        return norm_inf (e1 - e2) == real_type (0);    }    template<class E1, class E2>    bool    operator == (const matrix_expression<E1> &e1, const matrix_expression<E2> &e2) {        typedef BOOST_UBLAS_TYPENAME promote_traits<BOOST_UBLAS_TYPENAME E1::value_type,                                                    BOOST_UBLAS_TYPENAME E2::value_type>::promote_type value_type;        typedef BOOST_UBLAS_TYPENAME type_traits<value_type>::real_type real_type;        return norm_inf (e1 - e2) == real_type (0);    }    template<class T>    struct AdditiveAbelianGroupConcept {        typedef T value_type;        static void constraints () {            bool r;            value_type a = value_type (), b = value_type (), c = value_type ();            r = (a + b) + c == a + (b + c);            r = ZeroElement (value_type ()) + a == a;            r = a + ZeroElement (value_type ()) == a;            r = a + (- a) == ZeroElement (value_type ());            r = (- a) + a == ZeroElement (value_type ());            r = a + b == b + a;            ignore_unused_variable_warning (r);        }    };    template<class T>    struct MultiplicativeAbelianGroupConcept {        typedef T value_type;        static void constraints () {            bool r;            value_type a = value_type (), b = value_type (), c = value_type ();            r = (a * b) * c == a * (b * c);            r = OneElement (value_type ()) * a == a;            r = a * OneElement (value_type ()) == a;            r = a * (OneElement (value_type ()) / a) == a;            r = (OneElement (value_type ()) / a) * a == a;            r = a * b == b * a;            ignore_unused_variable_warning (r);        }    };    template<class T>    struct RingWithIdentityConcept {        typedef T value_type;        static void constraints () {            AdditiveAbelianGroupConcept<value_type>::constraints ();            bool r;            value_type a = value_type (), b = value_type (), c = value_type ();            r = (a * b) * c == a * (b * c);            r = (a + b) * c == a * c + b * c;            r = OneElement (value_type ()) * a == a;            r = a * OneElement (value_type ()) == a;            ignore_unused_variable_warning (r);        }        static void constraints (int) {            AdditiveAbelianGroupConcept<value_type>::constraints ();            bool r;            value_type a = value_type (), b = value_type (), c = value_type ();            r = prod (T (prod (a, b)), c) == prod (a, T (prod (b, c)));            r = prod (a + b, c) == prod (a, c) + prod (b, c);            r = prod (OneElement (value_type ()), a) == a;            r = prod (a, OneElement (value_type ())) == a;            ignore_unused_variable_warning (r);        }    };    template<class T>    struct CommutativeRingWithIdentityConcept {        typedef T value_type;        static void constraints () {            RingWithIdentityConcept<value_type>::constraints ();            bool r;            value_type a = value_type (), b = value_type ();            r = a * b == b * a;            ignore_unused_variable_warning (r);        }    };    template<class T>    struct FieldConcept {        typedef T value_type;        static void constraints () {            CommutativeRingWithIdentityConcept<value_type>::constraints ();            bool r;            value_type a = value_type ();            r = a == ZeroElement (value_type ()) || a * (OneElement (value_type ()) / a) == a;            r = a == ZeroElement (value_type ()) || (OneElement (value_type ()) / a) * a == a;            ignore_unused_variable_warning (r);        }    };    template<class T, class V>    struct VectorSpaceConcept {        typedef T value_type;        typedef V vector_type;        static void constraints () {            FieldConcept<value_type>::constraints ();            AdditiveAbelianGroupConcept<vector_type>::constraints ();            bool r;            value_type alpha = value_type (), beta = value_type ();            vector_type a = vector_type (), b = vector_type ();            r = alpha * (a + b) == alpha * a + alpha * b;            r = (alpha + beta) * a == alpha * a + beta * a;            r = (alpha * beta) * a == alpha * (beta * a);            r = OneElement (value_type ()) * a == a;            ignore_unused_variable_warning (r);        }    };    template<class T, class V, class M>    struct LinearOperatorConcept {        typedef T value_type;        typedef V vector_type;        typedef M matrix_type;        static void constraints () {            VectorSpaceConcept<value_type, vector_type>::constraints ();            bool r;            value_type alpha = value_type (), beta = value_type ();            vector_type a = vector_type (), b = vector_type ();            matrix_type A = matrix_type ();            r = prod (A, alpha * a + beta * b) == alpha * prod (A, a) + beta * prod (A, b);            ignore_unused_variable_warning (r);        }    };    void concept_checks () {        // Storage Array#if defined (INTERNAL) || defined (INTERNAL_STORAGE)        StorageArrayConcept<const std::vector<double> >::constraints ();        MutableStorageArrayConcept<std::vector<double> >::constraints ();        RandomAccessIteratorConcept<std::vector<double>::const_iterator>::constraints ();        MutableRandomAccessIteratorConcept<std::vector<double>::iterator>::constraints ();        StorageArrayConcept<const bounded_array<double, 1> >::constraints ();        MutableStorageArrayConcept<bounded_array<double, 1> >::constraints ();        RandomAccessIteratorConcept<bounded_array<double, 1>::const_iterator>::constraints ();        MutableRandomAccessIteratorConcept<bounded_array<double, 1>::iterator>::constraints ();        StorageArrayConcept<const unbounded_array<double> >::constraints ();        MutableStorageArrayConcept<unbounded_array<double> >::constraints ();        RandomAccessIteratorConcept<unbounded_array<double>::const_iterator>::constraints ();        MutableRandomAccessIteratorConcept<unbounded_array<double>::iterator>::constraints ();        StorageArrayConcept<const array_adaptor<double> >::constraints ();        MutableStorageArrayConcept<array_adaptor<double> >::constraints ();        RandomAccessIteratorConcept<array_adaptor<double>::const_iterator>::constraints ();        MutableRandomAccessIteratorConcept<array_adaptor<double>::iterator>::constraints ();        IndexSetConcept<range>::constraints ();        RandomAccessIteratorConcept<range::const_iterator>::constraints ();        IndexSetConcept<slice>::constraints ();        RandomAccessIteratorConcept<slice::const_iterator>::constraints ();        IndexSetConcept<indirect_array<> >::constraints ();        RandomAccessIteratorConcept<indirect_array<>::const_iterator>::constraints ();#endif        // Storage Sparse#if defined (INTERNAL) || defined (INTERNAL_STORAGE_SPARSE)        StorageSparseConcept<const map_array<std::size_t, double> >::constraints ();        MutableStorageSparseConcept<map_array<std::size_t, double> >::constraints ();        RandomAccessIteratorConcept<map_array<std::size_t, double>::const_iterator>::constraints ();        MutableRandomAccessIteratorConcept<map_array<std::size_t, double>::iterator>::constraints ();        StorageSparseConcept<const std::map<std::size_t, double> >::constraints ();        MutableStorageSparseConcept<std::map<std::size_t, double> >::constraints ();        BidirectionalIteratorConcept<std::map<std::size_t, double>::const_iterator>::constraints ();                // Not value_type mutable        BidirectionalIteratorConcept<std::map<std::size_t, double>::iterator>::constraints ();#ifdef BOOST_UBLAS_DEPRACATED        StorageSparseConcept<const set_array<std::size_t> >::constraints ();        MutableStorageSparseConcept<set_array<std::size_t> >::constraints ();        RandomAccessIteratorConcept<set_array<std::size_t>::const_iterator>::constraints ();        MutableRandomAccessIteratorConcept<set_array<std::size_t>::iterator>::constraints ();        StorageSparseConcept<const std::set<std::size_t> >::constraints ();        MutableStorageSparseConcept<std::set<std::size_t> >::constraints ();        BidirectionalIteratorConcept<std::set<std::size_t>::const_iterator>::constraints ();        MutableBidirectionalIteratorConcept<std::set<std::size_t>::iterator>::constraints ();#endif#endif        // Vector#if defined (INTERNAL) || defined (INTERNAL_VECTOR)        VectorConcept<const vector<double> >::constraints ();        MutableVectorConcept<vector<double> >::constraints ();        IndexedRandomAccess1DIteratorConcept<vector<double>::const_iterator>::constraints ();        MutableIndexedRandomAccess1DIteratorConcept<vector<double>::iterator>::constraints ();        IndexedRandomAccess1DIteratorConcept<vector<double>::const_reverse_iterator>::constraints ();        MutableIndexedRandomAccess1DIteratorConcept<vector<double>::reverse_iterator>::constraints ();        VectorConcept<unit_vector<double> >::constraints ();        IndexedRandomAccess1DIteratorConcept<unit_vector<double>::const_iterator>::constraints ();        IndexedRandomAccess1DIteratorConcept<unit_vector<double>::const_reverse_iterator>::constraints ();        VectorConcept<zero_vector<double> >::constraints ();        IndexedBidirectional1DIteratorConcept<zero_vector<double>::const_iterator>::constraints ();        IndexedBidirectional1DIteratorConcept<zero_vector<double>::const_reverse_iterator>::constraints ();        VectorConcept<scalar_vector<double> >::constraints ();        IndexedRandomAccess1DIteratorConcept<scalar_vector<double>::const_iterator>::constraints ();

⌨️ 快捷键说明

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