Update of /cvsroot/pclasses/pclasses2/include/pclasses
In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv15254/include/pclasses
Modified Files:
Callback.h CallbackN.sh
Log Message:
Added numArgs() and virtual ctor to CallbackArgs.
Index: CallbackN.sh
===================================================================
RCS file: /cvsroot/pclasses/pclasses2/include/pclasses/CallbackN.sh,v
retrieving revision 1.1
retrieving revision 1.2
diff -u -d -r1.1 -r1.2
--- CallbackN.sh 28 Jan 2005 17:11:00 -0000 1.1
+++ CallbackN.sh 1 Feb 2005 16:45:17 -0000 1.2
@@ -1,3 +1,4 @@
+#! /bin/bash
#/***************************************************************************
# * Copyright (C) 2005 by Christian Prochnow *
# * cp...@se... *
@@ -19,7 +20,7 @@
# ***************************************************************************/
#
-# this shell-script generates code for Signals with n arguments....
+# this shell-script generates code for Callbacks with n arguments....
#
generate_callbackN()
@@ -47,13 +48,21 @@
callargs="$callargs, a->arg$num"
done
-cat <<- EOF > "CallbackN$1.h"
+cat << EOF > "CallbackN$1.h"
namespace P {
/* ----------------- Callback1 ------------------ */
template <$templateargs>
-struct CallbackArgs$num: CallbackArgs { $structmembers };
+class CallbackArgs$num: public CallbackArgs {
+ public:
+ CallbackArgs$num() : CallbackArgs($num) { }
+
+ CallbackArgs* clone() const
+ { return new CallbackArgs$num(*this); }
+
+ $structmembers
+};
template <$templateargs>
CallbackArgs$num<$argtypes> make_args($argtypeswname)
@@ -76,8 +85,8 @@
Callback::RetType exec(const CallbackArgs& args) const
{
RetType ret;
- const Args* a = static_cast<const Args*>(&args);
- if(!a) throw;
+ const Args* a = dynamic_cast<const Args*>(&args);
+ if(!a) throw LogicError("Invalid argument", P_SOURCEINFO);
ret.retVal = exec($callargs);
return ret;
}
@@ -97,8 +106,8 @@
Callback::RetType exec(const CallbackArgs& args) const
{
- const Args* a = static_cast<const Args*>(&args);
- if(!a) throw;
+ const Args* a = dynamic_cast<const Args*>(&args);
+ if(!a) throw LogicError("Invalid arguments", P_SOURCEINFO);
exec($callargs);
return RetType();
}
Index: Callback.h
===================================================================
RCS file: /cvsroot/pclasses/pclasses2/include/pclasses/Callback.h,v
retrieving revision 1.5
retrieving revision 1.6
diff -u -d -r1.5 -r1.6
--- Callback.h 28 Jan 2005 17:11:57 -0000 1.5
+++ Callback.h 1 Feb 2005 16:45:17 -0000 1.6
@@ -21,9 +21,23 @@
#ifndef P_Callback_h
#define P_Callback_h
+#include <pclasses/Exception.h>
+
namespace P {
-struct CallbackArgs { };
+class CallbackArgs {
+ public:
+ CallbackArgs(int numArgs) : _numArgs(numArgs) { }
+ virtual ~CallbackArgs() { }
+
+ int numArgs() const throw()
+ { return _numArgs; }
+
+ virtual CallbackArgs* clone() const = 0;
+
+ private:
+ int _numArgs;
+};
//! Callback base class
class Callback {
@@ -40,7 +54,13 @@
/* ----------------- Callback0 ------------------ */
//! Callback arguments with no arguments
-struct CallbackArgs0: CallbackArgs { };
+class CallbackArgs0: public CallbackArgs {
+ public:
+ CallbackArgs0() : CallbackArgs(0) { }
+
+ CallbackArgs* clone() const
+ { return new CallbackArgs0(*this); }
+};
//! Callback base class with no arguments
template <typename _RetT>
@@ -54,6 +74,9 @@
Callback::RetType exec(const CallbackArgs& args) const
{
+ if(dynamic_cast<const Args*>(&args) == 0)
+ throw LogicError("Invalid arguments", P_SOURCEINFO);
+
RetType ret;
ret.retVal = exec();
return ret;
@@ -74,6 +97,9 @@
Callback::RetType exec(const CallbackArgs& args) const
{
+ if(dynamic_cast<const Args*>(&args) == 0)
+ throw LogicError("Invalid arguments", P_SOURCEINFO);
+
exec();
return RetType();
}
|