* harbour/include/hbapicls.h
* harbour/src/vm/classes.c
+ added new internal C function:
void hb_objCloneTo( PHB_ITEM pDest, PHB_ITEM pSource,
PHB_NESTED_CLONED pClonedList );
it copies object or clone it if class overloaded clone operation.
; TODO: add support for user defined class clone operation
* harbour/include/hbapiitm.h
* harbour/src/vm/itemapi.c
* changed returned type of hb_itemCloneTo() to void
* harbour/src/vm/itemapi.c
* use hb_objCloneTo() in hb_itemClone*() functions.
* harbour/src/vm/arrays.c
* use hb_objCloneTo() in array/hash clone code.
* harbour/src/vm/arrayshb.c
! fixed return values in AEVAL() and ACOPY() when array
is passed by reference.
* harbour/src/rtl/tclass.prg
* harbour/src/vm/classes.c
* declare :SUPER and :__SUPER messages as non virtual ones.
Now ::SUPER and ::__SUPER messages executed in object method
returns casting to 1-st super object of the class in which
executed method was defined.
* harbour/include/hbclass.ch
* removed xtranslations for SUPER(): - this workaround for
missing non virtual messages in some Clipper OOP implementations
was breaking valid code which tried to use real :SUPER message
and made SUPER reserved word, i.e. it was not possible to create
code like:
LOCAL super := ::parent2
? super:v1, super:v2
Now this hack is not longer necessary and :SUPER is non virtual
massage in Harbour.
INCOMPATIBLE: If someone has some code like:
SUPER():MSG()
SUPER( PARENT ):MSG()
then please change it to:
::SUPER:MSG()
::PARENT:MSG()
* harbour/contrib/hbmysql/tmysql.prg
* harbour/contrib/hbmysql/tsqlbrw.prg
! fixed to use ::super() instead of super()
* harbour/src/rdd/usrrdd/rdds/arrayrdd.prg
+ added GOCOLD() method - this method is necessary for WAs
passed to HB_DBDETACH()
* harbour/doc/xhb-diff.txt
* small update
* harbour/contrib/*/*.hbx
* regenerated
/*
* $Id$
*/
--------------------------------------
Short description of Harbour functions
--------------------------------------
cAMF := amf3_Encode( xVal, symConvOut, lBinaryStrings )
xVal - any supported datatype:
Character (String/MEMO), Numeric (Integer/Double), NIL, Logical, Date (encoded as DateTime),
DateTime, Array, Hash (String and Integer keys only),
Object (anonymous hash-like, externalizable, class-mapped)
AMF supports references, so this example a1 value will be serialized correctly.
a1 := { NIL }
a2 := { a1 }
a1[1] := a2
symConvOut - function symbol for outbound conversion
Acts recursively, so if xVal is array,
all of it's values will be passed to this
function.
lBinaryStrings - treat strings as binary, resulting AMF
datatype will be ByteArray. Normally
a string is encoded to UTF-8.
xVal := amf3_Decode( cAMF, symConvIn )
cAMF - AMF3 serialized binary string
symConvIn - function symbol for inbound conversion
cAMF := amf3_FromWA( [ <bWhile> ], [ <bFor> ], [ <aFields> ], [ <nCount> ], [ <lStrTrim> ], [ <nPackage> ], [ pContext ] )
Function to convert current workarea to AMF3 Array.
bWhile - COPY TO like WHILE codeblock
bFor - COPY TO like FOR codeblock
aFields - array of fieldnames (codeblocks are going to be supported here too)
nCount - NEXT like, process only specified count of records
lStrTrim - RTrim() strings, default is .T.
nPackage - determine the exact output AMF format
0 - Array of records contains Arrays of fields (default)
1 - Array of records contains Anonymous objects
2 - ArrayCollection object
Lower number means lesser packet size on the network.
pContext - when this function is used inside AMF3_ENCODE specified
outbound conversion function, you must pass pointer to
encoding context, otherwise AMF3 references will encoded
incorrectly. Example code of such case:
STATIC FUNCTION ConvOut( xVal, pOuterContext )
LOCAL lClose
IF HB_ISOBJECT( xVal )
IF xVal:className() == "WORKAREAEXPORT"
lClose := xVal:lCloseWA
SELECT ( xVal:nWorkArea )
xVal := amf_Raw():New( amf3_FromWA( xVal:bWhile, xVal:bFor, xVal:aFields, xVal:nCount, xVal:lStrTrim, 1, pOuterContext ) )
IF lClose
CLOSE
ENDIF
ENDIF
ENDIF
RETURN xVal