Thank you.
Also quite messy functionality :(. Dunno if we support such in any
way in Harbour, and I'm not convinced we should, as it looks like
a very dirty hack which allows to reach behind the hash concept.
Looks strange to me to use slot ordinals to reach hash members,
as the point of hashes is to hide this. At least IMO.

Brgds,
Viktor

On Tue, Apr 14, 2009 at 1:59 PM, Rossine <[email protected]> wrote:

>
> Hello Viktor,
>
>
>
> > Very strange name for a function. Can you describe what it does?
> >
>
> Text taken from the manual xharbour:
>
>
>
> > HSetAACompatibility()
> > Enables or disables associative array compatibility for an empty hash.
> > Syntax
> > HSetAACompatibility( <hHash>, <lToggle> ) --> lSuccess
> >
> > Arguments
> > <hHash>
> > This is a variable referencing an empty hash. If the hash is not empty, a
> > runtime error is raised.
> > <lToggle>
> > A logical value must be passed as second parameter. .T. (true) enables
> > associative array compatibility, and .F. (false) disables it. Return
> > The function returns a logical value indicating success (.T.) or failure
> > (.F.) of the operation.
> > Description
> > The functions accepts an empty hash and toggles associative array
> > compatibility. If this is switched on, values of a hash can be retrieved
> > not only with the hash key, but also using their numeric ordinal
> position.
> > Hash access can then be programmed using the array element operator and a
> > numeric index.
> > Info
> > See also: Array(), HaaGetKeyAt(), HaaGetPos(), HaaGetRealPos(),
> > HaaGetValueAt(), HaaSetValueAt(), Hash(), HGetAACompatibility()
> > Category: Associative arrays , Hash functions , xHarbour extensions
> > Source: vm\hash.c
> > LIB: xhb.lib
> > DLL: xhbdll.dll
> >
> > Example
> > // The example outlines the possibilities for accessing values
> > // of a hash when associative array compatibility is switched on.
> >
> >    PROCEDURE Main
> >       LOCAL hArray := Hash(), aPos, nPos
> >
> >       HSetAACompatibility( hArray, .T. )
> >       HSetCaseMatch( hArray, .F. )
> >
> >       hArray[ "One"  ] := 10
> >       hArray[ "Two"  ] := 20
> >       hArray[ "Three"] := 30
> >       hArray[ "Four" ] := 40
> >       hArray[ "Five" ] := 50
> >
> >       ? hArray[1]                    // result: 10
> >       ? hArray[2] += 100             // result: 120
> >
> >       ? hArray:Three                 // result: 30
> >
> >       ? hArray["Four"] + hArray[5]   // result: 90
> >    RETURN
> >
> >
> >
> --------------------------------------------------------------------------------
> >
>
> ...and here the source of "HASH.C" extracts:
>
>
>
> > HB_EXPORT BOOL hb_hashSetAACompatibility( PHB_ITEM pHash, BOOL bCompatAA,
> > BOOL bSilent )
> > {
> >    if( pHash && HB_IS_HASH( pHash ) && pHash->item.asHash.value->uiLevel
> > == 0 && hb_hashLen( pHash ) == 0 )
> >    {
> >       PHB_BASEHASH pBaseHash = pHash->item.asHash.value;
> >
> >       if( bCompatAA )
> >       {
> >          if( ! pBaseHash->pAccessAA )
> >          {
> >             pBaseHash->pAccessAA = (ULONG *) hb_xgrab( sizeof( ULONG ) *
> > pBaseHash->ulAllocated );
> >          }
> >          return TRUE;
> >       }
> >       else
> >       {
> >          if( pBaseHash->pAccessAA )
> >          {
> >             hb_xfree( pBaseHash->pAccessAA );
> >             pBaseHash->pAccessAA = NULL;
> >          }
> >          return TRUE;
> >       }
> >    }
> >    else if( !bSilent )
> >    {
> >       hb_errRT_BASE( EG_ARG, 2017, NULL, "HSETAACOMPATIBILITY", 2,
> >            hb_paramError( 1 ), hb_paramError( 2 ));
> >    }
> >    return FALSE;
> > }
> >
>
> Best regards,
>
> Rossine.
>
> --
> View this message in context:
> http://www.nabble.com/Working-with-HASH%28%29-tp23034241p23038113.html
> Sent from the Harbour - Dev mailing list archive at Nabble.com.
>
> _______________________________________________
> Harbour mailing list
> [email protected]
> http://lists.harbour-project.org/mailman/listinfo/harbour
>
_______________________________________________
Harbour mailing list
[email protected]
http://lists.harbour-project.org/mailman/listinfo/harbour

Reply via email to