#include #include extern "C" { #include } #include #include #include #include #include #include #include #ifndef __APPLE__ #include #ifndef __FreeBSD__ #include #endif #endif namespace node { using namespace v8; class DTraceArgument { public: virtual const char *Type() = 0; virtual void *ArgumentValue(v8::Local) = 0; virtual void FreeArgument(void *) = 0; virtual ~DTraceArgument() { }; }; class DTraceIntegerArgument : public DTraceArgument { public: const char *Type(); void *ArgumentValue(v8::Local); void FreeArgument(void *); }; class DTraceStringArgument : public DTraceArgument { public: const char *Type(); void *ArgumentValue(v8::Local); void FreeArgument(void *); }; class DTraceJsonArgument : public DTraceArgument { public: const char *Type(); void *ArgumentValue(v8::Local); void FreeArgument(void *); DTraceJsonArgument(); ~DTraceJsonArgument(); private: Nan::Persistent JSON; Nan::Persistent JSON_stringify; }; class DTraceProbe : public Nan::ObjectWrap { public: static void Initialize(v8::Local target); usdt_probedef_t *probedef; size_t argc; DTraceArgument *arguments[USDT_ARG_MAX]; static NAN_METHOD(New); static NAN_METHOD(Fire); v8::Local _fire(Nan::NAN_METHOD_ARGS_TYPE, size_t); static Nan::Persistent constructor_template; DTraceProbe(); ~DTraceProbe(); private: }; class DTraceProvider : public Nan::ObjectWrap { public: static void Initialize(v8::Local target); usdt_provider_t *provider; static NAN_METHOD(New); static NAN_METHOD(AddProbe); static NAN_METHOD(RemoveProbe); static NAN_METHOD(Enable); static NAN_METHOD(Disable); static NAN_METHOD(Fire); DTraceProvider(); ~DTraceProvider(); private: static Nan::Persistent constructor_template; }; void InitDTraceProvider(v8::Local target); }