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
/* Boost interval/interval.hpp header file * * Copyright 2002-2003 Herv� Br�nnimann, Guillaume Melquiond, Sylvain Pion * * 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) */ #ifndef BOOST_NUMERIC_INTERVAL_INTERVAL_HPP #define BOOST_NUMERIC_INTERVAL_INTERVAL_HPP #include
#include
#include
namespace boost { namespace numeric { namespace interval_lib { class comparison_error : public std::runtime_error { public: comparison_error() : std::runtime_error("boost::interval: uncertain comparison") { } }; } // namespace interval_lib /* * interval class */ template
class interval { private: struct interval_holder; struct number_holder; public: typedef T base_type; typedef Policies traits_type; T const &lower() const; T const &upper() const; interval(); interval(T const &v); template
interval(T1 const &v); interval(T const &l, T const &u); template
interval(T1 const &l, T2 const &u); interval(interval
const &r); template
interval(interval
const &r); template
interval(interval
const &r); interval &operator=(T const &v); template
interval &operator=(T1 const &v); interval &operator=(interval
const &r); template
interval &operator=(interval
const &r); template
interval &operator=(interval
const &r); void assign(const T& l, const T& u); static interval empty(); static interval whole(); static interval hull(const T& x, const T& y); interval& operator+= (const T& r); interval& operator+= (const interval& r); interval& operator-= (const T& r); interval& operator-= (const interval& r); interval& operator*= (const T& r); interval& operator*= (const interval& r); interval& operator/= (const T& r); interval& operator/= (const interval& r); bool operator< (const interval_holder& r) const; bool operator> (const interval_holder& r) const; bool operator<= (const interval_holder& r) const; bool operator>= (const interval_holder& r) const; bool operator== (const interval_holder& r) const; bool operator!= (const interval_holder& r) const; bool operator< (const number_holder& r) const; bool operator> (const number_holder& r) const; bool operator<= (const number_holder& r) const; bool operator>= (const number_holder& r) const; bool operator== (const number_holder& r) const; bool operator!= (const number_holder& r) const; // the following is for internal use only, it is not a published interface // nevertheless, it's public because friends don't always work correctly. interval(const T& l, const T& u, bool): low(l), up(u) {} void set_empty(); void set_whole(); void set(const T& l, const T& u); private: struct interval_holder { template
interval_holder(const interval
& r) : low(r.lower()), up(r.upper()) { typedef typename Policies2::checking checking2; if (checking2::is_empty(low, up)) throw interval_lib::comparison_error(); } const T& low; const T& up; }; struct number_holder { number_holder(const T& r) : val(r) { typedef typename Policies::checking checking; if (checking::is_nan(r)) throw interval_lib::comparison_error(); } const T& val; }; typedef typename Policies::checking checking; typedef typename Policies::rounding rounding; T low; T up; }; template
inline interval
::interval(): low(static_cast
(0)), up(static_cast
(0)) {} template
inline interval
::interval(T const &v): low(v), up(v) { if (checking::is_nan(v)) set_empty(); } template
template
inline interval
::interval(T1 const &v) { if (checking::is_nan(v)) set_empty(); else { rounding rnd; low = rnd.conv_down(v); up = rnd.conv_up (v); } } template
template
inline interval
::interval(T1 const &l, T2 const &u) { if (checking::is_nan(l) || checking::is_nan(u) || !(l <= u)) set_empty(); else { rounding rnd; low = rnd.conv_down(l); up = rnd.conv_up (u); } } template
inline interval
::interval(T const &l, T const &u): low(l), up(u) { if (checking::is_nan(l) || checking::is_nan(u) || !(l <= u)) set_empty(); } template
inline interval
::interval(interval
const &r): low(r.lower()), up(r.upper()) {} template
template
inline interval
::interval(interval
const &r): low(r.lower()), up(r.upper()) { typedef typename Policies1::checking checking1; if (checking1::is_empty(r.lower(), r.upper())) set_empty(); } template
template
inline interval
::interval(interval
const &r) { typedef typename Policies1::checking checking1; if (checking1::is_empty(r.lower(), r.upper())) set_empty(); else { rounding rnd; low = rnd.conv_down(r.lower()); up = rnd.conv_up (r.upper()); } } template
inline interval
&interval
::operator=(T const &v) { if (checking::is_nan(v)) set_empty(); else low = up = v; return *this; } template
template
inline interval
&interval
::operator=(T1 const &v) { if (checking::is_nan(v)) set_empty(); else { rounding rnd; low = rnd.conv_down(v); up = rnd.conv_up (v); } return *this; } template
inline interval
&interval
::operator=(interval
const &r) { low = r.lower(); up = r.upper(); return *this; } template
template
inline interval
&interval
::operator=(interval
const &r) { typedef typename Policies1::checking checking1; if (checking1::is_empty(r.lower(), r.upper())) set_empty(); else { low = r.lower(); up = r.upper(); } return *this; } template
template
inline interval
&interval
::operator=(interval
const &r) { typedef typename Policies1::checking checking1; if (checking1::is_empty(r.lower(), r.upper())) set_empty(); else { rounding rnd; low = rnd.conv_down(r.lower()); up = rnd.conv_up (r.upper()); } return *this; } template
inline void interval
::assign(const T& l, const T& u) { if (checking::is_nan(l) || checking::is_nan(u) || !(l <= u)) set_empty(); else set(l, u); } template
inline void interval
::set(const T& l, const T& u) { low = l; up = u; } template
inline void interval
::set_empty() { low = checking::empty_lower(); up = checking::empty_upper(); } template
inline void interval
::set_whole() { low = checking::neg_inf(); up = checking::pos_inf(); } template
inline interval
interval
::hull(const T& x, const T& y) { bool bad_x = checking::is_nan(x); bool bad_y = checking::is_nan(y); if (bad_x) if (bad_y) return interval::empty(); else return interval(y, y, true); else if (bad_y) return interval(x, x, true); if (x <= y) return interval(x, y, true); else return interval(y, x, true); } template
inline interval
interval
::empty() { return interval
(checking::empty_lower(), checking::empty_upper(), true); } template
inline interval
interval
::whole() { return interval
(checking::neg_inf(), checking::pos_inf(), true); } template
inline const T& interval
::lower() const { return low; } template
inline const T& interval
::upper() const { return up; } /* * interval/interval comparisons */ template
inline bool interval
::operator< (const interval_holder& r) const { if (!checking::is_empty(low, up)) { if (up < r.low) return true; else if (low >= r.up) return false; } throw interval_lib::comparison_error(); } template
inline bool interval
::operator> (const interval_holder& r) const { if (!checking::is_empty(low, up)) { if (low > r.up) return true; else if (up <= r.low) return false; } throw interval_lib::comparison_error(); } template
inline bool interval
::operator<= (const interval_holder& r) const { if (!checking::is_empty(low, up)) { if (up <= r.low) return true; else if (low > r.up) return false; } throw interval_lib::comparison_error(); } template
inline bool interval
::operator>= (const interval_holder& r) const { if (!checking::is_empty(low, up)) { if (low >= r.up) return true; else if (up < r.low) return false; } throw interval_lib::comparison_error(); } template
inline bool interval
::operator== (const interval_holder& r) const { if (!checking::is_empty(low, up)) { if (up == r.low && low == r.up) return true; else if (up < r.low || low > r.up) return false; } throw interval_lib::comparison_error(); } template
inline bool interval
::operator!= (const interval_holder& r) const { if (!checking::is_empty(low, up)) { if (up < r.low || low > r.up) return true; else if (up == r.low && low == r.up) return false; } throw interval_lib::comparison_error(); } /* * interval/number comparisons */ template
inline bool interval
::operator< (const number_holder& r) const { if (!checking::is_empty(low, up)) { if (up < r.val) return true; else if (low >= r.val) return false; } throw interval_lib::comparison_error(); } template
inline bool interval
::operator> (const number_holder& r) const { if (!checking::is_empty(low, up)) { if (low > r.val) return true; else if (up <= r.val) return false; } throw interval_lib::comparison_error(); } template
inline bool interval
::operator<= (const number_holder& r) const { if (!checking::is_empty(low, up)) { if (up <= r.val) return true; else if (low > r.val) return false; } throw interval_lib::comparison_error(); } template
inline bool interval
::operator>= (const number_holder& r) const { if (!checking::is_empty(low, up)) { if (low >= r.val) return true; else if (up < r.val) return false; } throw interval_lib::comparison_error(); } template
inline bool interval
::operator== (const number_holder& r) const { if (!checking::is_empty(low, up)) { if (up == r.val && low == r.val) return true; else if (up < r.val || low > r.val) return false; } throw interval_lib::comparison_error(); } template
inline bool interval
::operator!= (const number_holder& r) const { if (!checking::is_empty(low, up)) { if (up < r.val || low > r.val) return true; else if (up == r.val && low == r.val) return false; } throw interval_lib::comparison_error(); } } // namespace numeric } // namespace boost #endif // BOOST_NUMERIC_INTERVAL_INTERVAL_HPP
interval.hpp
Page URL
File URL
Prev
8/16
Next
Download
( 12 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.