Hi, Teryl,

The change is restricted to array_t.cpp and only to function deepCopy.
 There is a small else-block that was added.

Here is an explanation just in case you are interested.  The small bit
vector you created first has an empty array_t object.   When the
operator= was invoked, it should have copied this empty array_t
object, but that if-block is only copying the non-empty array_t
object.  Thus the problem you observed.  The new else-block empties
out the existing array_t object, which is equivalent to copying an
empty array_t.

Let me know how it goes for you when you do get it ported over..

John


On 3/21/12 12:11 PM, Teryl Taylor wrote:
> Hi John,
> 
> Thanks for looking into it...what file did you have to change?  I'll
> back port it into 1.2.3 and give it a try..
> 
> Cheers,
> 
> Teryl
> 
> 
> On Wed, Mar 21, 2012 at 12:47 AM, K. John Wu <[email protected]
> <mailto:[email protected]>> wrote:
> 
>     Hi, Teryl,
> 
>     Thanks for the test case.  The problem turned out to not too hard to
>     fix -- Please check out SVN revision 497 from codeforge.lbl.gov
>     <http://codeforge.lbl.gov> with
>     the following command
> 
>     svn checkout https://codeforge.lbl.gov/anonscm/fastbit
> 
>     Please let me know if this fix the problem for you.
> 
>     Thanks again.
> 
>     John
> 
> 
> 
> 
>     On 3/20/12 5:02 PM, Teryl Taylor wrote:
>     > 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]
>     <mailto:[email protected]>
>     > <mailto:[email protected] <mailto:[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]>
>     <mailto:[email protected] <mailto:[email protected]>>
>     >     > <mailto:[email protected]
>     <mailto:[email protected]> <mailto:[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]> <mailto:[email protected]
>     <mailto:[email protected]>>
>     >     <mailto:[email protected]
>     <mailto:[email protected]> <mailto:[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]>
>     >     <mailto:[email protected] <mailto:[email protected]>>
>     >     >         <mailto:[email protected] <mailto:[email protected]>
>     <mailto:[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>
>     >    
>     
> <http://lbl.gov/%7Ekwu/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]>
>     >     <mailto:[email protected]
>     <mailto:[email protected]>>
>     >     >             <mailto:[email protected]
>     <mailto:[email protected]>
>     >     <mailto:[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