blob: cf20b86d65d08458da43c69f2c1cf86ff4d1192f (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
|
#ifndef MARSHALL_H
#define MARSHALL_H
#include <smoke.h>
#include <ruby.h>
class SmokeType;
class Marshall {
public:
/**
* FromVALUE is used for virtual function return values and regular
* method arguments.
*
* ToVALUE is used for method return-values and virtual function
* arguments.
*/
typedef void (*HandlerFn)(Marshall *);
enum Action { FromVALUE, ToVALUE };
virtual SmokeType type() = 0;
virtual Action action() = 0;
virtual Smoke::StackItem &item() = 0;
virtual VALUE * var() = 0;
virtual void unsupported() = 0;
virtual Smoke *smoke() = 0;
/**
* For return-values, next() does nothing.
* For FromRV, next() calls the method and returns.
* For ToRV, 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
|