00001 /* 00002 Copyright (c) 2007-2009 Takashi Kitao 00003 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 00007 are met: 00008 00009 1. Redistributions of source code must retain the above copyright 00010 ` notice, this list of conditions and the following disclaimer. 00011 00012 2. Redistributions in binary form must reproduce the above copyright 00013 ` notice, this list of conditions and the following disclaimer in the 00014 ` documentation and/or other materials provided with the distribution. 00015 00016 3. The name of the author may not be used to endorse or promote products 00017 ` derived from this software without specific prior written permission. 00018 00019 THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR 00020 IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES 00021 OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. 00022 IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, 00023 INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT 00024 NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 00025 DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 00026 THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 00027 (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF 00028 THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 00029 */ 00030 00031 00038 template<class D, class T> class pgFlag 00039 { 00040 public: 00044 pgFlag() 00045 { 00046 clear(); 00047 } 00048 00054 bool operator==(pgFlag<D, T> flag) const 00055 { 00056 return (m_flag == flag.m_flag); 00057 } 00058 00064 bool operator!=(pgFlag<D, T> flag) const 00065 { 00066 return (m_flag != flag.m_flag); 00067 } 00068 00073 D getValue() const 00074 { 00075 return m_flag; 00076 } 00077 00083 bool isOn(T flag) const 00084 { 00085 return (m_flag & (1 << flag)) ? true : false; 00086 } 00087 00093 bool isOff(T flag) const 00094 { 00095 return (m_flag & (1 << flag)) ? false : true; 00096 } 00097 00102 void setOn(T flag) 00103 { 00104 m_flag |= (1 << flag); 00105 } 00106 00111 void setOff(T flag) 00112 { 00113 m_flag &= ~(1 << flag); 00114 } 00115 00121 void set(T flag, bool is_on) 00122 { 00123 if (is_on) 00124 { 00125 setOn(flag); 00126 } 00127 else 00128 { 00129 setOff(flag); 00130 } 00131 } 00132 00136 void clear() 00137 { 00138 m_flag = 0; 00139 } 00140 00141 private: 00142 D m_flag; 00143 };
1.5.8