Server IP : 104.21.38.3 / Your IP : 162.158.108.42 Web Server : Apache System : Linux krdc-ubuntu-s-2vcpu-4gb-amd-blr1-01.localdomain 5.15.0-142-generic #152-Ubuntu SMP Mon May 19 10:54:31 UTC 2025 x86_64 User : www ( 1000) PHP Version : 7.4.33 Disable Function : passthru,exec,system,putenv,chroot,chgrp,chown,shell_exec,popen,proc_open,pcntl_exec,ini_alter,ini_restore,dl,openlog,syslog,readlink,symlink,popepassthru,pcntl_alarm,pcntl_fork,pcntl_waitpid,pcntl_wait,pcntl_wifexited,pcntl_wifstopped,pcntl_wifsignaled,pcntl_wifcontinued,pcntl_wexitstatus,pcntl_wtermsig,pcntl_wstopsig,pcntl_signal,pcntl_signal_dispatch,pcntl_get_last_error,pcntl_strerror,pcntl_sigprocmask,pcntl_sigwaitinfo,pcntl_sigtimedwait,pcntl_exec,pcntl_getpriority,pcntl_setpriority,imap_open,apache_setenv MySQL : OFF | cURL : ON | WGET : ON | Perl : ON | Python : OFF | Sudo : ON | Pkexec : ON Directory : /www/server/mysql/src/boost/boost_1_59_0/boost/multi_index/ |
Upload File : |
/* Copyright 2003-2015 Joaquin M Lopez Munoz. * 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) * * See http://www.boost.org/libs/multi_index for library home page. */ #ifndef BOOST_MULTI_INDEX_IDENTITY_HPP #define BOOST_MULTI_INDEX_IDENTITY_HPP #if defined(_MSC_VER) #pragma once #endif #include <boost/config.hpp> #include <boost/mpl/if.hpp> #include <boost/multi_index/identity_fwd.hpp> #include <boost/type_traits/is_const.hpp> #include <boost/type_traits/remove_const.hpp> #include <boost/utility/enable_if.hpp> #if !defined(BOOST_NO_SFINAE) #include <boost/type_traits/is_convertible.hpp> #endif namespace boost{ template<class Type> class reference_wrapper; /* fwd decl. */ namespace multi_index{ namespace detail{ /* identity is a do-nothing key extractor that returns the [const] Type& * object passed. * Additionally, identity is overloaded to support referece_wrappers * of Type and "chained pointers" to Type's. By chained pointer to Type we * mean a type P such that, given a p of type P * *...n...*x is convertible to Type&, for some n>=1. * Examples of chained pointers are raw and smart pointers, iterators and * arbitrary combinations of these (vg. Type** or unique_ptr<Type*>.) */ template<typename Type> struct const_identity_base { typedef Type result_type; template<typename ChainedPtr> #if !defined(BOOST_NO_SFINAE) typename disable_if<is_convertible<const ChainedPtr&,Type&>,Type&>::type #else Type& #endif operator()(const ChainedPtr& x)const { return operator()(*x); } Type& operator()(Type& x)const { return x; } Type& operator()(const reference_wrapper<Type>& x)const { return x.get(); } Type& operator()( const reference_wrapper<typename remove_const<Type>::type>& x)const { return x.get(); } }; template<typename Type> struct non_const_identity_base { typedef Type result_type; /* templatized for pointer-like types */ template<typename ChainedPtr> #if !defined(BOOST_NO_SFINAE) typename disable_if< is_convertible<const ChainedPtr&,const Type&>,Type&>::type #else Type& #endif operator()(const ChainedPtr& x)const { return operator()(*x); } const Type& operator()(const Type& x)const { return x; } Type& operator()(Type& x)const { return x; } const Type& operator()(const reference_wrapper<const Type>& x)const { return x.get(); } Type& operator()(const reference_wrapper<Type>& x)const { return x.get(); } }; } /* namespace multi_index::detail */ template<class Type> struct identity: mpl::if_c< is_const<Type>::value, detail::const_identity_base<Type>,detail::non_const_identity_base<Type> >::type { }; } /* namespace multi_index */ } /* namespace boost */ #endif