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

📄 elementmap.hh

📁 COPE the first practical network coding scheme which is developped on click
💻 HH
字号:
// -*- c-basic-offset: 4 -*-#ifndef CLICK_ELEMENTMAP_HH#define CLICK_ELEMENTMAP_HH#include "etraits.hh"class ElementMap { public:    ElementMap();    ElementMap(const String&, ErrorHandler* = 0);    ~ElementMap();    static ElementMap* default_map()		{ return the_element_map; }    static void push_default(ElementMap*);    static void pop_default();        void use()					{ _use_count++; }    void unuse()				{ _use_count--; }        int size() const				{ return _e.size(); }    bool empty() const				{ return _e.size() == 1; }    const Traits& traits(const String&) const;    const Traits& traits_at(int i) const	{ return _e[i]; }    bool has_traits(const String&) const;    int traits_index(const String&) const;    bool provides_global(const String&) const;    int definition_index(int i) const		{ return _e[i].def_index; }    const String& source_directory(const Traits&) const;    const String& package(const Traits&) const;    const String& package(const String&) const;    String documentation_url(const Traits&) const;        class TraitsIterator;    TraitsIterator begin_elements() const;    int add(const Traits&);    void remove_at(int);    void parse(const String& data, ErrorHandler* = 0);    void parse(const String& data, const String& package_name, ErrorHandler* = 0);    void parse_xml(const String& data, const String& package_name, ErrorHandler*);    bool parse_default_file(const String& default_path, ErrorHandler*);    bool parse_requirement_files(RouterT*, const String& default_path, ErrorHandler*, String* not_found = 0);    bool parse_all_files(RouterT*, const String& default_path, ErrorHandler*);    static void report_file_not_found(String default_path, bool found_default, ErrorHandler*);    String unparse(const String& package = String()) const;    String unparse_nonxml() const;    int check_completeness(const RouterT*, ErrorHandler*) const;    bool driver_indifferent(const RouterT*, int driver_mask = Driver::ALLMASK, ErrorHandler* = 0) const;    bool driver_compatible(const RouterT*, int driver, ErrorHandler* = 0) const;    int driver_mask() const		{ return _driver_mask; }    void set_driver(int d)		{ set_driver_mask(1 << d); }    void set_driver_mask(int);  private:    struct Globals {	String srcdir;	String compile_flags;	String package;	String dochref;    };        Vector<Traits> _e;    HashMap<String, int> _name_map;    Vector<Globals> _def;    int _use_count;    int _driver_mask;    int get_driver_mask(const String&);    int driver_elt_index(int) const;    void collect_indexes(const RouterT*, Vector<int>&, ErrorHandler*) const;    static ElementMap* the_element_map;    static void bump_version();    void incr_version() const;};extern int32_t default_element_map_version;class ElementMap::TraitsIterator { public:    TraitsIterator(const ElementMap*, bool elements_only);    operator bool()			{ return _index < _emap->size(); }    void operator++(int);    const ElementTraits& value() const	{ return _emap->traits_at(_index); }    int traits_index() const		{ return _index; }  private:    const ElementMap* _emap;    int _index;    bool _elements_only;    };inline const Traits&ElementMap::traits(const String& name) const{    int i = _name_map[name];    if (!(_e[i].driver_mask & _driver_mask))	i = driver_elt_index(i);    return _e[i];}inline boolElementMap::has_traits(const String& name) const{    int i = _name_map[name];    if (!(_e[i].driver_mask & _driver_mask) && i > 0)	i = driver_elt_index(i);    return i > 0;}inline intElementMap::traits_index(const String& name) const{    int i = _name_map[name];    if (!(_e[i].driver_mask & _driver_mask) && i > 0)	i = driver_elt_index(i);    return i;}inline const String&ElementMap::source_directory(const ElementTraits& t) const{    return _def[t.def_index].srcdir;}inline const String&ElementMap::package(const ElementTraits& t) const{    return _def[t.def_index].package;}inline const String&ElementMap::package(const String& name) const{    return package(traits(name));}inline voidElementMap::bump_version(){    // ensure it stays positive    default_element_map_version =	(default_element_map_version + 1) & 0x7FFFFFFF;}inline voidElementMap::incr_version() const{    if (this == (const ElementMap *)the_element_map)	bump_version();}inline boolElementMap::provides_global(const String& req) const{    return _e[0].provides(req);}inline ElementMap::TraitsIteratorElementMap::begin_elements() const{    return TraitsIterator(this, true);}#endif

⌨️ 快捷键说明

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