// -*- mode:C++; tab-width:2; c-basic-offset:2; indent-tabs-mode:nil -*-
//
// Copyright (C) 2000-2005 by Roger Rene Kommer / artefaktur, Kassel, Germany.
//
// This library is free software; you can redistribute it and/or
// modify it under the terms of the GNU Library General Public License (LGPL).
//
//
// This library is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// License ACDK-FreeLicense document enclosed in the distribution
// for more for more details.
// This file is part of the Artefaktur Component Development Kit:
// ACDK
//
// Please refer to
// - http://www.acdk.de
// - http://www.artefaktur.com
// - http://acdk.sourceforge.net
// for more information.
//
// $Header: /cvsroot/acdk/acdk/acdk_core/src/acdk/lang/dmi/DmiDelegate.h,v 1.10 2005/04/06 19:11:00 kommer Exp $
#ifndef acdk_lang_dmi_DmiDelegate_h
#define acdk_lang_dmi_DmiDelegate_h
#include <acdk.h>
#include "DmiObject.h"
#include "DmiNamedArg.h"
namespace acdk {
namespace lang {
namespace dmi {
ACDK_DECL_INTERFACE(DmiDelegate);
/**
standard interface for a delegate.
@see Delegates
*/
class ACDK_CORE_PUBLIC DmiDelegate
ACDK_INTERFACEBASE
{
ACDK_WITH_METAINFO(DmiDelegate)
public:
/** call the method with variable arguments */
virtual RDmiObject call(IN(RDmiObjectArray) args) = 0;
/** call the method with variable named arguments */
virtual RDmiObject call(IN(RDmiNamedArgArray) namedArgs) = 0;
/**
internal
by default calls call(IN(RDmiObjectArray) args)
*/
foreign virtual ScriptVar call(INOUT(ScriptVarArray) args);
/** used for C++ usage */
foreign ScriptVar call()
{
ScriptVarArray sv(0);
return call(sv);
}
/** used for C++ usage */
foreign ScriptVar call(IN(ScriptVar) sv0)
{
ScriptVarArray sv(1);
sv[0] = sv0;
return call(sv);
}
/** used for C++ usage */
foreign ScriptVar call(IN(ScriptVar) sv0, IN(ScriptVar) sv1)
{
ScriptVarArray sv(2);
sv[0] = sv0;
sv[1] = sv1;
return call(sv);
}
/** used for C++ usage */
foreign ScriptVar call(IN(ScriptVar) sv0, IN(ScriptVar) sv1, IN(ScriptVar) sv2)
{
ScriptVarArray sv(3);
sv[0] = sv0;
sv[1] = sv1;
sv[2] = sv2;
return call(sv);
}
/** used for C++ usage */
foreign ScriptVar call(IN(ScriptVar) sv0, IN(ScriptVar) sv1, IN(ScriptVar) sv2, IN(ScriptVar) sv3)
{
ScriptVarArray sv(4);
sv[0] = sv0;
sv[1] = sv1;
sv[2] = sv2;
sv[3] = sv3;
return call(sv);
}
/** used for C++ usage */
foreign ScriptVar call(IN(ScriptVar) sv0, IN(ScriptVar) sv1, IN(ScriptVar) sv2, IN(ScriptVar) sv3, IN(ScriptVar) sv4)
{
ScriptVarArray sv(5);
sv[0] = sv0;
sv[1] = sv1;
sv[2] = sv2;
sv[3] = sv3;
sv[4] = sv4;
return call(sv);
}
/** used for C++ usage */
foreign ScriptVar call(IN(ScriptVar) sv0, IN(ScriptVar) sv1, IN(ScriptVar) sv2, IN(ScriptVar) sv3,
IN(ScriptVar) sv4, IN(ScriptVar) sv5)
{
ScriptVarArray sv(6);
sv[0] = sv0;
sv[1] = sv1;
sv[2] = sv2;
sv[3] = sv3;
sv[4] = sv4;
sv[5] = sv5;
return call(sv);
}
};
ACDK_DECL_CLASS(StdDmiDelegate);
/**
Standard DMI implementation Delegate call to underlying object via dmi.
@see Delegates
*/
class ACDK_CORE_PUBLIC StdDmiDelegate
: extends ::acdk::lang::Object
, implements DmiDelegate
{
ACDK_WITH_METAINFO(StdDmiDelegate)
protected:
acdk::lang::Object _object;
RString _methodName;
RClass _class;
public:
/**
invokes a non static method of given obj
*/
StdDmiDelegate(IN(acdk::lang::Object) obj, IN(RString) methodName)
: _object(obj)
, _methodName(methodName)
{
}
/**
invokes a static method of given class
*/
StdDmiDelegate(IN(RClass) cls, IN(RString) methodName)
: _methodName(methodName)
, _class(cls)
{
}
/** get target object. May be Nil if used for a static method */
acdk::lang::Object getObject() { return _object; }
/** get target class. May be Nil if used for a non static method */
RClass getClass() { return _class; }
RString getMethodName() { return _methodName; }
virtual RDmiObject call(IN(RDmiObjectArray) args);
virtual RDmiObject call(IN(RDmiNamedArgArray) namedArgs);
foreign ScriptVar call(INOUT(ScriptVarArray) args);
};
} // namespace dmi
} // namespace lang
} // namespace acdk
#endif // acdk_lang_dmi_DmiDelegate_h
|