see changelog

This commit is contained in:
Eddie Runia
1999-05-30 19:36:39 +00:00
parent 6f74c321ec
commit 8a10694f08
4 changed files with 34 additions and 14 deletions

View File

@@ -1,3 +1,9 @@
19990530-21:30 CET Eddie Runia
* source/rtl/classes.c; source/rtl/tclass.prg
initializer and release ready for inheritance
* tests/working/inherit.prg
init test added
19990530-12:12 EST Les. Griffith
* added logic for hb_file in files.c
* added test filexist.prg to test hb_file() in tests working

View File

@@ -30,6 +30,7 @@ typedef struct
{
char * szName;
WORD wDatas;
WORD wDataFirst; /* First wData from this class */
PMETHOD pMethods;
WORD wMethods;
WORD wHashKey;
@@ -60,12 +61,12 @@ HARBOUR CLASSCREATE() /* cClassName, nDatas, hSuper --> hClass */
pClasses[ wClasses ].szName = ( char * ) _xgrab( _parclen( 1 ) + 1 );
strcpy( pClasses[ wClasses ].szName, _parc( 1 ) );
if( hSuper )
{
hSuper--;
pClasses[ wClasses ].wDatas = pClasses[ hSuper ].wDatas;
pClasses[ wClasses ].wMethods = pClasses[ hSuper ].wMethods;
pClasses[ wClasses ].wDataFirst = pClasses[ hSuper ].wDatas;
pClasses[ wClasses ].wDatas = pClasses[ hSuper ].wDatas + _parni(2);
pClasses[ wClasses ].wMethods = pClasses[ hSuper ].wMethods;
pClasses[ wClasses ].pClassDatas =
hb_arrayClone( pClasses[ hSuper ].pClassDatas );
pClasses[ wClasses ].pInlines =
@@ -79,7 +80,8 @@ HARBOUR CLASSCREATE() /* cClassName, nDatas, hSuper --> hClass */
}
else
{
pClasses[ wClasses ].wDatas = _parni( 2 );
pClasses[ wClasses ].wDatas = _parni( 2 );
pClasses[ wClasses ].wDataFirst = 0;
pClasses[ wClasses ].pMethods = ( PMETHOD ) _xgrab( 100 * sizeof( METHOD ) );
pClasses[ wClasses ].wMethods = 0;
pClasses[ wClasses ].wHashKey = 25; /* BUCKET = 4 repetitions */
@@ -444,7 +446,7 @@ HARBOUR CLASSINSTANCE() /* hClass --> oNewObject */
wLimit = pClass->wHashKey * BUCKET;
for( wAt = 0; wAt < wLimit; wAt++ )
{
if( pClass->pMethods[ wAt ].pInitValue )
if( pClass->pMethods[ wAt ].pInitValue )
{
hb_itemArrayPut( &stack.Return,
pClass->pMethods[ wAt ].wData,
@@ -537,7 +539,8 @@ void ReleaseClass( PCLASS pClass )
wLimit = pClass->wHashKey * BUCKET;
for( wAt = 0; wAt < wLimit; wAt++ ) /* Release initializers */
if( pClass->pMethods[ wAt ].pInitValue )
if( pClass->pMethods[ wAt ].pInitValue &&
pClass->pMethods[ wAt ].wData > pClass->wDataFirst )
hb_itemRelease( pClass->pMethods[ wAt ].pInitValue );
_xfree( pClass->szName );
@@ -589,6 +592,15 @@ HARBOUR OSEND() /* <xRet> = oSend( <oObj>, <cSymbol>, <xArg,..> */
}
HARBOUR __WDATAS() /* <nSeq> = __wDatas( <hClass> ) */
{
WORD wClass = _parnl( 1 );
if( wClass )
_retni( pClasses[ wClass - 1 ].wDatas ); /* Return number of DATAs */
}
HARBOUR __WDATAINC() /* <nSeq> = __wDataInc( <hClass> )*/
{
WORD wClass = _parnl( 1 );
@@ -602,7 +614,7 @@ HARBOUR __WDATADEC() /* <nSeq> = __wDataDec( <hClass> )*/
WORD wClass = _parnl( 1 );
if( wClass )
_retni( ++pClasses[ wClass - 1 ].wDatas ); /* Return and decrease */
_retni( pClasses[ wClass - 1 ].wDatas-- ); /* Return and decrease */
} /* number of DATAs */
HARBOUR CLASSMOD() /* Modify message (only for INLINE and METHOD) */

View File

@@ -70,13 +70,16 @@ static function Create()
local Self := QSelf()
local n, nLen := Len( ::aDatas )
local hClass := ClassCreate( ::cName, nLen, ::hSuper )
local nDataBegin := If( !Empty( ::hSuper ), __WDatas( ::hSuper ), 0 )
::hClass = hClass
for n = 1 to nLen
ClassAdd( hClass, ::aDatas[ n ][ DAT_SYMBOL ], n, MET_DATA, ;
ClassAdd( hClass, ::aDatas[ n ][ DAT_SYMBOL ], n + nDataBegin, MET_DATA, ;
::aDatas[ n ][ DAT_INITVAL ] )
ClassAdd( hClass, "_" + ::aDatas[ n ][ DAT_SYMBOL ], n, MET_DATA )
ClassAdd( hClass, "_" + ::aDatas[ n ][ DAT_SYMBOL ], n + nDataBegin, MET_DATA )
next
nLen = Len( ::aMethods )

View File

@@ -21,14 +21,13 @@ function Main( cFrom, cTo )
cTo := Default( cTo, "strip.out" )
oFrom := TTextFile()
HBDebug( { aoMethod( oFrom ), aoData( oFrom ) } )
HBDebug( { oFrom, aoMethod( oFrom ) } )
// oFrom:Super:Run()
oFrom:Set( "DoIt !" )
QOut( oFrom:Out )
oFrom:New( cFrom, "R" )
oTo := TTextFile()
// HBDebug( aoMethod( oTo ) )
oTo:New( cTo , "W" )
oTo := TTextFile():New( cTo, "W" )
HBDebug( { oTo, aoMethod( oTo ) } )
do while !oFrom:lEoF
cOut := oFrom:Run()
@@ -55,7 +54,7 @@ function TEmpty()
oEmpty:AddInline( "Run", {||QOut( "Run!" ) } ) // Test command
// oEmpty:AddInline( "Set", {|self,xParam|::Out := xParam } )
oEmpty:AddInline( "Set", {|self,xParam| oSend(self,"_Out",xParam) } )
oEmpty:AddData( "Out" )
oEmpty:AddData( "Out", 1 )
// Test command
oEmpty:AddVirtual( "Dispose" ) // Clean up code