Files
harbour-core/harbour/contrib/hbamf
Przemyslaw Czerpak 1cc8e1e88c 2013-01-10 23:25 UTC+0100 Przemyslaw Czerpak (druzus/at/poczta.onet.pl)
* 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
2013-01-10 22:27:11 +00:00
..

/*
 * $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