00001 /******************************************************************************* 00002 * Copyright (C) 2004 Vintela, Inc. All rights reserved. 00003 * Copyright (C) 2005 Novell, Inc. All rights reserved. 00004 * 00005 * Redistribution and use in source and binary forms, with or without 00006 * modification, are permitted provided that the following conditions are met: 00007 * 00008 * - Redistributions of source code must retain the above copyright notice, 00009 * this list of conditions and the following disclaimer. 00010 * 00011 * - Redistributions in binary form must reproduce the above copyright notice, 00012 * this list of conditions and the following disclaimer in the documentation 00013 * and/or other materials provided with the distribution. 00014 * 00015 * - Neither the name of Vintela, Inc., Novell, Inc., nor the names of its 00016 * contributors may be used to endorse or promote products derived from this 00017 * software without specific prior written permission. 00018 * 00019 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ``AS IS'' 00020 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 00021 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 00022 * ARE DISCLAIMED. IN NO EVENT SHALL Vintela, Inc., Novell, Inc., OR THE 00023 * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, 00024 * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, 00025 * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; 00026 * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, 00027 * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR 00028 * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF 00029 * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 00030 *******************************************************************************/ 00031 00032 00038 #ifndef BLOCXX_BOOL_HPP_INCLUDE_GUARD_ 00039 #define BLOCXX_BOOL_HPP_INCLUDE_GUARD_ 00040 #include "blocxx/BLOCXX_config.h" 00041 #include "blocxx/CommonFwd.hpp" 00042 #include <iosfwd> 00043 00044 namespace BLOCXX_NAMESPACE 00045 { 00046 00055 class BLOCXX_COMMON_API Bool 00056 { 00057 public: 00058 00062 Bool() : m_val(false) {} 00067 Bool(bool val) : m_val(val) {} 00072 Bool(const Bool& arg) : m_val(arg.m_val) {} 00078 Bool& operator= (const Bool& arg) { m_val = arg.m_val; return *this; } 00085 bool operator== (const bool arg) const { return m_val == arg; } 00092 bool operator== (const Bool& arg) const { return m_val == arg.m_val; } 00099 bool operator!= (const bool arg) const { return m_val != arg; } 00106 bool operator!= (const Bool& arg) const { return m_val != arg.m_val; } 00110 operator bool() const { return m_val; } 00115 bool operator !() const { return !m_val; } 00120 String toString() const; 00125 void writeObject(std::ostream& ostrm) const; 00130 void readObject(std::istream& istrm); 00137 friend bool operator< (const Bool& b1, const Bool& b2) 00138 { 00139 return b1.m_val < b2.m_val; 00140 } 00147 friend bool operator!=(bool b1, Bool b2) 00148 { 00149 return b1 < b2.m_val; 00150 } 00151 private: 00152 // These are private/unimplemented to help prevent unintended errors of 00153 // passing a pointer to the constructor. 00154 Bool(const void*); 00155 Bool(void*); 00156 Bool(volatile const void*); 00157 Bool(volatile void*); 00158 bool m_val; 00159 }; 00160 BLOCXX_EXPORT_TEMPLATE(BLOCXX_COMMON_API, Array, Bool); 00161 00168 BLOCXX_COMMON_API std::ostream& operator << (std::ostream& ostrm, const Bool& arg); 00169 00170 } // end namespace BLOCXX_NAMESPACE 00171 00172 #endif