Jump to content

  • Log In with Google      Sign In   
  • Create Account


Bitset data access operator problem


Old topic!
Guest, the last post of this topic is over 60 days old and at this point you may not reply in this topic. If you wish to continue this conversation start a new topic.

  • You cannot reply to this topic
2 replies to this topic

#1 Misery   Members   -  Reputation: 247

Like
0Likes
Like

Posted 27 June 2012 - 01:23 AM

Hello,

I am in a need of creating a bitset. However I cannot think of any solution how to make an operator that would set the proper bit to true or false in such manner:

bitset(i)=true;
bitset(j)=false;

where i, j are the bits i want to set to proper value.

I have checked BOOST dynamic bitset, however I cannot figure out the soution. I know that I have to use some helper class. This is where I'm stuck. Very simplified, the problem is:

class Block  //helper class
{
  public:
	int Container;
	int mask;  //how do I set the mask?

  Block& operator=(bool x)  { Assign(x);   return *this; }

  void Assign(bool x) { x? do_set() : do_reset(); }
  void do_set() { Container |= mask; }
  void do_reset() { Container &= ~mask; }
};

class bitset
{
  public:
   int Data[4]; //array of ints - here only 4
   int cs;  //container size

   bitset()
   {
	  cs=sizeof(int)*8;
   }

   int operator () (int i) const 
   {
		return Data[i/cs] & (1 << (i%cs));
   }

   int& operator () (int i) //int, bool or whatever, Block?? I have no idea
   {
	   //what do I add here to be able to do substitution like mentioned above?
   }
};

Thanks in advance for any sugestions,
Misery

Edited by Misery, 27 June 2012 - 01:25 AM.


Sponsor:

#2 Álvaro   Crossbones+   -  Reputation: 10625

Like
1Likes
Like

Posted 27 June 2012 - 07:39 AM

I didn't read the code you posted, but I know how to solve your problem. You define an `operator()(int)' --although I would prefer `operator[](int)', so it looks more like an array-- that returns an object that contains enough information to locate the bit. Something like this:
class BitReference {
  unsigned char *byte;
  int bit;

  // ...
};

You then define `operator=(bool)' for that object in the obvious way. You probably also want to provide an implicit conversion to `bool'.

#3 Misery   Members   -  Reputation: 247

Like
0Likes
Like

Posted 28 June 2012 - 01:02 AM

Thanks Alvaro :]

Edited by Misery, 28 June 2012 - 01:03 AM.





Old topic!
Guest, the last post of this topic is over 60 days old and at this point you may not reply in this topic. If you wish to continue this conversation start a new topic.



PARTNERS