You cannot 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
		
	
	
	
		
			C++
		
	
			
		
		
	
	
			45 lines
		
	
	
		
			1.2 KiB
		
	
	
	
		
			C++
		
	
#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
 |