| VRS - The Virtual Rendering System |
| version 3.3 |
00001 /********************************************************************** 00002 VRS - The Virtual Rendering System 00003 Copyright (C) 2001 Computer Graphics Systems Group at the 00004 Hasso-Plattner-Institute, Potsdam, Germany. 00005 This library is free software; you can redistribute it and/or 00006 modify it under the terms of the GNU Lesser General Public 00007 License as published by the Free Software Foundation; either 00008 version 2.1 of the License, or (at your option) any later version. 00009 This library is distributed in the hope that it will be useful, but 00010 WITHOUT ANY WARRANTY; without even the implied warranty of 00011 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. 00012 See the GNU Lesser General Public License for more details. 00013 You should have received a copy of the GNU Lesser+ General Public 00014 License along with this library; if not, write to the FreeSoftware 00015 Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA, 02111-1307, USA. 00016 **********************************************************************/ 00017 // $Id: filtertag.h 4633 2005-01-03 01:43:11Z klimetschek $ 00018 // $Date: 2005-01-03 02:43:11 +0100 (Mon, 03 Jan 2005) $ 00019 // $Revision: 4633 $ 00020 // $State$ 00021 // $Author: klimetschek $ 00022 // 00023 // $Log$ 00024 // Revision 1.21 2005/01/03 01:43:07 klimetschek 00025 // - modified win32 project layout, splitted vrs.vcproj into vrs_container, vrs_core, vrs_sg, vrs_image, vrs_opengl and vrs_io 00026 // - removed vrs.vcproj 00027 // minor things: 00028 // - added all glutexamples to vrs4glut.sln 00029 // - fixed some problems in glutexamples 00030 // - removed all project references from all VS projects (using solution wide project dependencies instead) 00031 // 00032 // Revision 1.20 2004/11/05 13:58:09 basch 00033 // Class comment changed (Doxygen style) 00034 // 00035 // Revision 1.19 2004/03/12 16:28:38 baumann 00036 // macros VRS_NAMESPACE_BEGIN/_END expanded and removed 00037 // 00038 // Revision 1.18 2004/01/28 15:20:30 neumann 00039 // serialization mechanism: 00040 // - adjusted method serialize for usage with new class SerializationManager 00041 // 00042 // Revision 1.17 2004/01/19 11:43:56 baumann 00043 // serialization mechanism improved 00044 // 00045 // Revision 1.16 2004/01/19 07:28:03 baumann 00046 // serialization mechanism improved 00047 // 00048 // Revision 1.15 2003/11/07 14:19:24 kirsch 00049 // removed leading underscore from include guards 00050 // 00051 // Revision 1.14 2003/07/23 17:04:49 baumann 00052 // code cleanup (especially untabified) 00053 // 00054 // Revision 1.13 2003/07/07 00:53:38 grabs 00055 // reviewed, some improvements on code (not design) level. 00056 // 00057 // Revision 1.12 2002/12/12 09:12:12 lorenz 00058 // corrected spelling: BIT_EPLACE -> BIT_REPLACE 00059 // 00060 // Revision 1.11 2002/07/29 10:37:40 baumann 00061 // static attribute removed 00062 // 00063 // Revision 1.10 2002/03/03 21:44:24 kosta 00064 // VRS_TYPEINFO-macro rewritten 00065 // 00066 // Revision 1.9 2002/02/19 10:34:08 kosta 00067 // undone all changes since 2002-02-15 00068 // 00069 // Revision 1.6 2002/02/05 07:48:25 kosta 00070 // new persistency macros: 00071 // VRS_SERIALIZABLE(CLASS_NAME); 00072 // VRS_SERIALIZABLE_ABSTRACT_CLASS(CLASS_NAME); 00073 // VRS_SERIALIZABLE_NO_SO_CLASS(CLASS_NAME) 00074 // 00075 // Revision 1.5 2002/02/04 13:07:19 kosta 00076 // VRS_SERIALIZABLE macros completely rewritten 00077 // 00078 // Revision 1.4 2002/01/15 16:25:53 kosta 00079 // macros rewritten for a better namespace support 00080 // 00081 // Revision 1.3 2001/11/13 16:36:30 kirsch 00082 // changed line feed to unix style (removed control-M) 00083 // 00084 // Revision 1.2 2001/07/02 10:14:29 kersting 00085 // changes due to enum definition 00086 // 00087 // Revision 1.1.1.1 2001/06/08 08:09:20 kirsch 00088 // imported alpha-version by olli 00089 // 00090 00091 00092 #ifndef VRS_FILTERTAG_H 00093 #define VRS_FILTERTAG_H 00094 00095 #include <vrs/monoattribute.h> 00096 00097 namespace VRS { 00098 00100 class VRS_CORE_API FilterTag : public MonoAttribute { 00101 00102 public: 00103 enum CombiOp { 00104 BIT_AND, 00105 BIT_OR, 00106 BIT_XOR, 00107 BIT_NOT_AND, 00108 BIT_NOT_OR, 00109 BIT_NOT_XOR, 00110 BIT_REPLACE 00111 }; 00112 VRS_SERIALIZABLE_CLASS_ENUM(CombiOp); 00113 00114 FilterTag(unsigned int bitfield = 0x0, 00115 CombiOp combination = FilterTag::BIT_OR); 00116 virtual ~FilterTag(); 00134 int size() const; 00139 void setCombination(FilterTag::CombiOp mode); 00140 FilterTag::CombiOp getCombination() const; 00144 unsigned int getBitField()const; 00145 void set(int index, bool onOff); 00146 bool get(int index) const; 00147 void flip(int index); 00153 void setAll(); 00154 void resetAll(); 00155 void flipAll(); 00159 void logicalAnd(const FilterTag* tag); 00160 void logicalOr(const FilterTag* tag); 00161 void logicalXor(const FilterTag* tag); 00165 //: this.bits = this.bits @ tag.bits 00166 00167 void logicalNotAnd(const FilterTag* tag); 00168 void logicalNotOr(const FilterTag* tag); 00169 void logicalNotXor(const FilterTag* tag); 00173 //: this.bits = this.bits @ (~tag.bits) 00174 00175 bool isEmpty() const; 00176 bool isEqual(const FilterTag* tag) const; 00177 bool isDisjoint(const FilterTag* tag) const; 00178 bool hasCommons(const FilterTag* tag) const; 00179 bool contains(const FilterTag* tag) const; 00188 static FilterTag* newUniqueTag(FilterTag::CombiOp combination = FilterTag::BIT_OR); 00189 static bool canAllocUniqueTag(); 00190 bool isUnique() const; 00206 static const ID& currentBitsId(); 00208 00209 VRS_TYPEINFO(FilterTag, MonoAttribute); 00210 VRS_SERIALIZABLE(FilterTag); 00211 00212 private: 00213 FilterTag::CombiOp combination_; 00214 unsigned int b_; 00215 unsigned int original_; 00216 bool unique_; 00217 00218 friend class FilterTagPainter; 00219 friend class Filter; 00220 }; 00221 00222 inline unsigned int FilterTag::getBitField()const{ return b_; } 00223 00224 00225 inline void FilterTag::logicalAnd(const FilterTag* t) { b_ &= t->b_; modified(); } 00226 inline void FilterTag::logicalXor(const FilterTag* t) { b_ ^= t->b_; modified(); } 00227 inline void FilterTag::logicalOr(const FilterTag* t) { b_ |= t->b_; modified(); } 00228 00229 inline void FilterTag::logicalNotAnd(const FilterTag* t) { b_ &= (~t->b_); modified(); } 00230 inline void FilterTag::logicalNotXor(const FilterTag* t) { b_ ^= (~t->b_); modified(); } 00231 inline void FilterTag::logicalNotOr(const FilterTag* t) { b_ |= (~t->b_); modified(); } 00232 00233 inline void FilterTag::setAll() { b_ = ~0; modified(); } 00234 inline void FilterTag::resetAll() { b_ = 0; modified(); } 00235 inline void FilterTag::flipAll() { b_ = ~b_; modified(); } 00236 00237 inline bool FilterTag::isEmpty() const { return b_ == 0; } 00238 inline bool FilterTag::isEqual(const FilterTag* t) const { return b_ == t->b_; } 00239 inline bool FilterTag::isDisjoint(const FilterTag* t) const { return !(b_ & t->b_); } 00240 inline bool FilterTag::hasCommons(const FilterTag* t) const { return b_ & t->b_ ? true : false; } 00241 inline bool FilterTag::contains(const FilterTag* t) const { return b_ == (b_ | t->b_); } 00242 00243 inline bool FilterTag::isUnique() const { return unique_; } 00244 00245 } // namespace VRS 00246 00247 #endif // VRS_FILTERTAG_H