jplus-0.4.6
src/jengine.h
Go to the documentation of this file.
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