⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 cpptcl.h

📁 cpptcl library for ns2
💻 H
📖 第 1 页 / 共 2 页
字号:
          ch_->register_method(name,               boost::shared_ptr<details::object_cmd_base>(                    new details::method9<C, R,                    T1, T2, T3, T4, T5, T6, T7, T8, T9>(f)), p);          return *this;     }private:     boost::shared_ptr<class_handler<C> > ch_;};} // namespace details// init type for defining class constructorstemplate <typename T1 = void, typename T2 = void, typename T3 = void,          typename T4 = void, typename T5 = void, typename T6 = void,          typename T7 = void, typename T8 = void, typename T9 = void>class init {};// no_init type and object - to define classes without constructorsnamespace details{     struct no_init_type {};} // namespace detailsextern details::no_init_type no_init;// interpreter wrapperclass interpreter{public:     interpreter();     interpreter(Tcl_Interp *, bool owner = true);     ~interpreter();          void make_safe();          Tcl_Interp * get() const { return interp_; }     // free function definitions               template <typename R>     void def(std::string const &name, R (*f)(),          policies const &p = policies())     {          add_function(name,               boost::shared_ptr<details::callback_base>(                    new details::callback0<R>(f)), p);     }     template <typename R, typename T1>     void def(std::string const &name, R (*f)(T1),          policies const &p = policies())     {          add_function(name,               boost::shared_ptr<details::callback_base>(                    new details::callback1<R, T1>(f)), p);     }     template <typename R, typename T1, typename T2>     void def(std::string const &name, R (*f)(T1, T2),          policies const &p = policies())     {          add_function(name,               boost::shared_ptr<details::callback_base>(                    new details::callback2<R, T1, T2>(f)), p);     }     template <typename R, typename T1, typename T2, typename T3>     void def(std::string const &name, R (*f)(T1, T2, T3),          policies const &p = policies())     {          add_function(name,               boost::shared_ptr<details::callback_base>(                    new details::callback3<R, T1, T2, T3>(f)), p);     }     template <typename R, typename T1, typename T2, typename T3, typename T4>     void def(std::string const &name, R (*f)(T1, T2, T3, T4),          policies const &p = policies())     {          add_function(name,               boost::shared_ptr<details::callback_base>(                    new details::callback4<R, T1, T2, T3, T4>(f)), p);     }     template <typename R, typename T1, typename T2, typename T3,          typename T4, typename T5>     void def(std::string const &name, R (*f)(T1, T2, T3, T4, T5),          policies const &p = policies())     {          add_function(name,               boost::shared_ptr<details::callback_base>(                    new details::callback5<R, T1, T2, T3, T4, T5>(f)), p);     }     template <typename R, typename T1, typename T2, typename T3,          typename T4, typename T5, typename T6>     void def(std::string const &name, R (*f)(T1, T2, T3, T4, T5, T6),          policies const &p = policies())     {          add_function(name,               boost::shared_ptr<details::callback_base>(                    new details::callback6<R, T1, T2, T3, T4, T5, T6>(f)), p);     }     template <typename R, typename T1, typename T2, typename T3,          typename T4, typename T5, typename T6, typename T7>     void def(std::string const &name, R (*f)(T1, T2, T3, T4, T5, T6, T7),          policies const &p = policies())     {          add_function(name,               boost::shared_ptr<details::callback_base>(                    new details::callback7<R,                    T1, T2, T3, T4, T5, T6, T7>(f)), p);     }     template <typename R, typename T1, typename T2, typename T3,          typename T4, typename T5, typename T6, typename T7, typename T8>     void def(std::string const &name, R (*f)(T1, T2, T3, T4, T5, T6, T7, T8),          policies const &p = policies())     {          add_function(name,               boost::shared_ptr<details::callback_base>(                    new details::callback8<R,                    T1, T2, T3, T4, T5, T6, T7, T8>(f)), p);     }     template <typename R, typename T1, typename T2, typename T3,          typename T4, typename T5, typename T6, typename T7, typename T8,          typename T9>     void def(std::string const &name,          R (*f)(T1, T2, T3, T4, T5, T6, T7, T8, T9),          policies const &p = policies())     {          add_function(name,               boost::shared_ptr<details::callback_base>(                    new details::callback9<R,                    T1, T2, T3, T4, T5, T6, T7, T8, T9>(f)), p);     }     // class definitions     template <class C>     details::class_definer<C> class_(std::string const &name)     {          boost::shared_ptr<details::class_handler<C> > ch(               new details::class_handler<C>());          add_class(name, ch);          add_constructor(name, ch,               boost::shared_ptr<details::callback_base>(                    new details::callback0<C*>(&details::construct<                         C, void, void, void, void, void, void, void,                         void, void>::doit)));          return details::class_definer<C>(ch);     }     template <class C, typename T1, typename T2, typename T3, typename T4,               typename T5, typename T6, typename T7, typename T8,               typename T9>     details::class_definer<C> class_(std::string const &name,          init<T1, T2, T3, T4, T5, T6, T7, T8, T9> const &,          policies const &p = policies())     {          typedef typename details::get_callback_type_for_construct<               C, T1, T2, T3, T4, T5, T6, T7, T8, T9>::type               callback_type;          boost::shared_ptr<details::class_handler<C> > ch(               new details::class_handler<C>());          add_class(name, ch);          add_constructor(name, ch,               boost::shared_ptr<details::callback_base>(                    new callback_type(&details::construct<                         C, T1, T2, T3, T4, T5, T6, T7, T8, T9>::doit)), p);          return details::class_definer<C>(ch);     }     template <class C>     details::class_definer<C> class_(          std::string const &name, details::no_init_type const &)     {          boost::shared_ptr<details::class_handler<C> > ch(               new details::class_handler<C>());          add_class(name, ch);          return details::class_definer<C>(ch);     }     // free script evaluation          details::result eval(std::string const &script);     details::result eval(std::istream &s);     details::result eval(object const &o);     // the InputIterator should give object& or Tcl_Obj* when dereferenced     template <class InputIterator>     details::result eval(InputIterator first, InputIterator last);     // create alias from the *this interpreter to the target interpreter     void create_alias(std::string const &cmd,          interpreter &targetInterp, std::string const &targetCmd);     // register a package info (useful when defining packages)     void pkg_provide(std::string const &name, std::string const &version);     // helper for cleaning up callbacks in non-managed interpreters     static void clear_definitions(Tcl_Interp *);private:     // copy not supported     interpreter(const interpreter &);     void operator=(const interpreter &);     void add_function(std::string const &name,          boost::shared_ptr<details::callback_base> cb,          policies const &p = policies());     void add_class(std::string const &name,          boost::shared_ptr<details::class_handler_base> chb);     void add_constructor(std::string const &name,          boost::shared_ptr<details::class_handler_base> chb,          boost::shared_ptr<details::callback_base> cb,          policies const &p = policies());     Tcl_Interp *interp_;     bool owner_;};// object wrapperclass object{public:     // constructors     object();     explicit object(bool b);     object(char const *buf, size_t size); // byte array     explicit object(double b);     explicit object(int i);     // list creation     // the InputIterator should give object& or Tcl_Obj* when dereferenced     template <class InputIterator>     object(InputIterator first, InputIterator last)          : interp_(0)     {          std::vector<Tcl_Obj*> v;          fill_vector(v, first, last);          obj_ = Tcl_NewListObj(static_cast<int>(v.size()),               v.empty() ? NULL : &v[0]);          Tcl_IncrRefCount(obj_);     }     explicit object(long i);     explicit object(char const *s);        // string construction     explicit object(std::string const &s); // string construction     explicit object(Tcl_Obj *o, bool shared = false);     object(object const &other, bool shared = false);     ~object();     // assignment     object & assign(bool b);     object & resize(size_t size);                  // byte array resize     object & assign(char const *buf, size_t size); // byte array assignment     object & assign(double d);     object & assign(int i);     // list assignment     // the InputIterator should give Tcl_Obj* or object& when dereferenced     template <class InputIterator>     object & assign(InputIterator first, InputIterator last)     {          std::vector<Tcl_Obj*> v;          fill_vector(v, first, last);          Tcl_SetListObj(obj_, static_cast<int>(v.size()),               v.empty() ? NULL : &v[0]);          return *this;     }     object & assign(long l);     object & assign(char const *s);        // string assignment     object & assign(std::string const &s); // string assignment     object & assign(object const &o);     object & assign(Tcl_Obj *o);     object & operator=(bool b)               { return assign(b); }     object & operator=(double d)             { return assign(d); }     object & operator=(int i)                { return assign(i); }     object & operator=(long l)               { return assign(l); }     object & operator=(char const *s)        { return assign(s); }     object & operator=(std::string const &s) { return assign(s); }     object & operator=(object const &o)      { return assign(o); }     object & swap(object &other);     // (logically) non-modifying members     template <typename T>     T get(interpreter &i) const;     char const * get() const;             // string get     char const * get(size_t &size) const; // byte array get     size_t length(interpreter &i) const;  // returns list length     object at(interpreter &i, size_t index) const;     Tcl_Obj * get_object() const { return obj_; }     // modifying members     object & append(interpreter &i, object const &o);     object & append_list(interpreter &i, object const &o);     // list replace     // the InputIterator should give Tcl_Obj* or object& when dereferenced     template <class InputIterator>     object & replace(interpreter &i, size_t index, size_t count,          InputIterator first, InputIterator last)     {          std::vector<Tcl_Obj*> v;          fill_vector(v, first, last);          int res = Tcl_ListObjReplace(i.get(), obj_,               static_cast<int>(index), static_cast<int>(count),               static_cast<int>(v.size()), v.empty() ? NULL : &v[0]);          if (res != TCL_OK)          {               throw tcl_error(i.get());          }          return *this;     }     object & replace(interpreter &i, size_t index, size_t count,          object const &o);     object & replace_list(interpreter &i, size_t index, size_t count,          object const &o);     // helper functions for piggy-backing interpreter info     void set_interp(Tcl_Interp *interp);     Tcl_Interp * get_interp() const;     // helper function, also used from interpreter::eval     template <class InputIterator>     static void fill_vector(std::vector<Tcl_Obj*> &v,          InputIterator first, InputIterator last)     {          for (; first != last; ++first)          {               object o(*first, true);               v.push_back(o.obj_);          }     }private:     // helper function used from copy constructors     void init(Tcl_Obj *o, bool shared);     Tcl_Obj *obj_;     Tcl_Interp *interp_;};// available specializations for object::gettemplate <> bool         object::get<bool>(interpreter &i) const;template <> double       object::get<double>(interpreter &i) const;template <> int          object::get<int>(interpreter &i) const;template <> long         object::get<long>(interpreter &i) const;template <> char const * object::get<char const *>(interpreter &i) const;template <> std::string  object::get<std::string>(interpreter &i) const;template <>std::vector<char> object::get<std::vector<char> >(interpreter &i) const;// the InputIterator should give object& or Tcl_Obj* when dereferencedtemplate <class InputIterator>details::result interpreter::eval(InputIterator first, InputIterator last){     std::vector<Tcl_Obj*> v;     object::fill_vector(v, first, last);     int cc = Tcl_EvalObjv(interp_,          static_cast<int>(v.size()), v.empty() ? NULL : &v[0], 0);     if (cc != TCL_OK)     {          throw tcl_error(interp_);     }      return details::result(interp_);}namespace details{// additional callback envelopes for variadic functions#include "details/callbacks_v.h"// additional method envelopes for variadic methods#include "details/methods_v.h"} // namespace details} // namespace Tcl// macro for defining loadable module entry point// - used for extending Tcl interpreter#define CPPTCL_MODULE(name, i) void name##_cpptcl_Init(Tcl::interpreter &i); \     extern "C" int name##_Init(Tcl_Interp *interp) \     { \          Tcl::interpreter i(interp, false); \          name##_cpptcl_Init(i); \          return TCL_OK; \     } \     void name##_cpptcl_Init(Tcl::interpreter &i)#endif // CPPTCL_INCLUDED

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -