12 #ifndef _OPENCOG_SCHEME_PRIMITIVE_H
13 #define _OPENCOG_SCHEME_PRIMITIVE_H
34 static void init(
void);
49 virtual SCM
invoke (SCM) = 0;
51 virtual const char *
get_name(
void) = 0;
94 Handle (T::*
h_h)(Handle);
95 Handle (T::*
h_hi)(Handle, int);
96 Handle (T::*
h_hh)(Handle, Handle);
97 Handle (T::*
h_hs)(Handle,
const std::string&);
100 Handle (T::*
h_sqq)(
const std::string&,
107 const std::string& (T::*
s_s)(
const std::string&);
108 const std::string& (T::*
s_ss)(
const std::string&,
110 const std::string& (T::*
s_sss)(
const std::string&,
113 const std::string& (T::*
s_v)(
void);
173 if (b) { rc = SCM_BOOL_T; }
else { rc = SCM_BOOL_F; }
196 rc = scm_from_double(d);
204 bool b = scm_to_bool(scm_cadddr(args));
207 rc = scm_from_double(d);
251 SCM list = scm_caddr(args);
264 SCM list = scm_cadr(args);
277 SCM list1 = scm_cadr(args);
281 SCM list2 = scm_caddr(args);
297 for (HandleSeq::reverse_iterator rit = rHS.rbegin(); rit != rHS.rend(); ++rit)
314 HandleSeq::iterator it = rHS.begin();
318 for ( ; it != rHS.end(); ++it)
336 bool b = scm_to_bool(scm_cadddr(args));
339 HandleSeq::iterator it = rHS.begin();
343 for ( ; it != rHS.end(); ++it)
358 for (HandleSeqSeq::reverse_iterator rit = rHSS.rbegin(); rit != rHSS.rend(); ++rit)
361 SCM rcTemp = SCM_EOL;
363 for (HandleSeq::reverse_iterator rrit = rHS.rbegin(); rrit != rHS.rend(); ++rrit)
366 rc = scm_cons(rcTemp, rc);
384 for (HandleSeqSeq::reverse_iterator rit = rHSS.rbegin(); rit != rHSS.rend(); ++rit)
387 SCM rcTemp = SCM_EOL;
389 for (HandleSeq::reverse_iterator rrit = rHS.rbegin(); rrit != rHS.rend(); ++rrit)
392 rc = scm_cons(rcTemp, rc);
402 const std::string &rs = (
that->*
method.s_s)(str);
403 rc = scm_from_utf8_string(rs.c_str());
412 const std::string &rs = (
that->*
method.s_ss)(str1, str2);
413 rc = scm_from_utf8_string(rs.c_str());
423 const std::string &rs = (
that->*
method.s_sss)(str1, str2, str3);
424 rc = scm_from_utf8_string(rs.c_str());
429 const std::string &rs = (
that->*
method.s_v)();
430 rc = scm_from_utf8_string(rs.c_str());
481 SCM input = scm_car(args);
484 if (scm_is_true(scm_symbol_p(input)))
485 input = scm_symbol_to_string(input);
488 if (scm_is_integer(input))
489 t = scm_to_ushort(input);
492 const char *lstr = scm_i_string_chars(input);
496 int i = scm_to_int(scm_cadr(args));
503 SCM input = scm_car(args);
506 if (scm_is_true(scm_symbol_p(input)))
507 input = scm_symbol_to_string(input);
510 if (scm_is_integer(input))
511 t = scm_to_ushort(input);
514 const char *lstr = scm_i_string_chars(input);
518 int i = scm_to_int(scm_cadr(args));
519 double d = scm_to_double(scm_caddr(args));
520 int i2 = scm_to_int(scm_cadddr(args));
531 throw RuntimeException(TRACE_INFO,
532 "Unsupported signature: %d\n",
signature);
539 virtual size_t get_size(
void) {
return sizeof (*this); }
542 #define DECLARE_CONSTR_0(SIG, LSIG, RET_TYPE) \
543 SchemePrimitive(const char* module, const char* name, \
544 RET_TYPE (T::*cb)(void), T *data) \
548 scheme_module = module; \
549 scheme_name = name; \
551 do_register(module, name, 0); \
554 #define DECLARE_CONSTR_1(SIG, LSIG, RET_TYPE, ARG_TYPE) \
555 SchemePrimitive(const char* module, const char* name, \
556 RET_TYPE (T::*cb)(ARG_TYPE), T *data) \
560 scheme_module = module; \
561 scheme_name = name; \
563 do_register(module, name, 1); \
566 #define DECLARE_CONSTR_2(SIG, LSIG, RET_TYPE, ARG1_TYPE, ARG2_TYPE) \
567 SchemePrimitive(const char* module, const char* name, \
568 RET_TYPE (T::*cb)(ARG1_TYPE, ARG2_TYPE), T *data) \
572 scheme_module = module; \
573 scheme_name = name; \
575 do_register(module, name, 2); \
578 #define DECLARE_CONSTR_3(SIG, LSIG, RET_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE) \
579 SchemePrimitive(const char* module, const char* name, \
580 RET_TYPE (T::*cb)(ARG1_TYPE, ARG2_TYPE, ARG3_TYPE), T *data) \
584 scheme_module = module; \
585 scheme_name = name; \
587 do_register(module, name, 3); \
589 #define DECLARE_CONSTR_4(SIG, LSIG, RET_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE) \
590 SchemePrimitive(const char* module, const char* name, \
591 RET_TYPE (T::*cb)(ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE), T *data) \
595 scheme_module = module; \
596 scheme_name = name; \
598 do_register(module, name, 4); \
623 const std::
string&, const std::
string&)
631 const std::
string&, const std::
string&)
639 #define DECLARE_DECLARE_1(RET,ARG) \
641 inline void define_scheme_primitive(const char *name, RET (T::*cb)(ARG), T *data, const char* module = "extension") \
645 new SchemePrimitive<T>(module, name, cb, data); \
648 #define DECLARE_DECLARE_2(RET,ARG1,ARG2) \
650 inline void define_scheme_primitive(const char *name, RET (T::*cb)(ARG1,ARG2), T *data, const char* module = "extension") \
654 new SchemePrimitive<T>(module, name, cb, data); \
657 #define DECLARE_DECLARE_3(RET,ARG1,ARG2,ARG3) \
659 inline void define_scheme_primitive(const char *name, RET (T::*cb)(ARG1,ARG2,ARG3), T *data, const char* module = "extension") \
663 new SchemePrimitive<T>(module, name, cb, data); \
665 #define DECLARE_DECLARE_4(RET,ARG1,ARG2,ARG3,ARG4) \
667 inline void define_scheme_primitive(const char *name, RET (T::*cb)(ARG1,ARG2,ARG3,ARG4), T *data, const char* module = "extension") \
671 new SchemePrimitive<T>(module, name, cb, data); \
696 DECLARE_DECLARE_3(Handle, const std::
string&, const HandleSeq&, const HandleSeq&)
699 const std::
string&, const std::
string&)
701 const std::
string&, const std::
string&)
709 #endif // _OPENCOG_SCHEME_PRIMITIVE_H
HandleSeq(T::* q_h)(Handle)
const char * scheme_module
void(T::* v_sss)(const std::string &, const std::string &, const std::string &)
bool(T::* b_hi)(Handle, int)
void(T::* v_ss)(const std::string &, const std::string &)
HandleSeqSeq(T::* k_hi)(Handle, int)
Handle(T::* h_hh)(Handle, Handle)
virtual SCM invoke(SCM)=0
std::vector< Handle > HandleSeq
a list of handles
double(T::* d_hhtb)(Handle, Handle, Type, bool)
static SCM do_call(SCM, SCM)
Handle(T::* h_hi)(Handle, int)
const std::string const std::string const std::string const std::string const std::string const std::string const std::string & DECLARE_CONSTR_0(V_V, v_v, void)
std::shared_ptr< TruthValue > TruthValuePtr
virtual const char * get_name(void)
const std::string const std::string const std::string const std::string void
Handle(T::* h_htq)(Handle, Type, const HandleSeq &)
#define DECLARE_CONSTR_4(SIG, LSIG, RET_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE, ARG4_TYPE)
virtual ~PrimitiveEnviron()
const std::string &(T::* s_sss)(const std::string &, const std::string &, const std::string &)
virtual const char * get_module(void)
std::vector< HandleSeq > HandleSeqSeq
a list of lists of handles
static int verify_int(SCM, const char *, int pos=1, const char *msg="expecting integer")
Handle(T::* h_hs)(Handle, const std::string &)
static SCM tv_to_scm(TruthValuePtr)
DECLARE_DECLARE_3(const std::string &, const std::string &, const std::string &, const std::string &) DECLARE_DECLARE_3(void
ClassServer & classserver(ClassServerFactory *=ClassServer::createInstance)
static void * c_wrap_register(void *)
Handle(T::* h_sq)(const std::string &, const HandleSeq &)
double(T::* d_hht)(Handle, Handle, Type)
enum opencog::SchemePrimitive::@1 signature
const std::string &(T::* s_v)(void)
#define DECLARE_DECLARE_1(RET, ARG)
void do_register(const char *, const char *, int)
static Type verify_atom_type(SCM, const char *, int pos=1)
const std::string &(T::* s_ss)(const std::string &, const std::string &)
void really_do_register(const char *, const char *, int)
#define DECLARE_DECLARE_4(RET, ARG1, ARG2, ARG3, ARG4)
#define DECLARE_CONSTR_1(SIG, LSIG, RET_TYPE, ARG_TYPE)
static std::vector< Handle > verify_handle_list(SCM, const char *, int pos=1)
virtual const char * get_name(void)=0
#define DECLARE_DECLARE_2(RET, ARG1, ARG2)
const std::string &(T::* s_s)(const std::string &)
static PrimitiveEnviron * verify_pe(SCM, const char *)
union opencog::SchemePrimitive::@0 method
HandleSeq(T::* q_htib)(Handle, Type, int, bool)
void(T::* v_s)(const std::string &)
virtual const char * get_module(void)=0
bool(T::* b_hh)(Handle, Handle)
void(T::* v_tidi)(Type, int, double, int)
Type getType(const std::string &typeName)
static std::string verify_string(SCM, const char *, int pos=1, const char *msg="expecting string")
static void init_in_module(void *)
virtual size_t get_size(void)=0
DECLARE_CONSTR_2(S_SS, s_ss, const std::string &, const std::string &, const std::string &) DECLARE_CONSTR_3(S_SSS
unsigned short Type
type of Atoms, represented as short integer (16 bits)
static Handle verify_handle(SCM, const char *, int pos=1)
static SCM handle_to_scm(Handle)
virtual SCM invoke(SCM args)
HandleSeqSeq(T::* k_h)(Handle)
HandleSeq(T::* q_hti)(Handle, Type, int)
#define DECLARE_CONSTR_3(SIG, LSIG, RET_TYPE, ARG1_TYPE, ARG2_TYPE, ARG3_TYPE)
void(T::* v_ti)(Type, int)
virtual size_t get_size(void)
Handle(T::* h_sqq)(const std::string &, const HandleSeq &, const HandleSeq &)
TruthValuePtr(T::* p_h)(Handle)