DriveHQ Start Menu
Cloud Drive Mapping
Folder Sync
Cloud Backup
True Drop Box
FTP/SFTP Hosting
Group Account
DriveHQ Start Menu
Online File Server
My Storage
|
Manage Shares
|
Publishes
|
Drop Boxes
|
Group Account
WebDAV Drive Mapping
Cloud Drive Home
|
WebDAV Guide
|
Drive Mapping Tool
|
Drive Mapping URL
Complete Data Backup
Backup Guide
|
Online Backup Tool
|
Cloud-to-Cloud Backup
FTP, Email & Web Service
FTP Home
|
FTP Hosting FAQ
|
Email Hosting
|
EmailManager
|
Web Hosting
Help & Resources
About
|
Enterprise Service
|
Partnership
|
Comparisons
|
Support
Quick Links
Security and Privacy
Download Software
Service Manual
Use Cases
Group Account
Online Help
Blog
Contact
Cloud Surveillance
Sign Up
Login
Features
Business Features
Online File Server
FTP Hosting
Cloud Drive Mapping
Cloud File Backup
Email Backup & Hosting
Cloud File Sharing
Folder Synchronization
Group Management
True Drop Box
Full-text Search
AD Integration/SSO
Mobile Access
IP Camera & DVR Solution
More...
Personal Features
Personal Cloud Drive
Backup All Devices
Mobile APPs
Personal Web Hosting
Sub-Account (for Kids)
Home/PC/Kids Monitoring
More...
Software
DriveHQ Drive Mapping Tool
DriveHQ FileManager
DriveHQ Online Backup
DriveHQ Mobile Apps
Pricing
Business Plans & Pricing
Personal Plans & Pricing
Price Comparison with Others
Feature Comparison with Others
Install Mobile App
Sign up
Creating account...
Invalid character in username! Only 0-9, a-z, A-Z, _, -, . allowed.
Username is required!
Invalid email address!
E-mail is required!
Password is required!
Password is invalid!
Password and confirmation do not match.
Confirm password is required!
I accept
Membership Agreement
Please read the Membership Agreement and check "I accept"!
Free Quick Sign-up
Sign-up Page
Log in
Signing in...
Username or e-mail address is required!
Password is required!
Keep me logged in
Quick Login
Forgot Password
Up
Upload
Download
Share
Publish
New Folder
New File
Copy
Cut
Delete
Paste
Rate
Upgrade
Rotate
Effect
Edit
Slide
History
// ------------------------------------------------------------------------------ // Copyright (c) 2000 Cadenza New Zealand Ltd // Distributed under the Boost Software License, Version 1.0. (See accompany- // ing file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) // ------------------------------------------------------------------------------ // Boost functional.hpp header file // See http://www.boost.org/libs/functional for documentation. // ------------------------------------------------------------------------------ // $Id: functional.hpp 36246 2006-12-02 14:17:26Z andreas_huber69 $ // ------------------------------------------------------------------------------ #ifndef BOOST_FUNCTIONAL_HPP #define BOOST_FUNCTIONAL_HPP #include
#include
#include
namespace boost { #ifndef BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION // -------------------------------------------------------------------------- // The following traits classes allow us to avoid the need for ptr_fun // because the types of arguments and the result of a function can be // deduced. // // In addition to the standard types defined in unary_function and // binary_function, we add // // - function_type, the type of the function or function object itself. // // - param_type, the type that should be used for passing the function or // function object as an argument. // -------------------------------------------------------------------------- namespace detail { template
struct unary_traits_imp; template
struct unary_traits_imp
{ typedef Operation function_type; typedef const function_type & param_type; typedef typename Operation::result_type result_type; typedef typename Operation::argument_type argument_type; }; template
struct unary_traits_imp
{ typedef R (*function_type)(A); typedef R (*param_type)(A); typedef R result_type; typedef A argument_type; }; template
struct binary_traits_imp; template
struct binary_traits_imp
{ typedef Operation function_type; typedef const function_type & param_type; typedef typename Operation::result_type result_type; typedef typename Operation::first_argument_type first_argument_type; typedef typename Operation::second_argument_type second_argument_type; }; template
struct binary_traits_imp
{ typedef R (*function_type)(A1,A2); typedef R (*param_type)(A1,A2); typedef R result_type; typedef A1 first_argument_type; typedef A2 second_argument_type; }; } // namespace detail template
struct unary_traits { typedef typename detail::unary_traits_imp
::function_type function_type; typedef typename detail::unary_traits_imp
::param_type param_type; typedef typename detail::unary_traits_imp
::result_type result_type; typedef typename detail::unary_traits_imp
::argument_type argument_type; }; template
struct unary_traits
{ typedef R (*function_type)(A); typedef R (*param_type)(A); typedef R result_type; typedef A argument_type; }; template
struct binary_traits { typedef typename detail::binary_traits_imp
::function_type function_type; typedef typename detail::binary_traits_imp
::param_type param_type; typedef typename detail::binary_traits_imp
::result_type result_type; typedef typename detail::binary_traits_imp
::first_argument_type first_argument_type; typedef typename detail::binary_traits_imp
::second_argument_type second_argument_type; }; template
struct binary_traits
{ typedef R (*function_type)(A1,A2); typedef R (*param_type)(A1,A2); typedef R result_type; typedef A1 first_argument_type; typedef A2 second_argument_type; }; #else // BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION // -------------------------------------------------------------------------- // If we have no partial specialisation available, decay to a situation // that is no worse than in the Standard, i.e., ptr_fun will be required. // -------------------------------------------------------------------------- template
struct unary_traits { typedef Operation function_type; typedef const Operation& param_type; typedef typename Operation::result_type result_type; typedef typename Operation::argument_type argument_type; }; template
struct binary_traits { typedef Operation function_type; typedef const Operation & param_type; typedef typename Operation::result_type result_type; typedef typename Operation::first_argument_type first_argument_type; typedef typename Operation::second_argument_type second_argument_type; }; #endif // BOOST_NO_TEMPLATE_PARTIAL_SPECIALIZATION // -------------------------------------------------------------------------- // unary_negate, not1 // -------------------------------------------------------------------------- template
class unary_negate : public std::unary_function
::argument_type,bool> { public: explicit unary_negate(typename unary_traits
::param_type x) : pred(x) {} bool operator()(typename call_traits
::argument_type>::param_type x) const { return !pred(x); } private: typename unary_traits
::function_type pred; }; template
unary_negate
not1(const Predicate &pred) { // The cast is to placate Borland C++Builder in certain circumstances. // I don't think it should be necessary. return unary_negate
((typename unary_traits
::param_type)pred); } template
unary_negate
not1(Predicate &pred) { return unary_negate
(pred); } // -------------------------------------------------------------------------- // binary_negate, not2 // -------------------------------------------------------------------------- template
class binary_negate : public std::binary_function
::first_argument_type, typename binary_traits
::second_argument_type, bool> { public: explicit binary_negate(typename binary_traits
::param_type x) : pred(x) {} bool operator()(typename call_traits
::first_argument_type>::param_type x, typename call_traits
::second_argument_type>::param_type y) const { return !pred(x,y); } private: typename binary_traits
::function_type pred; }; template
binary_negate
not2(const Predicate &pred) { // The cast is to placate Borland C++Builder in certain circumstances. // I don't think it should be necessary. return binary_negate
((typename binary_traits
::param_type)pred); } template
binary_negate
not2(Predicate &pred) { return binary_negate
(pred); } // -------------------------------------------------------------------------- // binder1st, bind1st // -------------------------------------------------------------------------- template
class binder1st : public std::unary_function
::second_argument_type, typename binary_traits
::result_type> { public: binder1st(typename binary_traits
::param_type x, typename call_traits
::first_argument_type>::param_type y) : op(x), value(y) {} typename binary_traits
::result_type operator()(typename call_traits
::second_argument_type>::param_type x) const { return op(value, x); } protected: typename binary_traits
::function_type op; typename binary_traits
::first_argument_type value; }; template
inline binder1st
bind1st(const Operation &op, typename call_traits< typename binary_traits
::first_argument_type >::param_type x) { // The cast is to placate Borland C++Builder in certain circumstances. // I don't think it should be necessary. return binder1st
((typename binary_traits
::param_type)op, x); } template
inline binder1st
bind1st(Operation &op, typename call_traits< typename binary_traits
::first_argument_type >::param_type x) { return binder1st
(op, x); } // -------------------------------------------------------------------------- // binder2nd, bind2nd // -------------------------------------------------------------------------- template
class binder2nd : public std::unary_function
::first_argument_type, typename binary_traits
::result_type> { public: binder2nd(typename binary_traits
::param_type x, typename call_traits
::second_argument_type>::param_type y) : op(x), value(y) {} typename binary_traits
::result_type operator()(typename call_traits
::first_argument_type>::param_type x) const { return op(x, value); } protected: typename binary_traits
::function_type op; typename binary_traits
::second_argument_type value; }; template
inline binder2nd
bind2nd(const Operation &op, typename call_traits< typename binary_traits
::second_argument_type >::param_type x) { // The cast is to placate Borland C++Builder in certain circumstances. // I don't think it should be necessary. return binder2nd
((typename binary_traits
::param_type)op, x); } template
inline binder2nd
bind2nd(Operation &op, typename call_traits< typename binary_traits
::second_argument_type >::param_type x) { return binder2nd
(op, x); } // -------------------------------------------------------------------------- // mem_fun, etc // -------------------------------------------------------------------------- template
class mem_fun_t : public std::unary_function
{ public: explicit mem_fun_t(S (T::*p)()) : ptr(p) {} S operator()(T* p) const { return (p->*ptr)(); } private: S (T::*ptr)(); }; template
class mem_fun1_t : public std::binary_function
{ public: explicit mem_fun1_t(S (T::*p)(A)) : ptr(p) {} S operator()(T* p, typename call_traits
::param_type x) const { return (p->*ptr)(x); } private: S (T::*ptr)(A); }; template
class const_mem_fun_t : public std::unary_function
{ public: explicit const_mem_fun_t(S (T::*p)() const) : ptr(p) {} S operator()(const T* p) const { return (p->*ptr)(); } private: S (T::*ptr)() const; }; template
class const_mem_fun1_t : public std::binary_function
{ public: explicit const_mem_fun1_t(S (T::*p)(A) const) : ptr(p) {} S operator()(const T* p, typename call_traits
::param_type x) const { return (p->*ptr)(x); } private: S (T::*ptr)(A) const; }; template
inline mem_fun_t
mem_fun(S (T::*f)()) { return mem_fun_t
(f); } template
inline mem_fun1_t
mem_fun(S (T::*f)(A)) { return mem_fun1_t
(f); } #ifndef BOOST_NO_POINTER_TO_MEMBER_CONST template
inline const_mem_fun_t
mem_fun(S (T::*f)() const) { return const_mem_fun_t
(f); } template
inline const_mem_fun1_t
mem_fun(S (T::*f)(A) const) { return const_mem_fun1_t
(f); } #endif // BOOST_NO_POINTER_TO_MEMBER_CONST // -------------------------------------------------------------------------- // mem_fun_ref, etc // -------------------------------------------------------------------------- template
class mem_fun_ref_t : public std::unary_function
{ public: explicit mem_fun_ref_t(S (T::*p)()) : ptr(p) {} S operator()(T& p) const { return (p.*ptr)(); } private: S (T::*ptr)(); }; template
class mem_fun1_ref_t : public std::binary_function
{ public: explicit mem_fun1_ref_t(S (T::*p)(A)) : ptr(p) {} S operator()(T& p, typename call_traits
::param_type x) const { return (p.*ptr)(x); } private: S (T::*ptr)(A); }; template
class const_mem_fun_ref_t : public std::unary_function
{ public: explicit const_mem_fun_ref_t(S (T::*p)() const) : ptr(p) {} S operator()(const T &p) const { return (p.*ptr)(); } private: S (T::*ptr)() const; }; template
class const_mem_fun1_ref_t : public std::binary_function
{ public: explicit const_mem_fun1_ref_t(S (T::*p)(A) const) : ptr(p) {} S operator()(const T& p, typename call_traits
::param_type x) const { return (p.*ptr)(x); } private: S (T::*ptr)(A) const; }; template
inline mem_fun_ref_t
mem_fun_ref(S (T::*f)()) { return mem_fun_ref_t
(f); } template
inline mem_fun1_ref_t
mem_fun_ref(S (T::*f)(A)) { return mem_fun1_ref_t
(f); } #ifndef BOOST_NO_POINTER_TO_MEMBER_CONST template
inline const_mem_fun_ref_t
mem_fun_ref(S (T::*f)() const) { return const_mem_fun_ref_t
(f); } template
inline const_mem_fun1_ref_t
mem_fun_ref(S (T::*f)(A) const) { return const_mem_fun1_ref_t
(f); } #endif // BOOST_NO_POINTER_TO_MEMBER_CONST // -------------------------------------------------------------------------- // ptr_fun // -------------------------------------------------------------------------- template
class pointer_to_unary_function : public std::unary_function
{ public: explicit pointer_to_unary_function(Result (*f)(Arg)) : func(f) {} Result operator()(typename call_traits
::param_type x) const { return func(x); } private: Result (*func)(Arg); }; template
inline pointer_to_unary_function
ptr_fun(Result (*f)(Arg)) { return pointer_to_unary_function
(f); } template
class pointer_to_binary_function : public std::binary_function
{ public: explicit pointer_to_binary_function(Result (*f)(Arg1, Arg2)) : func(f) {} Result operator()(typename call_traits
::param_type x, typename call_traits
::param_type y) const { return func(x,y); } private: Result (*func)(Arg1, Arg2); }; template
inline pointer_to_binary_function
ptr_fun(Result (*f)(Arg1, Arg2)) { return pointer_to_binary_function
(f); } } // namespace boost #endif
functional.hpp
Page URL
File URL
Prev
37/113
Next
Download
( 18 KB )
Note: The DriveHQ service banners will NOT be displayed if the file owner is a paid member.
Comments
Total ratings:
0
Average rating:
Not Rated
Would you like to comment?
Join DriveHQ
for a free account, or
Logon
if you are already a member.