jplus-0.4.6
|
00001 /* -*- mode: c++; indent-tabs-mode:nil -*- */ 00002 #ifndef JENGINE_H 00003 #define JENGINE_H 00004 00005 #include <string> 00006 #include <vector> 00007 #include <set> 00008 00009 #include "util.h" 00010 #include "jarray.h" 00011 00013 class jengine { 00014 public: 00015 friend class jarray; 00017 typedef jarray (*monad) (jarray y); 00019 typedef jarray (*dyad) (jarray x, jarray y); 00021 typedef jarray (*amonad) (monad um, dyad ud, jarray y); 00023 typedef jarray (*adyad) (monad um, dyad ud, jarray x, jarray y); 00024 00026 jengine(); 00028 ~jengine(); 00029 00032 static void initJlibrary(std::ostream &); 00033 00037 bool doJ(const std::string s); 00038 00042 const jarray get(const std::string name); 00043 00048 bool set(const std::string name, jarray &value); 00049 00052 int getError(); 00053 00056 inline bool ok() { 00057 return (getError()==0); 00058 }; 00059 00061 const static int RMAX=10000; 00062 00073 bool defVerb(std::string name, monad mf, dyad df, int mr=RMAX, int lr=RMAX, int rr=RMAX); 00074 00083 bool defAdverb(std::string name, amonad mf, adyad df); 00084 00093 bool defScript(std::string name, int type, std::string code, 00094 int mr=jengine::RMAX, 00095 int lr=jengine::RMAX, 00096 int rr=jengine::RMAX); 00097 00101 bool isBuiltin(std::string name) const; 00102 00105 std::set<std::string> getBuiltins() const; 00106 00109 jarray::I PROLOG(); 00110 00119 jarray::I EPILOG(jarray::I oldtop); 00120 00133 void* EPILOG(jarray::I oldtop, void *hdr); 00134 00135 protected: 00142 void* GA(const jarray::I t, const jarray::I n, const jarray::I r, const jarray::I *s); 00146 void FR(void *hdr); 00147 00148 private: 00149 // copy disabled 00150 jengine(const jengine &); 00151 const jengine& operator=(const jengine&); 00152 00153 class Impl; 00154 Impl* pImpl; 00155 }; 00156 #endif