From b6f831d6be0132f01deed28efdfa4023c0e804ed Mon Sep 17 00:00:00 2001 From: Myun2 Date: Thu, 9 Sep 2010 03:45:42 +0900 Subject: [PATCH] =?utf8?q?bits.hpp:=20bit=5Fptr=20=E5=AE=9F=E8=A3=85?= =?utf8?q?=E4=B8=AD=20(=5Fbit=E3=81=AE=E5=86=85=E9=83=A8=E3=82=AF=E3=83=A9?= =?utf8?q?=E3=82=B9=E8=BF=BD=E5=8A=A0)?= MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit --- roast/include/roast/memory/bits.hpp | 35 +++++++++++++++++++++++++++++++++++ 1 file changed, 35 insertions(+) diff --git a/roast/include/roast/memory/bits.hpp b/roast/include/roast/memory/bits.hpp index 53456a87..072fa55f 100644 --- a/roast/include/roast/memory/bits.hpp +++ b/roast/include/roast/memory/bits.hpp @@ -18,6 +18,26 @@ namespace roast T* m_p; size_t m_index; public: + class _bit + { + protected: + bit_ptr& parent; + public: + _bit(bit_ptr& in) : parent(in) {} + + _bit operator = (bool b){ parent.set(b); return *this; } + operator bool(){ return parent.get(); } + operator char(){ return parent.get(); } + operator unsigned char(){ return parent.get(); } + operator short(){ return parent.get(); } + operator unsigned short(){ return parent.get(); } + operator int(){ return parent.get(); } + operator unsigned int(){ return parent.get(); } + operator long(){ return parent.get(); } + operator unsigned long(){ return parent.get(); } + }; + + public: bit_ptr(T* p, size_t index=0) : m_p(p), m_index(index) {} bit_ptr& operator ++(int){ m_index++; return *this; } @@ -28,6 +48,21 @@ namespace roast bit_ptr& operator -=(int n){ m_index-=n; return *this; } bit_ptr& operator +(int n){ bit_ptr work=*this; work+=n; return work; } bit_ptr& operator -(int n){ bit_ptr work=*this; work-=n; return work; } + + _bit operator *(){ return _bit(*this); } + + void set(bool b) + { + size_t ary_index = m_index / TypeBits; + size_t bit_index = m_index % TypeBits; + m_p[ary_index] |= (b << bit_index); + } + bool get() + { + size_t ary_index = m_index / TypeBits; + size_t bit_index = m_index % TypeBits; + return m_p[ary_index] & (1 << bit_index); + } }; //template -- 2.11.0