From: Stefan Csomor Date: Mon, 28 Jul 2003 08:39:37 +0000 (+0000) Subject: xti introduction X-Git-Url: https://git.saurik.com/wxWidgets.git/commitdiff_plain/06305c29bd49e4e34b60fad44302b3bdc4d2a9d6 xti introduction git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@22338 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775 --- diff --git a/include/wx/set.h b/include/wx/set.h new file mode 100644 index 0000000000..4462982539 --- /dev/null +++ b/include/wx/set.h @@ -0,0 +1,113 @@ +///////////////////////////////////////////////////////////////////////////// +// Name: wx/set.h +// Purpose: a bitset suited for replacing the current style flags +// Author: Stefan Csomor +// Modified by: +// Created: 27/07/03 +// RCS-ID: $Id$ +// Copyright: (c) 2003 Stefan Csomor +// Licence: wxWindows licence +///////////////////////////////////////////////////////////////////////////// + +#ifndef _WX_SETH__ +#define _WX_SETH__ + +#if defined(__GNUG__) && !defined(__APPLE__) +#pragma interface "set.h" +#endif + +// wxSet should be applied to an enum, then this can be used like +// bitwise operators but keeps the type safety and information, the +// enums must be in a sequence , their value determines the bit position +// that they represent + +template class wxSet +{ + friend class wxEnumData ; +public: + wxSet() { m_data = 0; } + wxSet(const wxSet &src) { m_data = src.m_data; } + wxSet(const T el) { m_data |= 1 << el; } + wxSet &operator =(const wxSet &rhs) + { + m_data = rhs.m_data; + return *this; + } + wxSet &operator +=(const wxSet &rhs) // union + { + m_data |= rhs.m_data; + return *this; + } + wxSet &operator -=(const wxSet &rhs) // difference + { + m_data ^= rhs.m_data; + return *this; + } + + wxSet &operator *=(const wxSet &rhs) // intersection + { + m_data &= rhs.m_data; + return *this; + } + + wxSet operator +(const wxSet &rhs) const // union + { + wxSet s; + s.m_data = m_data | rhs.m_data; + return s; + } + wxSet operator -(const wxSet &rhs) const // difference + { + wxSet s; + s.m_data = m_data ^ rhs.m_data; + return s; + } + wxSet operator *(const wxSet &rhs) const // intersection + { + wxSet s; + s.m_data = m_data & rhs.m_data; + return s; + } + + wxSet& Set(const T el) //Add element + { + m_data |= 1 << el; + return *this; + } + wxSet& Clear(const T el) //remove element + { + m_data &= ~(1 << el); + return *this; + } + + bool Contains(const T el) const + { + return (m_data & (1 << el)) ? true : false; + } + + wxSet &Clear() + { + m_data = 0; + return *this; + } + + bool Empty() const + { + return m_data == 0; + } + + bool operator ==(const wxSet &rhs) const + { + return m_data == rhs.m_data; + } + + bool operator !=(const wxSet &rhs) const + { + return !operator==(rhs); + } +private : + int m_data; +}; + + +#endif \ No newline at end of file