#ifndef __VENDOR_VENDOR_BASE_H__ #define __VENDOR_VENDOR_BASE_H__ #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include namespace vendor { class VendorBase; struct MyOpt { const char *name; int has_arg; int val; const char *desc; }; struct LongOpts { const MyOpt *myOpt; int sizeOpt; LongOpts(const MyOpt opts[], const int size); void GetOptions(struct option *opts, std::string &shorts); MyOpt GetOption(char ch, int index); }; class VendorBase { public: VendorBase(); virtual ~VendorBase(); static int32_t ParseOptionArgs(VendorBase *vendor, int argc, char *argv[]); int Exec(); void Exit(int signal); protected: virtual int ParseCmdline(const std::string &optname, const std::string &optarg) = 0; virtual MyOpt *GetOpts() = 0; virtual int GetOptSize() = 0; virtual void Signal(int signal) {} public: virtual int Run() = 0; virtual std::string Name() = 0; virtual void Stop(int signal) = 0; static void SignalHandler(int fd, short event, void *arg); private: }; } // namespace vendor #endif // __VENDOR_VENDOR_BASE_H__