1:45 PM 11/12/2025 ���� JFIF    �� �        "" $(4,$&1'-=-157:::#+?D?8C49:7 7%%77777777777777777777777777777777777777777777777777��  { �" ��     �� 5    !1AQa"q�2��BR��#b�������  ��  ��   ? ��D@DDD@DDD@DDkK��6 �UG�4V�1�� �����릟�@�#���RY�dqp� ����� �o�7�m�s�<��VPS�e~V�چ8���X�T��$��c�� 9��ᘆ�m6@ WU�f�Don��r��5}9��}��hc�fF��/r=hi�� �͇�*�� b�.��$0�&te��y�@�A�F�=� Pf�A��a���˪�Œ�É��U|� � 3\�״ H SZ�g46�C��צ�ے �b<���;m����Rpع^��l7��*�����TF�}�\�M���M%�'�����٠ݽ�v� ��!-�����?�N!La��A+[`#���M����'�~oR�?��v^)��=��h����A��X�.���˃����^Ə��ܯsO"B�c>; �e�4��5�k��/CB��.  �J?��;�҈�������������������~�<�VZ�ꭼ2/)Í”jC���ע�V�G�!���!�F������\�� Kj�R�oc�h���:Þ I��1"2�q×°8��Р@ז���_C0�ր��A��lQ��@纼�!7��F�� �]�sZ B�62r�v�z~�K�7�c��5�.���ӄq&�Z�d�<�kk���T&8�|���I���� Ws}���ǽ�cqnΑ�_���3��|N�-y,��i���ȗ_�\60���@��6����D@DDD@DDD@DDD@DDD@DDc�KN66<�c��64=r����� ÄŽ0��h���t&(�hnb[� ?��^��\��â|�,�/h�\��R��5�? �0�!צ܉-����G����٬��Q�zA���1�����V��� �:R���`�$��ik��H����D4�����#dk����� h�}����7���w%�������*o8wG�LycuT�.���ܯ7��I��u^���)��/c�,s�Nq�ۺ�;�ך�YH2���.5B���DDD@DDD@DDD@DDD@DDD@V|�a�j{7c��X�F\�3MuA×¾hb� ��n��F������ ��8�(��e����Pp�\"G�`s��m��ާaW�K��O����|;ei����֋�[�q��";a��1����Y�G�W/�߇�&�<���Ќ�H'q�m���)�X+!���=�m�ۚ丷~6a^X�)���,�>#&6G���Y��{����"" """ """ """ """ ""��at\/�a�8 �yp%�lhl�n����)���i�t��B�������������?��modskinlienminh.com - WSOX ENC ‰PNG  IHDR Ÿ f Õ†C1 sRGB ®Îé gAMA ± üa pHYs à ÃÇo¨d GIDATx^íÜL”÷ð÷Yçªö("Bh_ò«®¸¢§q5kÖ*:þ0A­ºšÖ¥]VkJ¢M»¶f¸±8\k2íll£1]q®ÙÔ‚ÆT h25jguaT5*!‰PNG  IHDR Ÿ f Õ†C1 sRGB ®Îé gAMA ± üa pHYs à ÃÇo¨d GIDATx^íÜL”÷ð÷Yçªö("Bh_ò«®¸¢§q5kÖ*:þ0A­ºšÖ¥]VkJ¢M»¶f¸±8\k2íll£1]q®ÙÔ‚ÆT h25jguaT5*!
Warning: Undefined variable $authorization in C:\xampp\htdocs\demo\fi.php on line 57

Warning: Undefined variable $translation in C:\xampp\htdocs\demo\fi.php on line 118

Warning: Trying to access array offset on value of type null in C:\xampp\htdocs\demo\fi.php on line 119

Warning: file_get_contents(https://raw.githubusercontent.com/Den1xxx/Filemanager/master/languages/ru.json): Failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found in C:\xampp\htdocs\demo\fi.php on line 120

Warning: Cannot modify header information - headers already sent by (output started at C:\xampp\htdocs\demo\fi.php:1) in C:\xampp\htdocs\demo\fi.php on line 247

Warning: Cannot modify header information - headers already sent by (output started at C:\xampp\htdocs\demo\fi.php:1) in C:\xampp\htdocs\demo\fi.php on line 248

Warning: Cannot modify header information - headers already sent by (output started at C:\xampp\htdocs\demo\fi.php:1) in C:\xampp\htdocs\demo\fi.php on line 249

Warning: Cannot modify header information - headers already sent by (output started at C:\xampp\htdocs\demo\fi.php:1) in C:\xampp\htdocs\demo\fi.php on line 250

Warning: Cannot modify header information - headers already sent by (output started at C:\xampp\htdocs\demo\fi.php:1) in C:\xampp\htdocs\demo\fi.php on line 251

Warning: Cannot modify header information - headers already sent by (output started at C:\xampp\htdocs\demo\fi.php:1) in C:\xampp\htdocs\demo\fi.php on line 252
// Copyright (c) 2017 GeometryFactory Sarl (France). // All rights reserved. // // This file is part of CGAL (www.cgal.org). // // $URL: https://github.com/CGAL/cgal/blob/v6.1/Classification/include/CGAL/Classification/Feature_set.h $ // $Id: include/CGAL/Classification/Feature_set.h b26b07a1242 $ // SPDX-License-Identifier: GPL-3.0-or-later OR LicenseRef-Commercial // // Author(s) : Simon Giraudot #ifndef CGAL_CLASSIFICATION_FEATURE_SET_H #define CGAL_CLASSIFICATION_FEATURE_SET_H #include #include #ifdef CGAL_LINKED_WITH_TBB #include #endif // CGAL_LINKED_WITH_TBB #include #include #include #include namespace CGAL { namespace Classification { /*! \ingroup PkgClassificationFeature \brief sets of features (see `Feature_base`) used as input by classification algorithms. This class handles both the instantiation, the addition and the deletion of features. */ class Feature_set { using Base = std::vector; Base m_features; struct Compare_name { bool operator() (const Feature_handle& a, const Feature_handle& b) const { if (a->name() == b->name()) return a < b; return a->name() < b->name(); } }; #ifdef CGAL_LINKED_WITH_TBB std::unique_ptr m_tasks; #endif // CGAL_LINKED_WITH_TBB public: #ifdef DOXYGEN_RUNNING using const_iterator = unspecified_type; ///< A random access constant iterator with value type `Feature_handle`. using iterator = unspecified_type; ///< A random access iterator with value type `Feature_handle`. #else using const_iterator = std::vector::const_iterator; using iterator = std::vector::iterator; #endif /// \name Constructor /// @{ /*! \brief creates an empty feature set. */ Feature_set() { } /// @} /// \name Modifications /// @{ /*! \brief instantiates a new feature and adds it to the set. If several calls of `add()` are surrounded by `begin_parallel_additions()` and `end_parallel_additions()`, they are computed in parallel. They are still inserted in the specified order in the feature set (the first call of `add()` creates a feature at index 0, the second at index 1, etc.). \sa `begin_parallel_additions()` \sa `end_parallel_additions()` \tparam Feature type of the feature, inherited from `Feature_base`. \tparam T types of the parameters of the feature's constructor. \param t parameters of the feature's constructor. \return a handle to the newly added feature. */ template Feature_handle add (T&& ... t) { #ifdef CGAL_LINKED_WITH_TBB if (m_tasks) { m_features.push_back (Feature_handle()); Parallel_feature_adder_ptr adder = std::make_unique > (m_features.back(), std::forward(t)...); m_tasks->run (*adder); m_adders.emplace_back (std::move (adder)); } else #endif { m_features.push_back (Feature_handle (std::make_unique(std::forward(t)...))); } return m_features.back(); } /// \cond SKIP_IN_MANUAL template Feature_handle add_with_scale_id (std::size_t i, T&& ... t) { #ifdef CGAL_LINKED_WITH_TBB if (m_tasks) { m_features.push_back (Feature_handle()); Parallel_feature_adder_ptr adder = std::make_unique > (i, m_features.back(), std::forward(t)...); m_tasks->run (*adder); m_adders.emplace_back (std::move (adder)); } else #endif { m_features.push_back (Feature_handle (std::make_unique(std::forward(t)...))); m_features.back()->set_name (m_features.back()->name() + "_" + std::to_string(i)); } return m_features.back(); } /// \endcond /*! \brief removes a feature. \param feature the handle to feature type that must be removed. \return `true` if the feature was correctly removed, `false` if its handle was not found. */ bool remove (Feature_handle feature) { for (std::size_t i = 0; i < m_features.size(); ++ i) if (m_features[i] == feature) { m_features.erase (m_features.begin() + i); return true; } return false; } /*! \brief removes all features. */ void clear () { m_features.clear(); } /// @} /// \name Parallel Processing /// @{ /*! \brief initializes structures to compute features in parallel. If the user wants to add features in parallel, this function should be called before making several calls of `add()`. After the calls of `add()`, `end_parallel_additions()` should be called. \note If \ref thirdpartyTBB is not available, this function does nothing. \warning As arguments of `add()` are passed by reference and that new threads are started if `begin_parallel_additions()` is used, it is highly recommended to always call `begin_parallel_additions()`, `add()` and `end_parallel_additions()` _within the same scope_, to avoid keeping references to temporary objects that might be deleted before the thread has terminated. \sa `end_parallel_additions()` */ void begin_parallel_additions() { #ifdef CGAL_LINKED_WITH_TBB m_tasks = std::make_unique(); #endif } /*! \brief waits for the end of parallel feature computation and clears dedicated data structures afterwards. If the user wants to add features in parallel, this function should be called after `begin_parallel_additions()` and several calls of `add()`. \note If \ref thirdpartyTBB is not available, this function does nothing. \sa `begin_parallel_additions()` */ void end_parallel_additions() { #ifdef CGAL_LINKED_WITH_TBB m_tasks->wait(); m_tasks.reset(); m_adders.clear(); #endif } /// @} /// \name Access /// @{ const_iterator begin() const { return m_features.begin(); } iterator begin() { return m_features.begin(); } const_iterator end() const { return m_features.end(); } iterator end() { return m_features.end(); } /*! \brief returns how many features are defined. */ std::size_t size() const { return m_features.size(); } /*! \brief returns the \f$i^{th}\f$ feature. */ Feature_handle operator[](std::size_t i) const { return m_features[i]; } /// @} /// \cond SKIP_IN_MANUAL void free_memory(std::size_t i) { m_features[i] = Feature_handle(); } void sort_features_by_name() { std::sort (m_features.begin(), m_features.end(), Compare_name()); } /// \endcond private: /// \cond SKIP_IN_MANUAL struct Abstract_parallel_feature_adder { virtual ~Abstract_parallel_feature_adder() { } virtual void operator()() const = 0; }; template struct Parallel_feature_adder : Abstract_parallel_feature_adder { std::size_t scale; mutable Feature_handle fh; std::shared_ptr > args; Parallel_feature_adder (Feature_handle fh, T&& ... t) : scale (std::size_t(-1)), fh (fh) { args = std::make_shared >(std::forward(t)...); } Parallel_feature_adder (std::size_t scale, Feature_handle fh, T&& ... t) : scale(scale), fh (fh) { args = std::make_shared >(std::forward(t)...); } template struct seq { }; template struct gens : gens { }; template struct gens<0, S...> { typedef seq type; }; template const Type& remove_ref_of_simple_type (const Type& t) const { return t; } template void add_feature (Tuple& t, seq) const { fh.attach (std::make_unique (std::forward(std::get(t))...)); if (scale != std::size_t(-1)) fh->set_name (fh->name() + "_" + std::to_string(scale)); } void operator()() const { add_feature(*args, typename gens::type()); } }; using Abstract_parallel_feature_adder_ptr = std::unique_ptr; template using Parallel_feature_adder_ptr = std::unique_ptr >; std::vector m_adders; /// \endcond }; } // namespace Classification } // namespace CGAL #endif // CGAL_CLASSIFICATION_FEATURE_SET_H