📄 cxxclass.hh
字号:
#ifndef CXXCLASS_HH#define CXXCLASS_HH#include <click/string.hh>#include <click/vector.hh>#include <click/hashmap.hh>class StringAccum;String compile_pattern(const String &);class CxxFunction { String _name; bool _in_header; bool _from_header_file; bool _alive; String _ret_type; String _args; String _body; String _clean_body; bool find_expr(const String &, int *, int *, int[10], int[10]) const; public: static bool parsing_header_file; CxxFunction() : _alive(false) { } CxxFunction(const String &, bool, const String &, const String &, const String &, const String &); String name() const { return _name; } bool alive() const { return _alive; } bool in_header() const { return _in_header; } bool from_header_file() const { return _from_header_file; } const String &ret_type() const { return _ret_type; } const String &args() const { return _args; } const String &body() const { return _body; } const String &clean_body() const { return _clean_body; } void set_body(const String &b) { _body = b; _clean_body = String(); } void kill() { _alive = false; } void unkill() { _alive = true; } bool find_expr(const String &) const; bool replace_expr(const String &, const String &); };class CxxClass { String _name; Vector<CxxClass *> _parents; HashMap<String, int> _fn_map; Vector<CxxFunction> _functions; Vector<int> _has_push; Vector<int> _has_pull; Vector<int> _should_rewrite; bool reach(int, Vector<int> &); public: CxxClass(const String &); const String &name() const { return _name; } int nparents() const { return _parents.size(); } CxxClass *parent(int i) const { return _parents[i]; } int nfunctions() const { return _functions.size(); } CxxFunction *find(const String &); CxxFunction &function(int i) { return _functions[i]; } CxxFunction &defun(const CxxFunction &); void add_parent(CxxClass *); bool find_should_rewrite(); bool should_rewrite(int i) const { return _should_rewrite[i]; } void header_text(StringAccum &) const; void source_text(StringAccum &) const; };class CxxInfo { public: CxxInfo(); ~CxxInfo(); void parse_file(const String &, bool header, String * = 0); CxxClass *find_class(const String &) const; CxxClass *make_class(const String &); private: HashMap<String, int> _class_map; Vector<CxxClass *> _classes; CxxInfo(const CxxInfo &); CxxInfo &operator=(const CxxInfo &); int parse_function_definition(const String &text, int fn_start_p, int paren_p, const String &original, CxxClass *cxx_class); int parse_class_definition(const String &, int, const String &); int parse_class(const String &text, int p, const String &original, CxxClass *cxx_class); };inline CxxFunction *CxxClass::find(const String &name){ int which = _fn_map[name]; return (which >= 0 ? &_functions[which] : 0);}inline CxxClass *CxxInfo::find_class(const String &name) const{ int which = _class_map[name]; return (which >= 0 ? _classes[which] : 0);}#endif
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -