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
// // (C) Copyright Jeremy Siek 2000. // 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) // // Revision History: // // 17 July 2001: Added const to some member functions. (Jeremy Siek) // 05 May 2001: Removed static dummy_cons object. (Jeremy Siek) // See http://www.boost.org/libs/concept_check for documentation. #ifndef BOOST_CONCEPT_ARCHETYPES_HPP #define BOOST_CONCEPT_ARCHETYPES_HPP #include
#include
#include
#include
namespace boost { //=========================================================================== // Basic Archetype Classes namespace detail { class dummy_constructor { }; } // A type that models no concept. The template parameter // is only there so that null_archetype types can be created // that have different type. template
class null_archetype { private: null_archetype() { } null_archetype(const null_archetype&) { } null_archetype& operator=(const null_archetype&) { return *this; } public: null_archetype(detail::dummy_constructor) { } #ifndef __MWERKS__ template
friend void dummy_friend(); // just to avoid warnings #endif }; // This is a helper class that provides a way to get a reference to // an object. The get() function will never be called at run-time // (nothing in this file will) so this seemingly very bad function // is really quite innocent. The name of this class needs to be // changed. template
class static_object { public: static T& get() { #if BOOST_WORKAROUND(__BORLANDC__, BOOST_TESTED_AT(0x564)) return *reinterpret_cast
(0); #else static char d[sizeof(T)]; return *reinterpret_cast
(d); #endif } }; template
> class default_constructible_archetype : public Base { public: default_constructible_archetype() : Base(static_object
::get()) { } default_constructible_archetype(detail::dummy_constructor x) : Base(x) { } }; template
> class assignable_archetype : public Base { assignable_archetype() { } assignable_archetype(const assignable_archetype&) { } public: assignable_archetype& operator=(const assignable_archetype&) { return *this; } assignable_archetype(detail::dummy_constructor x) : Base(x) { } }; template
> class copy_constructible_archetype : public Base { public: copy_constructible_archetype() : Base(static_object
::get()) { } copy_constructible_archetype(const copy_constructible_archetype&) : Base(static_object
::get()) { } copy_constructible_archetype(detail::dummy_constructor x) : Base(x) { } }; template
> class sgi_assignable_archetype : public Base { public: sgi_assignable_archetype(const sgi_assignable_archetype&) : Base(static_object
::get()) { } sgi_assignable_archetype& operator=(const sgi_assignable_archetype&) { return *this; } sgi_assignable_archetype(const detail::dummy_constructor& x) : Base(x) { } }; struct default_archetype_base { default_archetype_base(detail::dummy_constructor) { } }; // Careful, don't use same type for T and Base. That results in the // conversion operator being invalid. Since T is often // null_archetype, can't use null_archetype for Base. template
class convertible_to_archetype : public Base { private: convertible_to_archetype() { } convertible_to_archetype(const convertible_to_archetype& ) { } convertible_to_archetype& operator=(const convertible_to_archetype&) { return *this; } public: convertible_to_archetype(detail::dummy_constructor x) : Base(x) { } operator const T&() const { return static_object
::get(); } }; template
class convertible_from_archetype : public Base { private: convertible_from_archetype() { } convertible_from_archetype(const convertible_from_archetype& ) { } convertible_from_archetype& operator=(const convertible_from_archetype&) { return *this; } public: convertible_from_archetype(detail::dummy_constructor x) : Base(x) { } convertible_from_archetype(const T&) { } convertible_from_archetype& operator=(const T&) { return *this; } }; class boolean_archetype { public: boolean_archetype(const boolean_archetype&) { } operator bool() const { return true; } boolean_archetype(detail::dummy_constructor) { } private: boolean_archetype() { } boolean_archetype& operator=(const boolean_archetype&) { return *this; } }; template
> class equality_comparable_archetype : public Base { public: equality_comparable_archetype(detail::dummy_constructor x) : Base(x) { } }; template
boolean_archetype operator==(const equality_comparable_archetype
&, const equality_comparable_archetype
&) { return boolean_archetype(static_object
::get()); } template
boolean_archetype operator!=(const equality_comparable_archetype
&, const equality_comparable_archetype
&) { return boolean_archetype(static_object
::get()); } template
> class equality_comparable2_first_archetype : public Base { public: equality_comparable2_first_archetype(detail::dummy_constructor x) : Base(x) { } }; template
> class equality_comparable2_second_archetype : public Base { public: equality_comparable2_second_archetype(detail::dummy_constructor x) : Base(x) { } }; template
boolean_archetype operator==(const equality_comparable2_first_archetype
&, const equality_comparable2_second_archetype
&) { return boolean_archetype(static_object
::get()); } template
boolean_archetype operator!=(const equality_comparable2_first_archetype
&, const equality_comparable2_second_archetype
&) { return boolean_archetype(static_object
::get()); } template
> class less_than_comparable_archetype : public Base { public: less_than_comparable_archetype(detail::dummy_constructor x) : Base(x) { } }; template
boolean_archetype operator<(const less_than_comparable_archetype
&, const less_than_comparable_archetype
&) { return boolean_archetype(static_object
::get()); } template
> class comparable_archetype : public Base { public: comparable_archetype(detail::dummy_constructor x) : Base(x) { } }; template
boolean_archetype operator<(const comparable_archetype
&, const comparable_archetype
&) { return boolean_archetype(static_object
::get()); } template
boolean_archetype operator<=(const comparable_archetype
&, const comparable_archetype
&) { return boolean_archetype(static_object
::get()); } template
boolean_archetype operator>(const comparable_archetype
&, const comparable_archetype
&) { return boolean_archetype(static_object
::get()); } template
boolean_archetype operator>=(const comparable_archetype
&, const comparable_archetype
&) { return boolean_archetype(static_object
::get()); } // The purpose of the optags is so that one can specify // exactly which types the operator< is defined between. // This is useful for allowing the operations: // // A a; B b; // a < b // b < a // // without also allowing the combinations: // // a < a // b < b // struct optag1 { }; struct optag2 { }; struct optag3 { }; #define BOOST_DEFINE_BINARY_PREDICATE_ARCHETYPE(OP, NAME) \ template
, class Tag = optag1 > \ class NAME##_first_archetype : public Base { \ public: \ NAME##_first_archetype(detail::dummy_constructor x) : Base(x) { } \ }; \ \ template
, class Tag = optag1 > \ class NAME##_second_archetype : public Base { \ public: \ NAME##_second_archetype(detail::dummy_constructor x) : Base(x) { } \ }; \ \ template
\ boolean_archetype \ operator OP (const NAME##_first_archetype
&, \ const NAME##_second_archetype
&) \ { \ return boolean_archetype(static_object
::get()); \ } BOOST_DEFINE_BINARY_PREDICATE_ARCHETYPE(==, equal_op) BOOST_DEFINE_BINARY_PREDICATE_ARCHETYPE(!=, not_equal_op) BOOST_DEFINE_BINARY_PREDICATE_ARCHETYPE(<, less_than_op) BOOST_DEFINE_BINARY_PREDICATE_ARCHETYPE(<=, less_equal_op) BOOST_DEFINE_BINARY_PREDICATE_ARCHETYPE(>, greater_than_op) BOOST_DEFINE_BINARY_PREDICATE_ARCHETYPE(>=, greater_equal_op) #define BOOST_DEFINE_OPERATOR_ARCHETYPE(OP, NAME) \ template
> \ class NAME##_archetype : public Base { \ public: \ NAME##_archetype(detail::dummy_constructor x) : Base(x) { } \ NAME##_archetype(const NAME##_archetype&) \ : Base(static_object
::get()) { } \ NAME##_archetype& operator=(const NAME##_archetype&) { return *this; } \ }; \ template
\ NAME##_archetype
\ operator OP (const NAME##_archetype
&,\ const NAME##_archetype
&) \ { \ return \ NAME##_archetype
(static_object
::get()); \ } BOOST_DEFINE_OPERATOR_ARCHETYPE(+, addable) BOOST_DEFINE_OPERATOR_ARCHETYPE(-, subtractable) BOOST_DEFINE_OPERATOR_ARCHETYPE(*, multipliable) BOOST_DEFINE_OPERATOR_ARCHETYPE(/, dividable) BOOST_DEFINE_OPERATOR_ARCHETYPE(%, modable) // As is, these are useless because of the return type. // Need to invent a better way... #define BOOST_DEFINE_BINARY_OPERATOR_ARCHETYPE(OP, NAME) \ template
> \ class NAME##_first_archetype : public Base { \ public: \ NAME##_first_archetype(detail::dummy_constructor x) : Base(x) { } \ }; \ \ template
> \ class NAME##_second_archetype : public Base { \ public: \ NAME##_second_archetype(detail::dummy_constructor x) : Base(x) { } \ }; \ \ template
\ Return \ operator OP (const NAME##_first_archetype
&, \ const NAME##_second_archetype
&) \ { \ return Return(static_object
::get()); \ } BOOST_DEFINE_BINARY_OPERATOR_ARCHETYPE(+, plus_op) BOOST_DEFINE_BINARY_OPERATOR_ARCHETYPE(*, time_op) BOOST_DEFINE_BINARY_OPERATOR_ARCHETYPE(/, divide_op) BOOST_DEFINE_BINARY_OPERATOR_ARCHETYPE(-, subtract_op) BOOST_DEFINE_BINARY_OPERATOR_ARCHETYPE(%, mod_op) //=========================================================================== // Function Object Archetype Classes template
class generator_archetype { public: const Return& operator()() { return static_object
::get(); } }; class void_generator_archetype { public: void operator()() { } }; template
class unary_function_archetype { private: unary_function_archetype() { } public: unary_function_archetype(detail::dummy_constructor) { } const Return& operator()(const Arg&) const { return static_object
::get(); } }; template
class binary_function_archetype { private: binary_function_archetype() { } public: binary_function_archetype(detail::dummy_constructor) { } const Return& operator()(const Arg1&, const Arg2&) const { return static_object
::get(); } }; template
class unary_predicate_archetype { typedef boolean_archetype Return; unary_predicate_archetype() { } public: unary_predicate_archetype(detail::dummy_constructor) { } const Return& operator()(const Arg&) const { return static_object
::get(); } }; template
> class binary_predicate_archetype { typedef boolean_archetype Return; binary_predicate_archetype() { } public: binary_predicate_archetype(detail::dummy_constructor) { } const Return& operator()(const Arg1&, const Arg2&) const { return static_object
::get(); } }; //=========================================================================== // Iterator Archetype Classes template
class input_iterator_archetype { private: typedef input_iterator_archetype self; public: typedef std::input_iterator_tag iterator_category; typedef T value_type; struct reference { operator const value_type&() const { return static_object
::get(); } }; typedef const T* pointer; typedef std::ptrdiff_t difference_type; self& operator=(const self&) { return *this; } bool operator==(const self&) const { return true; } bool operator!=(const self&) const { return true; } reference operator*() const { return reference(); } self& operator++() { return *this; } self operator++(int) { return *this; } }; template
class input_iterator_archetype_no_proxy { private: typedef input_iterator_archetype_no_proxy self; public: typedef std::input_iterator_tag iterator_category; typedef T value_type; typedef const T& reference; typedef const T* pointer; typedef std::ptrdiff_t difference_type; self& operator=(const self&) { return *this; } bool operator==(const self&) const { return true; } bool operator!=(const self&) const { return true; } reference operator*() const { return static_object
::get(); } self& operator++() { return *this; } self operator++(int) { return *this; } }; template
struct output_proxy { output_proxy& operator=(const T&) { return *this; } }; template
class output_iterator_archetype { public: typedef output_iterator_archetype self; public: typedef std::output_iterator_tag iterator_category; typedef output_proxy
value_type; typedef output_proxy
reference; typedef void pointer; typedef void difference_type; output_iterator_archetype(detail::dummy_constructor) { } output_iterator_archetype(const self&) { } self& operator=(const self&) { return *this; } bool operator==(const self&) const { return true; } bool operator!=(const self&) const { return true; } reference operator*() const { return output_proxy
(); } self& operator++() { return *this; } self operator++(int) { return *this; } private: output_iterator_archetype() { } }; template
class input_output_iterator_archetype { private: typedef input_output_iterator_archetype self; struct in_out_tag : public std::input_iterator_tag, public std::output_iterator_tag { }; public: typedef in_out_tag iterator_category; typedef T value_type; struct reference { reference& operator=(const T&) { return *this; } operator value_type() { return static_object
::get(); } }; typedef const T* pointer; typedef std::ptrdiff_t difference_type; input_output_iterator_archetype() { } self& operator=(const self&) { return *this; } bool operator==(const self&) const { return true; } bool operator!=(const self&) const { return true; } reference operator*() const { return reference(); } self& operator++() { return *this; } self operator++(int) { return *this; } }; template
class forward_iterator_archetype { public: typedef forward_iterator_archetype self; public: typedef std::forward_iterator_tag iterator_category; typedef T value_type; typedef const T& reference; typedef T const* pointer; typedef std::ptrdiff_t difference_type; forward_iterator_archetype() { } self& operator=(const self&) { return *this; } bool operator==(const self&) const { return true; } bool operator!=(const self&) const { return true; } reference operator*() const { return static_object
::get(); } self& operator++() { return *this; } self operator++(int) { return *this; } }; template
class mutable_forward_iterator_archetype { public: typedef mutable_forward_iterator_archetype self; public: typedef std::forward_iterator_tag iterator_category; typedef T value_type; typedef T& reference; typedef T* pointer; typedef std::ptrdiff_t difference_type; mutable_forward_iterator_archetype() { } self& operator=(const self&) { return *this; } bool operator==(const self&) const { return true; } bool operator!=(const self&) const { return true; } reference operator*() const { return static_object
::get(); } self& operator++() { return *this; } self operator++(int) { return *this; } }; template
class bidirectional_iterator_archetype { public: typedef bidirectional_iterator_archetype self; public: typedef std::bidirectional_iterator_tag iterator_category; typedef T value_type; typedef const T& reference; typedef T* pointer; typedef std::ptrdiff_t difference_type; bidirectional_iterator_archetype() { } self& operator=(const self&) { return *this; } bool operator==(const self&) const { return true; } bool operator!=(const self&) const { return true; } reference operator*() const { return static_object
::get(); } self& operator++() { return *this; } self operator++(int) { return *this; } self& operator--() { return *this; } self operator--(int) { return *this; } }; template
class mutable_bidirectional_iterator_archetype { public: typedef mutable_bidirectional_iterator_archetype self; public: typedef std::bidirectional_iterator_tag iterator_category; typedef T value_type; typedef T& reference; typedef T* pointer; typedef std::ptrdiff_t difference_type; mutable_bidirectional_iterator_archetype() { } self& operator=(const self&) { return *this; } bool operator==(const self&) const { return true; } bool operator!=(const self&) const { return true; } reference operator*() const { return static_object
::get(); } self& operator++() { return *this; } self operator++(int) { return *this; } self& operator--() { return *this; } self operator--(int) { return *this; } }; template
class random_access_iterator_archetype { public: typedef random_access_iterator_archetype self; public: typedef std::random_access_iterator_tag iterator_category; typedef T value_type; typedef const T& reference; typedef T* pointer; typedef std::ptrdiff_t difference_type; random_access_iterator_archetype() { } self& operator=(const self&) { return *this; } bool operator==(const self&) const { return true; } bool operator!=(const self&) const { return true; } reference operator*() const { return static_object
::get(); } self& operator++() { return *this; } self operator++(int) { return *this; } self& operator--() { return *this; } self operator--(int) { return *this; } reference operator[](difference_type) const { return static_object
::get(); } self& operator+=(difference_type) { return *this; } self& operator-=(difference_type) { return *this; } difference_type operator-(const self&) const { return difference_type(); } self operator+(difference_type) const { return *this; } self operator-(difference_type) const { return *this; } bool operator<(const self&) const { return true; } bool operator<=(const self&) const { return true; } bool operator>(const self&) const { return true; } bool operator>=(const self&) const { return true; } }; template
random_access_iterator_archetype
operator+(typename random_access_iterator_archetype
::difference_type, const random_access_iterator_archetype
& x) { return x; } template
class mutable_random_access_iterator_archetype { public: typedef mutable_random_access_iterator_archetype self; public: typedef std::random_access_iterator_tag iterator_category; typedef T value_type; typedef T& reference; typedef T* pointer; typedef std::ptrdiff_t difference_type; mutable_random_access_iterator_archetype() { } self& operator=(const self&) { return *this; } bool operator==(const self&) const { return true; } bool operator!=(const self&) const { return true; } reference operator*() const { return static_object
::get(); } self& operator++() { return *this; } self operator++(int) { return *this; } self& operator--() { return *this; } self operator--(int) { return *this; } reference operator[](difference_type) const { return static_object
::get(); } self& operator+=(difference_type) { return *this; } self& operator-=(difference_type) { return *this; } difference_type operator-(const self&) const { return difference_type(); } self operator+(difference_type) const { return *this; } self operator-(difference_type) const { return *this; } bool operator<(const self&) const { return true; } bool operator<=(const self&) const { return true; } bool operator>(const self&) const { return true; } bool operator>=(const self&) const { return true; } }; template
mutable_random_access_iterator_archetype
operator+ (typename mutable_random_access_iterator_archetype
::difference_type, const mutable_random_access_iterator_archetype
& x) { return x; } } // namespace boost #endif // BOOST_CONCEPT_ARCHETYPES_H
concept_archetype.hpp
Page URL
File URL
Prev
18/113
Next
Download
( 23 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.