Files
2025-12-05 08:54:02 +01:00

119 lines
3.1 KiB
Plaintext

// Copyright (C) 2010, Guy Barrand. All rights reserved.
// See the file tools.license for terms.
#ifndef tools_sg_bcbk
#define tools_sg_bcbk
// "cbk" is for callback. Base class to handle a callback.
#include "../scast"
#include "../S_STRING"
#include <string>
namespace tools {
namespace sg {
enum return_action {
return_none,
return_to_render
};
class bcbk {
public:
TOOLS_SCLASS(tools::sg::bcbk)
public:
virtual void* cast(const std::string& a_class) const {
if(void* p = cmp_cast<bcbk>(this,a_class)) {return p;}
return 0;
}
virtual const std::string& s_cls() const {return s_class();}
public:
virtual return_action action() = 0;
virtual bcbk* copy() const = 0;
public:
virtual ~bcbk(){
}
protected:
bcbk()
:m_single_shoot(false)
,m_is_valid(true)
{
}
bcbk(const bcbk& a_from)
:m_single_shoot(a_from.m_single_shoot)
,m_is_valid(a_from.m_is_valid)
{
}
bcbk& operator=(const bcbk& a_from){
m_single_shoot = a_from.m_single_shoot;
m_is_valid = a_from.m_is_valid;
return *this;
}
public:
void set_single_shoot(bool a_value) {m_single_shoot = a_value;}
bool is_single_shoot() const {return m_single_shoot;}
bool is_valid() const {return m_is_valid;}
void invalidate() {m_is_valid = false;}
protected:
bool m_single_shoot;
bool m_is_valid;
};
}}
#define TOOLS_CBK(a__class,a__sclass,a__parent)\
private:\
typedef a__parent parent;\
public:\
TOOLS_SCLASS(a__sclass)\
public:\
virtual void* cast(const std::string& a_class) const {\
if(void* p = tools::cmp_cast<a__class>(this,a_class)) return p;\
return parent::cast(a_class);\
}\
virtual const std::string& s_cls() const {return s_class();}\
virtual tools::sg::bcbk* copy() const {return new a__class(*this);}
#define TOOLS_T_CBK(a__T,a__class,a__sclass,a__parent)\
private:\
typedef a__parent parent;\
public:\
TOOLS_T_SCLASS(a__T,a__sclass)\
public:\
virtual void* cast(const std::string& a_class) const {\
if(void* p = tools::cmp_cast<a__class>(this,a_class)) return p;\
return parent::cast(a_class);\
}\
virtual const std::string& s_cls() const {return s_class();}\
virtual tools::sg::bcbk* copy() const {return new a__class(*this);}
#define TOOLS_T2_CBK(a__T1,a__T2,a__class,a__sclass,a__parent)\
private:\
typedef a__parent parent;\
public:\
TOOLS_T2_SCLASS(a__T1,a__T2,a__sclass)\
public:\
virtual void* cast(const std::string& a_class) const {\
if(void* p = tools::cmp_cast<a__class>(this,a_class)) return p;\
return parent::cast(a_class);\
}\
virtual const std::string& s_cls() const {return s_class();}\
virtual tools::sg::bcbk* copy() const {return new a__class(*this);}
#define TOOLS_T3_CBK(a__T1,a__T2,a__T3,a__class,a__sclass,a__parent)\
private:\
typedef a__parent parent;\
public:\
TOOLS_T3_SCLASS(a__T1,a__T2,a__T3,a__sclass)\
public:\
virtual void* cast(const std::string& a_class) const {\
if(void* p = tools::cmp_cast<a__class>(this,a_class)) return p;\
return parent::cast(a_class);\
}\
virtual const std::string& s_cls() const {return s_class();}\
virtual tools::sg::bcbk* copy() const {return new a__class(*this);}
#endif