Hi John,

Sure, here is the code to demonstrate the problem:


---------------------------------------------------------------------------------------------
#include <stdlib.h>
#include <stdio.h>
#include <iostream>
#include <bitvector.h>

int main(int argc, char *argv[]) {
  ibis::bitvector bv;
  ibis::bitvector bv2;

  bv2.setBit(0,1);
  bv2.print(std::cout);
   for(int i = 0; i < 315; i++)
   {
      bv.setBit(i, 0);
   }
   bv.setBit(315,1);
   bv.print(std::cout);
   bv = bv2;
   bv.print(std::cout);
}

______________________________________________________


The output of this is:


This bitvector stores 0 bits of a 1-bit (1 set) sequence in a 0-word array
and one bit in the active word
                 0    1    1    2    2    3
            0123456789012345678901234567890
            -------------------------------
    40000000    1

This bitvector stores 310 bits of a 316-bit (1 set) sequence in a 1-word
array and 6 bits in the active word
                 0    1    1    2    2    3
            0123456789012345678901234567890
            -------------------------------
0    8000000a    310*0
    02000000    000001

This bitvector stores 310 bits of a 311-bit (1 set) sequence in a 1-word
array and one bit in the active word
                 0    1    1    2    2    3
            0123456789012345678901234567890
            -------------------------------
0    8000000a    310*0
    40000000    1

--------------------------------------------------------------------------------------------------------

Note that bv still has 310 0's out front when it should just be a single
1....


Hope that helps,

I fixed it by calling clear on bv before reassigning it.... Perhaps clear
should be called inside the "=" operator.

If you need anything else, let me know.....

Cheers,

Teryl



































On Tue, Mar 20, 2012 at 7:20 PM, K. John Wu <[email protected]> wrote:

> Hi, Teryl,
>
> Thanks for your patience.  I imagine that you have a small test
> program that demonstrate this little problem.  Would you mind sharing
> it with us?  It would save me some trouble of recreate it.
>
> Thanks.
>
> John
>
>
>
> On 3/19/12 1:19 PM, Teryl Taylor wrote:
> > Okay, looks like I found the problem.  The problem isn't with
> > adjustSize, it's with the bitvector "=" operator.    I had the
> > following setup similar to this:
> >
> > bitvector bitv =  "0000000000000000000000000000000000"
> > bitvector bitv2 = "1";
> >
> > I did a
> > bitv = bitv2
> >
> > and expected bitv  = "1"
> > but it actually was bitv = "0000000000000000000000000000000001"
> >
> > So that screwed up the  |= operation further down.
> >
> > The work around I used to solve this was to clear bitv before
> > assigning bitv2.
> >
> > bitv.clear();
> > bitv = bitv2;
> >
> > now bitv = "1"
> >
> >
> > Not sure if that is the intended usage of "=".
> >
> > Thanks John!
> >
> > Take Care,
> >
> > Teryl
> >
> >
> >
> >
> >
> > On Mon, Mar 19, 2012 at 2:56 PM, Teryl Taylor <[email protected]
> > <mailto:[email protected]>> wrote:
> >
> >     Hi John,
> >
> >     So looking into this a little more, it looks like appendFill (used
> >     by adjustSize) pushes the existing bitmap over and fills in the
> >     LSBs.  So  if I have a bitmap with 1 at the zero element, and I
> >     adust the size, to 10, the 1 gets pushed to over 10.  Was this the
> >     intended functionality of the function?  I'm looking for something
> >     that will leave the 1 in it's same location and put the zeros on
> >     the other side of it.  Is there an easy way to do that?
> >
> >     Best Regards,
> >
> >     Teryl
> >
> >
> >     On Mon, Mar 19, 2012 at 12:40 PM, Teryl Taylor
> >     <[email protected] <mailto:[email protected]>> wrote:
> >
> >         Hi John,
> >
> >         It looks like the adjustSize is the problem.      If I call
> >         adjustsSize(0, 316) on the vector, it prepends the zeros to
> >         the front of the bitvector instead of appending the zeros to
> >         the end of the bitvector.
> >
> >         Is that the intended functionality of adjustSize?
> >
> >         Cheers,
> >
> >         Teryl
> >
> >
> >
> >
> >         On Fri, Mar 16, 2012 at 2:13 PM, K. John Wu <[email protected]
> >         <mailto:[email protected]>> wrote:
> >
> >             Hi, Teryl,
> >
> >             Looks like the code for handling tow bitvectors with
> >             differing sizes
> >             has some bugs in it.  I will look into the problem.  In
> >             the mean time,
> >             simply making sure the two bitvectors represents the same
> >             number of
> >             bits should give the desired answer.  The function to use
> >             to make sure
> >             the shorter one has the same number of bits as the longer
> >             one is
> >             ibis::bitvector::adjustSize.  This function takes two
> >             arguments, it
> >             will fill the bitvector with 1s until the position given
> >             by the first
> >             argument and then fill the remaining positions with 0s
> >             until the
> >             second argument.
> >
> >             Good luck.
> >
> >             John
> >
> >             PS: The documentation of ibis::bitvector::adjustSize is
> >             available
> >             online at
> >
> >
> http://lbl.gov/~kwu/fastbit/doc/html/classibis_1_1bitvector.html#a96d95020682574405a91ac6dfed1da69
> >             <
> http://lbl.gov/%7Ekwu/fastbit/doc/html/classibis_1_1bitvector.html#a96d95020682574405a91ac6dfed1da69
> >
> >
> >
> >
> >             On 3/16/12 9:31 AM, Teryl Taylor wrote:
> >             > Hi John,
> >             >
> >             > I hope all is going well!   I'm playing around with the
> >             > ibis::bitvector API and I'm seeing some peculiar
> >             behavior.    I'm
> >             > trying to AND two bitmaps of different sizes
> >             together....  The first
> >             > bitmap looks as follows:
> >             >
> >             >
> >             >
> >             >
> >
> +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
> >             > -----------------------------------------------------------
> >             >
> >             > This bitvector stores 0 bits of a 1-bit (1 set) sequence
> >             in a 0-word
> >             > array and one bit in the active word
> >             >                  0    1    1    2    2    3
> >             >             0123456789012345678901234567890
> >             >             -------------------------------
> >             >     40000000    1
> >             > -----------------------------------------------------------
> >             >
> >             >
> >             >
> >
> +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
> >             > It has one set bit, and that is the zeroth bit in the
> >             bitmap.    It is
> >             > basically one 32 bit literal.
> >             >
> >             >
> >             > I want to And it with the following bitmap which is 326
> >             bits long
> >             > which is basically all 1's.
> >             >
> >             >
> >             >
> >
> +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
> >             >
> >             > This bitvector stores 310 bits of a 326-bit (326 set)
> >             sequence in a
> >             > 1-word array and 16 bits in the active word
> >             >                  0    1    1    2    2    3
> >             >             0123456789012345678901234567890
> >             >             -------------------------------
> >             > 0    c000000a    310*1
> >             >     7fff8000    1111111111111111
> >             >
> >             >
> >             >
> >
> +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
> >             >
> >             > Now, the first bitmap, should match with the first bit
> >             of the second
> >             > bitmap (so, basically the first bitmap should be seen as
> >             326 bits
> >             > long...with the first bit being set to 1, and the rest
> >             zeros).  So
> >             > when I AND the two together, I want the result to be a
> >             bitvector with
> >             > the first bit set to one, and the following 325 bits all
> >             set to zero.
> >             >
> >             >
> >             > But what I'm seeing is the following result:
> >             >
> >             >
> >
> +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
> >             >
> >             > This bitvector stores 310 bits of a 326-bit (1 set)
> >             sequence in a
> >             > 1-word array and 16 bits in the active word
> >             >                  0    1    1    2    2    3
> >             >             0123456789012345678901234567890
> >             >             -------------------------------
> >             > 0    8000000a    310*0
> >             >     40000000    1000000000000000
> >             >
> >             >
> >
> +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
> >             > Which has 310 0's before the one bit is set....   I'm
> >             using the &=
> >             > operator to do operation.   so it goes smallBitmap &=
> >             bigBitmap.
> >             >
> >             >
> >             > Is there an easy way to get the answer I am looking for?
> >              Or am I
> >             > using the bitvectors incorrectly?
> >             >
> >             >
> >             > Best Regards,
> >             >
> >             >
> >             > Teryl
> >             >
> >             >
> >             >
> >             >
> >             > _______________________________________________
> >             > FastBit-users mailing list
> >             > [email protected]
> >             <mailto:[email protected]>
> >             >
> >
> https://hpcrdm.lbl.gov/cgi-bin/mailman/listinfo/fastbit-users
> >
> >
> >
> >
>
_______________________________________________
FastBit-users mailing list
[email protected]
https://hpcrdm.lbl.gov/cgi-bin/mailman/listinfo/fastbit-users

Reply via email to