You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
45 lines
1.2 KiB
45 lines
1.2 KiB
#ifndef MARSHALL_H
|
|
#define MARSHALL_H
|
|
#include "smoke.h"
|
|
|
|
class SmokeType;
|
|
|
|
class Marshall {
|
|
public:
|
|
/**
|
|
* FromSV is used for virtual function return values and regular
|
|
* method arguments.
|
|
*
|
|
* ToSV is used for method return-values and virtual function
|
|
* arguments.
|
|
*/
|
|
typedef void (*HandlerFn)(Marshall *);
|
|
enum Action { FromSV, ToSV };
|
|
virtual SmokeType type() = 0;
|
|
virtual Action action() = 0;
|
|
virtual Smoke::StackItem &item() = 0;
|
|
virtual SV* var() = 0;
|
|
virtual void unsupported() = 0;
|
|
virtual Smoke *smoke() = 0;
|
|
/**
|
|
* For return-values, next() does nothing.
|
|
* For FromSV, next() calls the method and returns.
|
|
* For ToSV, next() calls the virtual function and returns.
|
|
*
|
|
* Required to reset Marshall object to the state it was
|
|
* before being called when it returns.
|
|
*/
|
|
virtual void next() = 0;
|
|
/**
|
|
* For FromSV, cleanup() returns false when the handler should free
|
|
* any allocated memory after next().
|
|
*
|
|
* For ToSV, cleanup() returns true when the handler should delete
|
|
* the pointer passed to it.
|
|
*/
|
|
virtual bool cleanup() = 0;
|
|
|
|
virtual ~Marshall() {}
|
|
};
|
|
#endif
|