Velocity Reviews

Velocity Reviews (http://www.velocityreviews.com/forums/index.php)
-   Java (http://www.velocityreviews.com/forums/f30-java.html)
-   -   BitSet Class Implementation (http://www.velocityreviews.com/forums/t388679-bitset-class-implementation.html)

Erick Crouse 11-16-2006 11:27 PM

BitSet Class Implementation
 
Hello Everyone,

I need a question answered concerning the BitSet class. The problem is
that the public methods which manipulate a set of bits requires a
BitSet object as both the caller and argument to the method...

private BitSet A = new BitSet(16),
private BitSet B = new BitSet(16),

// do some manipulations with BitSet... and then...

A.and(B); // Results in a different A (B is unchanged)
A.xor(B); // Again results in a different A (B is unchanged)
// Interface: public void and( BitSet bits) -
BitSet;

The problem with this is that I prefer both A and B BitSet objects
remain the same while resulting in a new BitSet object say C using an
interface similar to -> public BitSet and( BitSet A, BitSet B) -
BitSet. With the current implementation of BitSet I would need to do
some sort of clone implementation (which seems like overkill) or
instantiate two identical A objects, say A1 and A2, one of which gets
operated on and then the other remains original for other purposes (
which seems a little awkward having to instantiate identical objects ),
Can anyone suggest what they would do in this situation where the
implementation operates either operand?

Thanks a Million,

EVAC


Daniel Pitts 11-17-2006 12:32 AM

Re: BitSet Class Implementation
 

Erick Crouse wrote:
> Hello Everyone,
>
> I need a question answered concerning the BitSet class. The problem is
> that the public methods which manipulate a set of bits requires a
> BitSet object as both the caller and argument to the method...
>
> private BitSet A = new BitSet(16),
> private BitSet B = new BitSet(16),
>
> // do some manipulations with BitSet... and then...
>
> A.and(B); // Results in a different A (B is unchanged)
> A.xor(B); // Again results in a different A (B is unchanged)
> // Interface: public void and( BitSet bits) -
> BitSet;
>
> The problem with this is that I prefer both A and B BitSet objects
> remain the same while resulting in a new BitSet object say C using an
> interface similar to -> public BitSet and( BitSet A, BitSet B) -
> BitSet. With the current implementation of BitSet I would need to do
> some sort of clone implementation (which seems like overkill) or
> instantiate two identical A objects, say A1 and A2, one of which gets
> operated on and then the other remains original for other purposes (
> which seems a little awkward having to instantiate identical objects ),
> Can anyone suggest what they would do in this situation where the
> implementation operates either operand?
>
> Thanks a Million,
>
> EVAC


BitSet does have a clone. There wouldn't be any way to compute a.and(b)
without either mutating a, or cloning a and then mutating the clone.

If its that important to your design, I would create a wrapper class
called ImmutableBitSet which will handle the cloning of new bitsets for
you.


Erick Crouse 11-20-2006 03:41 AM

Re: BitSet Class Implementation
 
Thanks Daniel.


Daniel Pitts wrote:
> Erick Crouse wrote:
> > Hello Everyone,
> >
> > I need a question answered concerning the BitSet class. The problem is
> > that the public methods which manipulate a set of bits requires a
> > BitSet object as both the caller and argument to the method...
> >
> > private BitSet A = new BitSet(16),
> > private BitSet B = new BitSet(16),
> >
> > // do some manipulations with BitSet... and then...
> >
> > A.and(B); // Results in a different A (B is unchanged)
> > A.xor(B); // Again results in a different A (B is unchanged)
> > // Interface: public void and( BitSet bits) -
> > BitSet;
> >
> > The problem with this is that I prefer both A and B BitSet objects
> > remain the same while resulting in a new BitSet object say C using an
> > interface similar to -> public BitSet and( BitSet A, BitSet B) -
> > BitSet. With the current implementation of BitSet I would need to do
> > some sort of clone implementation (which seems like overkill) or
> > instantiate two identical A objects, say A1 and A2, one of which gets
> > operated on and then the other remains original for other purposes (
> > which seems a little awkward having to instantiate identical objects ),
> > Can anyone suggest what they would do in this situation where the
> > implementation operates either operand?
> >
> > Thanks a Million,
> >
> > EVAC

>
> BitSet does have a clone. There wouldn't be any way to compute a.and(b)
> without either mutating a, or cloning a and then mutating the clone.
>
> If its that important to your design, I would create a wrapper class
> called ImmutableBitSet which will handle the cloning of new bitsets for
> you.



Mark Rafn 11-20-2006 04:18 AM

Re: BitSet Class Implementation
 
Erick Crouse <crouse@physics.wm.edu> wrote:
>I need a question answered concerning the BitSet class. The problem is
>that the public methods which manipulate a set of bits requires a
>BitSet object as both the caller and argument to the method...
>
>private BitSet A = new BitSet(16),
>private BitSet B = new BitSet(16),
>// do some manipulations with BitSet... and then...
>A.and(B); // Results in a different A (B is unchanged)
>A.xor(B); // Again results in a different A (B is unchanged)


Right. That's how it works.

>The problem with this is that I prefer both A and B BitSet objects
>remain the same while resulting in a new BitSet object say C using an
>interface similar to -> public BitSet and( BitSet A, BitSet B) -
>BitSet.


something like:
public static BitSet andBitSets(BitSet A, BitSet B) {
BitSet retval = (BitSet)A.clone();
retval.and(B);
return retval;
}

>With the current implementation of BitSet I would need to do
>some sort of clone implementation (which seems like overkill)


BitSet implements Clonable. You don't need to do anything but call it.

>Can anyone suggest what they would do in this situation where the
>implementation operates either operand?


Use clone() as intended. This works just fine.
--
Mark Rafn dagon@dagon.net <http://www.dagon.net/>

Daniel Pitts 11-20-2006 06:45 PM

Re: BitSet Class Implementation
 

Erick Crouse wrote:
> Thanks Daniel.


As Andrew Thompson might say, your future lack of top posting will be
thanks enough.

You're welcome,
Daniel.



All times are GMT. The time now is 05:25 PM.

Powered by vBulletin®. Copyright ©2000 - 2014, vBulletin Solutions, Inc.
SEO by vBSEO ©2010, Crawlability, Inc.