Re-sorting FBL_ArraySet?

Arthur Clemens aclemens at xs4all.nl
Sun Nov 30 23:57:19 CST 2003


On 30-nov-03, at 23:14, Ruslan Zasukhin wrote:

> on 12/1/03 12:08 AM, Arthur Clemens at aclemens at xs4all.nl wrote:
>
>>>> Is it possible to sort an already sorted ArraySet with a different
>>>> sort
>>>> order?
>>>
>>> Of course you can!
>>> This is just array of longs.
>>>
>>
>> In the header file I only find a Sort() method, and no way to pass
>> parameters such as ascending or sort field.
>>
>> if I do (VDK_BaseObject)
>> FBL_ArraySet* Sort( FBL_Set* inSet, VDK_Field& inSortField, bool
>> inAscending = true );
>> ... I get a *new* ArraySet.
>>
>> What other options do I have?
>
> Aha, so you want sort some selection of records in other way.

Yes.

>
> Then you must then send your sorted ArraySet into first parameter of 
> Sort().
> And yes, Valentina will create new ArraySet as result.

OK.

>
> This is because Valentina internally use other complex structures for
> sorting, and to keep RAM usage minimal original array is destroyed 
> after
> Valentina copy data into own structures.
>
> What troubles you?

I keep having problems assigning the newly created sorted ArraySet to 
my member variable ArraySet.

     VDK_Field *sortField = [self 
databaseDefinition]->getSloveneWordTable()->GetField("text");
     bool ascending = ([self sortDirection] == 0) ? false : true;
     FBL_ArraySet* sortedSet = [self 
databaseDefinition]->getSloveneWordTable()->Sort( [[self displaySet] 
shownSet], *sortField, ascending);

So I feed the Sort function my old shownSet (ArraySet). No problems 
here, in my test of 8 records I can see that sortedSet counts 8 records 
-  iterating the set I get perfectly sorted words.

Now I immediately pass sortedSet to my DisplaySet's shownSet with:

[[self displaySet] setShownSetToArraySet:sortedSet];

and in DisplaySet.mm:

- (void)setShownSetToArraySet:(FBL_ArraySet*)arraySet
     if (mShownSet != nil) {
         delete mShownSet;
     }
     //NSLog(@"arraySet = %d", arraySet->GetCount()); // Cannot: get 
crash: "pure virtual function called"
     mShownSet = new FBL_ArraySet(*arraySet);
     NSLog(@"mShownSet = %d", mShownSet->GetCount()); // I get zero 
count here!!!!
}

So in passing the arraySet, I cannot call GetCount() on it, and the 
newly created mShownSet has zero items!
I use the same way of passing the bitset of all found records to 
mShownSet, and I have no problems there.

I am very puzzled. Perhaps a keen eye can help me out.



Arthur














More information about the Valentina mailing list