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
#ifndef BOOST_QVM_MAP_MAT_MAT_HPP_INCLUDED #define BOOST_QVM_MAP_MAT_MAT_HPP_INCLUDED // Copyright 2008-2024 Emil Dotchevski and Reverge Studios, Inc. // Distributed under the Boost Software License, Version 1.0. (See accompanying // file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) #include #include #include #include #include namespace boost { namespace qvm { namespace qvm_detail { template class del_row_ { del_row_( del_row_ const & ); del_row_ & operator=( del_row_ const & ); ~del_row_(); public: template BOOST_QVM_CONSTEXPR BOOST_QVM_INLINE_TRIVIAL del_row_ & operator=( T const & x ) { assign(*this,x); return *this; } template = 201103L , class = typename enable_if >::type #endif > BOOST_QVM_CONSTEXPR BOOST_QVM_INLINE_TRIVIAL operator R() const { R r; assign(r,*this); return r; } }; template ::value> struct del_row_write_traits; template struct del_row_write_traits { typedef del_row_ this_matrix; typedef typename mat_traits::scalar_type scalar_type; static int const rows=mat_traits::rows-1; static int const cols=mat_traits::cols; template static BOOST_QVM_CONSTEXPR BOOST_QVM_INLINE_CRITICAL scalar_type & write_element( this_matrix & x ) { BOOST_QVM_STATIC_ASSERT(Row>=0); BOOST_QVM_STATIC_ASSERT(Row=0); BOOST_QVM_STATIC_ASSERT(Col::template write_element=I),Col>(reinterpret_cast(x)); } static BOOST_QVM_CONSTEXPR BOOST_QVM_INLINE_CRITICAL scalar_type & write_element_idx( int row, int col, this_matrix & x ) { BOOST_QVM_ASSERT(row>=0); BOOST_QVM_ASSERT(row=0); BOOST_QVM_ASSERT(col::write_element_idx(row+(row>=I),col,reinterpret_cast(x)); } }; template struct del_row_write_traits { typedef del_row_ this_matrix; typedef typename mat_traits::scalar_type scalar_type; static int const rows=mat_traits::rows-1; static int const cols=mat_traits::cols; template static BOOST_QVM_CONSTEXPR BOOST_QVM_INLINE_CRITICAL void write_element( this_matrix & x, scalar_type s ) { BOOST_QVM_STATIC_ASSERT(Row>=0); BOOST_QVM_STATIC_ASSERT(Row=0); BOOST_QVM_STATIC_ASSERT(Col::template write_element=I),Col>(reinterpret_cast(x), s); } static BOOST_QVM_CONSTEXPR BOOST_QVM_INLINE_CRITICAL void write_element_idx( int row, int col, this_matrix & x, scalar_type s ) { BOOST_QVM_ASSERT(row>=0); BOOST_QVM_ASSERT(row=0); BOOST_QVM_ASSERT(col::write_element_idx(row+(row>=I),col,reinterpret_cast(x), s); } }; } template struct mat_traits >: qvm_detail::del_row_write_traits { typedef qvm_detail::del_row_ this_matrix; typedef typename mat_traits::scalar_type scalar_type; static int const rows=mat_traits::rows-1; static int const cols=mat_traits::cols; template static BOOST_QVM_CONSTEXPR BOOST_QVM_INLINE_CRITICAL scalar_type read_element( this_matrix const & x ) { BOOST_QVM_STATIC_ASSERT(Row>=0); BOOST_QVM_STATIC_ASSERT(Row=0); BOOST_QVM_STATIC_ASSERT(Col::template read_element=I),Col>(reinterpret_cast(x)); } static BOOST_QVM_CONSTEXPR BOOST_QVM_INLINE_CRITICAL scalar_type read_element_idx( int row, int col, this_matrix const & x ) { BOOST_QVM_ASSERT(row>=0); BOOST_QVM_ASSERT(row=0); BOOST_QVM_ASSERT(col::read_element_idx(row+(row>=I),col,reinterpret_cast(x)); } }; template struct deduce_mat,R,C> { typedef mat::scalar_type,R,C> type; }; template struct deduce_mat2,qvm_detail::del_row_,R,C> { typedef mat::scalar_type,R,C> type; }; template typename enable_if_c< is_mat::value, qvm_detail::del_row_ const &>::type BOOST_QVM_CONSTEXPR BOOST_QVM_INLINE_TRIVIAL del_row( A const & a ) { return reinterpret_cast const &>(a); } template typename enable_if_c< is_mat::value, qvm_detail::del_row_ &>::type BOOST_QVM_CONSTEXPR BOOST_QVM_INLINE_TRIVIAL del_row( A & a ) { return reinterpret_cast &>(a); } //////////////////////////////////////////////// namespace qvm_detail { template class del_col_ { del_col_( del_col_ const & ); del_col_ & operator=( del_col_ const & ); ~del_col_(); public: template BOOST_QVM_CONSTEXPR BOOST_QVM_INLINE_TRIVIAL del_col_ & operator=( T const & x ) { assign(*this,x); return *this; } template = 201103L , class = typename enable_if >::type #endif > BOOST_QVM_CONSTEXPR BOOST_QVM_INLINE_TRIVIAL operator R() const { R r; assign(r,*this); return r; } }; template ::value> struct del_col_write_traits; template struct del_col_write_traits { typedef del_col_ this_matrix; typedef typename mat_traits::scalar_type scalar_type; static int const rows=mat_traits::rows; static int const cols=mat_traits::cols-1; template static BOOST_QVM_CONSTEXPR BOOST_QVM_INLINE_CRITICAL scalar_type & write_element( this_matrix & x ) { BOOST_QVM_STATIC_ASSERT(Row>=0); BOOST_QVM_STATIC_ASSERT(Row=0); BOOST_QVM_STATIC_ASSERT(Col::template write_element=J)>(reinterpret_cast(x)); } static BOOST_QVM_CONSTEXPR BOOST_QVM_INLINE_CRITICAL scalar_type & write_element_idx( int row, int col, this_matrix & x ) { BOOST_QVM_ASSERT(row>=0); BOOST_QVM_ASSERT(row=0); BOOST_QVM_ASSERT(col::write_element_idx(row,col+(col>=J),reinterpret_cast(x)); } }; template struct del_col_write_traits { typedef del_col_ this_matrix; typedef typename mat_traits::scalar_type scalar_type; static int const rows=mat_traits::rows; static int const cols=mat_traits::cols-1; template static BOOST_QVM_CONSTEXPR BOOST_QVM_INLINE_CRITICAL void write_element( this_matrix & x, scalar_type s ) { BOOST_QVM_STATIC_ASSERT(Row>=0); BOOST_QVM_STATIC_ASSERT(Row=0); BOOST_QVM_STATIC_ASSERT(Col::template write_element=J)>(reinterpret_cast(x), s); } static BOOST_QVM_CONSTEXPR BOOST_QVM_INLINE_CRITICAL void write_element_idx( int row, int col, this_matrix & x, scalar_type s ) { BOOST_QVM_ASSERT(row>=0); BOOST_QVM_ASSERT(row=0); BOOST_QVM_ASSERT(col::write_element_idx(row,col+(col>=J),reinterpret_cast(x), s); } }; } template struct mat_traits >: qvm_detail::del_col_write_traits { typedef qvm_detail::del_col_ this_matrix; typedef typename mat_traits::scalar_type scalar_type; static int const rows=mat_traits::rows; static int const cols=mat_traits::cols-1; template static BOOST_QVM_CONSTEXPR BOOST_QVM_INLINE_CRITICAL scalar_type read_element( this_matrix const & x ) { BOOST_QVM_STATIC_ASSERT(Row>=0); BOOST_QVM_STATIC_ASSERT(Row=0); BOOST_QVM_STATIC_ASSERT(Col::template read_element=J)>(reinterpret_cast(x)); } static BOOST_QVM_CONSTEXPR BOOST_QVM_INLINE_CRITICAL scalar_type read_element_idx( int row, int col, this_matrix const & x ) { BOOST_QVM_ASSERT(row>=0); BOOST_QVM_ASSERT(row=0); BOOST_QVM_ASSERT(col::read_element_idx(row,col+(col>=J),reinterpret_cast(x)); } }; template struct deduce_mat,R,C> { typedef mat::scalar_type,R,C> type; }; template struct deduce_mat2,qvm_detail::del_col_,R,C> { typedef mat::scalar_type,R,C> type; }; template typename enable_if_c< is_mat::value, qvm_detail::del_col_ const &>::type BOOST_QVM_CONSTEXPR BOOST_QVM_INLINE_TRIVIAL del_col( A const & a ) { return reinterpret_cast const &>(a); } template typename enable_if_c< is_mat::value, qvm_detail::del_col_ &>::type BOOST_QVM_CONSTEXPR BOOST_QVM_INLINE_TRIVIAL del_col( A & a ) { return reinterpret_cast &>(a); } //////////////////////////////////////////////// namespace qvm_detail { template class del_row_col_ { del_row_col_( del_row_col_ const & ); ~del_row_col_(); public: BOOST_QVM_CONSTEXPR BOOST_QVM_INLINE_TRIVIAL del_row_col_ & operator=( del_row_col_ const & x ) { assign(*this,x); return *this; } template BOOST_QVM_CONSTEXPR BOOST_QVM_INLINE_TRIVIAL del_row_col_ & operator=( T const & x ) { assign(*this,x); return *this; } template = 201103L , class = typename enable_if >::type #endif > BOOST_QVM_CONSTEXPR BOOST_QVM_INLINE_TRIVIAL operator R() const { R r; assign(r,*this); return r; } }; template ::value> struct del_row_col_write_traits; template struct del_row_col_write_traits { typedef del_row_col_ this_matrix; typedef typename mat_traits::scalar_type scalar_type; static int const rows=mat_traits::rows-1; static int const cols=mat_traits::cols-1; template static BOOST_QVM_CONSTEXPR BOOST_QVM_INLINE_CRITICAL scalar_type & write_element( this_matrix & x ) { BOOST_QVM_STATIC_ASSERT(Row>=0); BOOST_QVM_STATIC_ASSERT(Row=0); BOOST_QVM_STATIC_ASSERT(Col::template write_element=I),Col+(Col>=J)>(reinterpret_cast(x)); } static BOOST_QVM_CONSTEXPR BOOST_QVM_INLINE_CRITICAL scalar_type & write_element_idx( int row, int col, this_matrix & x ) { BOOST_QVM_ASSERT(row>=0); BOOST_QVM_ASSERT(row=0); BOOST_QVM_ASSERT(col::write_element_idx(row+(row>=I),col+(col>=J),reinterpret_cast(x)); } }; template struct del_row_col_write_traits { typedef del_row_col_ this_matrix; typedef typename mat_traits::scalar_type scalar_type; static int const rows=mat_traits::rows-1; static int const cols=mat_traits::cols-1; template static BOOST_QVM_CONSTEXPR BOOST_QVM_INLINE_CRITICAL void write_element( this_matrix & x, scalar_type s ) { BOOST_QVM_STATIC_ASSERT(Row>=0); BOOST_QVM_STATIC_ASSERT(Row=0); BOOST_QVM_STATIC_ASSERT(Col::template write_element=I),Col+(Col>=J)>(reinterpret_cast(x), s); } static BOOST_QVM_CONSTEXPR BOOST_QVM_INLINE_CRITICAL void write_element_idx( int row, int col, this_matrix & x, scalar_type s ) { BOOST_QVM_ASSERT(row>=0); BOOST_QVM_ASSERT(row=0); BOOST_QVM_ASSERT(col::write_element_idx(row+(row>=I),col+(col>=J),reinterpret_cast(x), s); } }; } template struct mat_traits >: qvm_detail::del_row_col_write_traits { typedef qvm_detail::del_row_col_ this_matrix; typedef typename mat_traits::scalar_type scalar_type; static int const rows=mat_traits::rows-1; static int const cols=mat_traits::cols-1; template static BOOST_QVM_CONSTEXPR BOOST_QVM_INLINE_CRITICAL scalar_type read_element( this_matrix const & x ) { BOOST_QVM_STATIC_ASSERT(Row>=0); BOOST_QVM_STATIC_ASSERT(Row=0); BOOST_QVM_STATIC_ASSERT(Col::template read_element=I),Col+(Col>=J)>(reinterpret_cast(x)); } static BOOST_QVM_CONSTEXPR BOOST_QVM_INLINE_CRITICAL scalar_type read_element_idx( int row, int col, this_matrix const & x ) { BOOST_QVM_ASSERT(row>=0); BOOST_QVM_ASSERT(row=0); BOOST_QVM_ASSERT(col::read_element_idx(row+(row>=I),col+(col>=J),reinterpret_cast(x)); } }; template struct deduce_mat,R,C> { typedef mat::scalar_type,R,C> type; }; template struct deduce_mat2,qvm_detail::del_row_col_,R,C> { typedef mat::scalar_type,R,C> type; }; template typename enable_if_c< is_mat::value, qvm_detail::del_row_col_ const &>::type BOOST_QVM_CONSTEXPR BOOST_QVM_INLINE_TRIVIAL del_row_col( A const & a ) { return reinterpret_cast const &>(a); } template typename enable_if_c< is_mat::value, qvm_detail::del_row_col_ &>::type BOOST_QVM_CONSTEXPR BOOST_QVM_INLINE_TRIVIAL del_row_col( A & a ) { return reinterpret_cast &>(a); } //////////////////////////////////////////////// namespace qvm_detail { template class neg_row_ { neg_row_( neg_row_ const & ); neg_row_ & operator=( neg_row_ const & ); ~neg_row_(); public: template BOOST_QVM_CONSTEXPR BOOST_QVM_INLINE_TRIVIAL neg_row_ & operator=( T const & x ) { assign(*this,x); return *this; } template = 201103L , class = typename enable_if >::type #endif > BOOST_QVM_CONSTEXPR BOOST_QVM_INLINE_TRIVIAL operator R() const { R r; assign(r,*this); return r; } }; } template struct mat_traits > { typedef qvm_detail::neg_row_ this_matrix; typedef typename mat_traits::scalar_type scalar_type; static int const rows=mat_traits::rows; static int const cols=mat_traits::cols; template static BOOST_QVM_CONSTEXPR BOOST_QVM_INLINE_CRITICAL scalar_type read_element( this_matrix const & x ) { BOOST_QVM_STATIC_ASSERT(Row>=0); BOOST_QVM_STATIC_ASSERT(Row=0); BOOST_QVM_STATIC_ASSERT(Col::template read_element(reinterpret_cast(x)) : mat_traits::template read_element(reinterpret_cast(x)); } static BOOST_QVM_CONSTEXPR BOOST_QVM_INLINE_CRITICAL scalar_type read_element_idx( int row, int col, this_matrix const & x ) { BOOST_QVM_ASSERT(row>=0); BOOST_QVM_ASSERT(row=0); BOOST_QVM_ASSERT(col::read_element_idx(row,col,reinterpret_cast(x)) : mat_traits::read_element_idx(row,col,reinterpret_cast(x)); } }; template struct deduce_mat,R,C> { typedef mat::scalar_type,R,C> type; }; template struct deduce_mat2,qvm_detail::neg_row_,R,C> { typedef mat::scalar_type,R,C> type; }; template typename enable_if_c< is_mat::value, qvm_detail::neg_row_ const &>::type BOOST_QVM_CONSTEXPR BOOST_QVM_INLINE_TRIVIAL neg_row( A const & a ) { return reinterpret_cast const &>(a); } //////////////////////////////////////////////// namespace qvm_detail { template class neg_col_ { neg_col_( neg_col_ const & ); neg_col_ & operator=( neg_col_ const & ); ~neg_col_(); public: template BOOST_QVM_CONSTEXPR BOOST_QVM_INLINE_TRIVIAL neg_col_ & operator=( T const & x ) { assign(*this,x); return *this; } template = 201103L , class = typename enable_if >::type #endif > BOOST_QVM_CONSTEXPR BOOST_QVM_INLINE_TRIVIAL operator R() const { R r; assign(r,*this); return r; } }; } template struct mat_traits > { typedef qvm_detail::neg_col_ this_matrix; typedef typename mat_traits::scalar_type scalar_type; static int const rows=mat_traits::rows; static int const cols=mat_traits::cols; template static BOOST_QVM_CONSTEXPR BOOST_QVM_INLINE_CRITICAL scalar_type read_element( this_matrix const & x ) { BOOST_QVM_STATIC_ASSERT(Row>=0); BOOST_QVM_STATIC_ASSERT(Row=0); BOOST_QVM_STATIC_ASSERT(Col::template read_element(reinterpret_cast(x)) : mat_traits::template read_element(reinterpret_cast(x)); } static BOOST_QVM_CONSTEXPR BOOST_QVM_INLINE_CRITICAL scalar_type read_element_idx( int row, int col, this_matrix const & x ) { BOOST_QVM_ASSERT(row>=0); BOOST_QVM_ASSERT(row=0); BOOST_QVM_ASSERT(col::read_element_idx(row,col,reinterpret_cast(x)) : mat_traits::read_element_idx(row,col,reinterpret_cast(x)); } }; template struct deduce_mat,R,C> { typedef mat::scalar_type,R,C> type; }; template struct deduce_mat2,qvm_detail::neg_col_,R,C> { typedef mat::scalar_type,R,C> type; }; template typename enable_if_c< is_mat::value, qvm_detail::neg_col_ const &>::type BOOST_QVM_CONSTEXPR BOOST_QVM_INLINE_TRIVIAL neg_col( A const & a ) { return reinterpret_cast const &>(a); } //////////////////////////////////////////////// template typename enable_if_c< is_mat::value, qvm_detail::transposed_ const &>::type BOOST_QVM_CONSTEXPR BOOST_QVM_INLINE_TRIVIAL transposed( A const & a ) { return reinterpret_cast const &>(a); } template typename enable_if_c< is_mat::value, qvm_detail::transposed_ &>::type BOOST_QVM_CONSTEXPR BOOST_QVM_INLINE_TRIVIAL transposed( A & a ) { return reinterpret_cast &>(a); } //////////////////////////////////////////////// namespace qvm_detail { template class swap_rows_ { swap_rows_( swap_rows_ const & ); swap_rows_ & operator=( swap_rows_ const & ); ~swap_rows_(); public: template BOOST_QVM_CONSTEXPR BOOST_QVM_INLINE_TRIVIAL swap_rows_ & operator=( T const & x ) { assign(*this,x); return *this; } template = 201103L , class = typename enable_if >::type #endif > BOOST_QVM_CONSTEXPR BOOST_QVM_INLINE_TRIVIAL operator R() const { R r; assign(r,*this); return r; } }; template ::value> struct swap_rows_write_traits; template struct swap_rows_write_traits { typedef swap_rows_ this_matrix; typedef typename mat_traits::scalar_type scalar_type; static int const rows=mat_traits::rows; static int const cols=mat_traits::cols; template static BOOST_QVM_CONSTEXPR BOOST_QVM_INLINE_CRITICAL scalar_type & write_element( this_matrix & x ) { BOOST_QVM_STATIC_ASSERT(Row>=0); BOOST_QVM_STATIC_ASSERT(Row=0); BOOST_QVM_STATIC_ASSERT(Col::template write_element<(Row==R1 && R1!=R2)*R2+(Row==R2 && R1!=R2)*R1+((Row!=R1 && Row!=R2) || R1==R2)*Row,Col>(reinterpret_cast(x)); } static BOOST_QVM_CONSTEXPR BOOST_QVM_INLINE_CRITICAL scalar_type & write_element_idx( int row, int col, this_matrix & x ) { BOOST_QVM_ASSERT(row>=0); BOOST_QVM_ASSERT(row=0); BOOST_QVM_ASSERT(col::write_element_idx(row==R1?R2:row==R2?R1:row,col,reinterpret_cast(x)); } }; template struct swap_rows_write_traits { typedef swap_rows_ this_matrix; typedef typename mat_traits::scalar_type scalar_type; static int const rows=mat_traits::rows; static int const cols=mat_traits::cols; template static BOOST_QVM_CONSTEXPR BOOST_QVM_INLINE_CRITICAL void write_element( this_matrix & x, scalar_type s ) { BOOST_QVM_STATIC_ASSERT(Row>=0); BOOST_QVM_STATIC_ASSERT(Row=0); BOOST_QVM_STATIC_ASSERT(Col::template write_element<(Row==R1 && R1!=R2)*R2+(Row==R2 && R1!=R2)*R1+((Row!=R1 && Row!=R2) || R1==R2)*Row,Col>(reinterpret_cast(x), s); } static BOOST_QVM_CONSTEXPR BOOST_QVM_INLINE_CRITICAL void write_element_idx( int row, int col, this_matrix & x, scalar_type s ) { BOOST_QVM_ASSERT(row>=0); BOOST_QVM_ASSERT(row=0); BOOST_QVM_ASSERT(col::write_element_idx(row==R1?R2:row==R2?R1:row,col,reinterpret_cast(x), s); } }; } template struct mat_traits >: qvm_detail::swap_rows_write_traits { typedef qvm_detail::swap_rows_ this_matrix; typedef typename mat_traits::scalar_type scalar_type; static int const rows=mat_traits::rows; static int const cols=mat_traits::cols; template static BOOST_QVM_CONSTEXPR BOOST_QVM_INLINE_CRITICAL scalar_type read_element( this_matrix const & x ) { BOOST_QVM_STATIC_ASSERT(Row>=0); BOOST_QVM_STATIC_ASSERT(Row=0); BOOST_QVM_STATIC_ASSERT(Col::template read_element<(Row==R1 && R1!=R2)*R2+(Row==R2 && R1!=R2)*R1+((Row!=R1 && Row!=R2) || R1==R2)*Row,Col>(reinterpret_cast(x)); } static BOOST_QVM_CONSTEXPR BOOST_QVM_INLINE_CRITICAL scalar_type read_element_idx( int row, int col, this_matrix const & x ) { BOOST_QVM_ASSERT(row>=0); BOOST_QVM_ASSERT(row=0); BOOST_QVM_ASSERT(col::read_element_idx(row==R1?R2:row==R2?R1:row,col,reinterpret_cast(x)); } }; template struct deduce_mat,R,C> { typedef mat::scalar_type,R,C> type; }; template struct deduce_mat2,qvm_detail::swap_rows_,R,C> { typedef mat::scalar_type,R,C> type; }; template typename enable_if_c< is_mat::value, qvm_detail::swap_rows_ const &>::type BOOST_QVM_CONSTEXPR BOOST_QVM_INLINE_TRIVIAL swap_rows( A const & a ) { return reinterpret_cast const &>(a); } template typename enable_if_c< is_mat::value, qvm_detail::swap_rows_ &>::type BOOST_QVM_CONSTEXPR BOOST_QVM_INLINE_TRIVIAL swap_rows( A & a ) { return reinterpret_cast &>(a); } //////////////////////////////////////////////// namespace qvm_detail { template class swap_cols_ { swap_cols_( swap_cols_ const & ); swap_cols_ & operator=( swap_cols_ const & ); ~swap_cols_(); public: template BOOST_QVM_CONSTEXPR BOOST_QVM_INLINE_TRIVIAL swap_cols_ & operator=( T const & x ) { assign(*this,x); return *this; } template = 201103L , class = typename enable_if >::type #endif > BOOST_QVM_CONSTEXPR BOOST_QVM_INLINE_TRIVIAL operator R() const { R r; assign(r,*this); return r; } }; template ::value> struct swap_cols_write_traits; template struct swap_cols_write_traits { typedef swap_cols_ this_matrix; typedef typename mat_traits::scalar_type scalar_type; static int const rows=mat_traits::rows; static int const cols=mat_traits::cols; template static BOOST_QVM_CONSTEXPR BOOST_QVM_INLINE_CRITICAL scalar_type & write_element( this_matrix & x ) { BOOST_QVM_STATIC_ASSERT(Row>=0); BOOST_QVM_STATIC_ASSERT(Row=0); BOOST_QVM_STATIC_ASSERT(Col::template write_element(reinterpret_cast(x)); } static BOOST_QVM_CONSTEXPR BOOST_QVM_INLINE_CRITICAL scalar_type & write_element_idx( int row, int col, this_matrix & x ) { BOOST_QVM_ASSERT(row>=0); BOOST_QVM_ASSERT(row=0); BOOST_QVM_ASSERT(col::write_element_idx(row,col==C1?C2:col==C2?C1:col,reinterpret_cast(x)); } }; template struct swap_cols_write_traits { typedef swap_cols_ this_matrix; typedef typename mat_traits::scalar_type scalar_type; static int const rows=mat_traits::rows; static int const cols=mat_traits::cols; template static BOOST_QVM_CONSTEXPR BOOST_QVM_INLINE_CRITICAL void write_element( this_matrix & x, scalar_type s ) { BOOST_QVM_STATIC_ASSERT(Row>=0); BOOST_QVM_STATIC_ASSERT(Row=0); BOOST_QVM_STATIC_ASSERT(Col::template write_element(reinterpret_cast(x), s); } static BOOST_QVM_CONSTEXPR BOOST_QVM_INLINE_CRITICAL void write_element_idx( int row, int col, this_matrix & x, scalar_type s ) { BOOST_QVM_ASSERT(row>=0); BOOST_QVM_ASSERT(row=0); BOOST_QVM_ASSERT(col::write_element_idx(row,col==C1?C2:col==C2?C1:col,reinterpret_cast(x), s); } }; } template struct mat_traits >: qvm_detail::swap_cols_write_traits { typedef qvm_detail::swap_cols_ this_matrix; typedef typename mat_traits::scalar_type scalar_type; static int const rows=mat_traits::rows; static int const cols=mat_traits::cols; template static BOOST_QVM_CONSTEXPR BOOST_QVM_INLINE_CRITICAL scalar_type read_element( this_matrix const & x ) { BOOST_QVM_STATIC_ASSERT(Row>=0); BOOST_QVM_STATIC_ASSERT(Row=0); BOOST_QVM_STATIC_ASSERT(Col::template read_element(reinterpret_cast(x)); } static BOOST_QVM_CONSTEXPR BOOST_QVM_INLINE_CRITICAL scalar_type read_element_idx( int row, int col, this_matrix const & x ) { BOOST_QVM_ASSERT(row>=0); BOOST_QVM_ASSERT(row=0); BOOST_QVM_ASSERT(col::read_element_idx(row,col==C1?C2:col==C2?C1:col,reinterpret_cast(x)); } }; template struct deduce_mat,R,C> { typedef mat::scalar_type,R,C> type; }; template struct deduce_mat2,qvm_detail::swap_cols_,R,C> { typedef mat::scalar_type,R,C> type; }; template typename enable_if_c< is_mat::value, qvm_detail::swap_cols_ const &>::type BOOST_QVM_CONSTEXPR BOOST_QVM_INLINE_TRIVIAL swap_cols( A const & a ) { return reinterpret_cast const &>(a); } template typename enable_if_c< is_mat::value, qvm_detail::swap_cols_ &>::type BOOST_QVM_CONSTEXPR BOOST_QVM_INLINE_TRIVIAL swap_cols( A & a ) { return reinterpret_cast &>(a); } } } #endif