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

📄 nameinfo.hh

📁 COPE the first practical network coding scheme which is developped on click
💻 HH
字号:
// -*- c-basic-offset: 4; related-file-name: "../../lib/nameinfo.cc" -*-#ifndef CLICK_NAMEINFO_HH#define CLICK_NAMEINFO_HH#include <click/string.hh>#include <click/vector.hh>#include <click/straccum.hh>CLICK_DECLSclass Element;class NameDB;class ErrorHandler;class NameInfo { public:    NameInfo();    ~NameInfo();    static void static_initialize();    static void static_cleanup();    enum {	T_NONE = 0,	T_SCHEDULEINFO = 0x00000001,	T_ETHERNET_ADDR = 0x01000001,	T_IP_ADDR = 0x04000001,	T_IP_PREFIX = 0x04000002,	T_IP_PROTO = 0x04000003,	T_IPFILTER_TYPE = 0x04000004,	T_TCP_OPT = 0x04000005,	T_ICMP_TYPE = 0x04010000,	T_ICMP_CODE = 0x04010100,	T_IP_PORT = 0x04020000,	T_TCP_PORT = 0x04020006,	T_UDP_PORT = 0x04020011,	T_IP_FIELDNAME = 0x04030000,	T_ICMP_FIELDNAME = 0x04030001,	T_TCP_FIELDNAME = 0x04030006,	T_UDP_FIELDNAME = 0x04030011,	T_IP6_ADDR = 0x06000001,	T_IP6_PREFIX = 0x06000002    };    static NameDB *getdb(uint32_t type, const Element *prefix, int value_size, bool create);    static void installdb(NameDB *db, const Element *prefix);    static void removedb(NameDB *db);    static bool query(uint32_t type, const Element *prefix, const String &name, void *value_store, int value_size);    static bool query_int(uint32_t type, const Element *prefix, const String &name, int32_t *value_store);    static bool query_int(uint32_t type, const Element *prefix, const String &name, uint32_t *value_store);    static String revquery(uint32_t type, const Element *prefix, const void *value, int value_size);    static inline String revquery_int(uint32_t type, const Element *prefix, int32_t value);    static inline void define(uint32_t type, const Element *prefix, const String &name, const void *value, int value_size);    static inline void define_int(uint32_t type, const Element *prefix, const String &name, int32_t value);#ifdef CLICK_NAMEDB_CHECK    void check(ErrorHandler *);    static void check(const Element *, ErrorHandler *);#endif      private:        Vector<NameDB *> _namedb_roots;    Vector<NameDB *> _namedbs;    inline NameDB *install_dynamic_sentinel() { return (NameDB *) this; }    NameDB *namedb(uint32_t type, int value_size, const String &prefix, NameDB *installer);    #ifdef CLICK_NAMEDB_CHECK    uintptr_t _check_generation;    void checkdb(NameDB *db, NameDB *parent, ErrorHandler *errh);#endif    };class NameDB { public:        inline NameDB(uint32_t type, const String &prefix, int value_size);    virtual ~NameDB()			{ }    uint32_t type() const		{ return _type; }    int value_size() const		{ return _value_size; }    const String &prefix() const	{ return _prefix; }    NameDB *prefix_parent() const	{ return _prefix_parent; }    virtual bool query(const String &name, void *value, int vsize) = 0;    virtual String revfind(const void *value, int vsize);    virtual void define(const String &name, const void *value, int vsize);    inline void define_int(const String &name, int32_t value);#ifdef CLICK_NAMEDB_CHECK    virtual void check(ErrorHandler *);#endif      private:        uint32_t _type;    String _prefix;    int _value_size;    NameDB *_prefix_parent;    NameDB *_prefix_sibling;    NameDB *_prefix_child;    NameInfo *_installed;#ifdef CLICK_NAMEDB_CHECK    uintptr_t _check_generation;#endif        friend class NameInfo;    };class StaticNameDB : public NameDB { public:    struct Entry {	const char *name;	uint32_t value;    };    inline StaticNameDB(uint32_t type, const String &prefix, const Entry *entry, int nentry);    bool query(const String &name, void *value, int vsize);    String revfind(const void *value, int vsize);#ifdef CLICK_NAMEDB_CHECK    void check(ErrorHandler *);#endif      private:    const Entry *_entries;    int _nentries;	};class DynamicNameDB : public NameDB { public:    inline DynamicNameDB(uint32_t type, const String &prefix, int vsize);    bool query(const String &name, void *value, int vsize);    void define(const String &name, const void *value, int vsize);    String revfind(const void *value, int vsize);    #ifdef CLICK_NAMEDB_CHECK    void check(ErrorHandler *);#endif      private:    Vector<String> _names;    StringAccum _values;    int _sorted;    void *find(const String &name, bool create);    void sort();    };inlineNameDB::NameDB(uint32_t type, const String &prefix, int vsize)    : _type(type), _prefix(prefix), _value_size(vsize),      _prefix_parent(0), _prefix_sibling(0), _prefix_child(0), _installed(0){#ifdef CLICK_NAMEDB_CHECK    _check_generation = 0;#endif}inlineStaticNameDB::StaticNameDB(uint32_t type, const String &prefix, const Entry *entry, int nentry)    : NameDB(type, prefix, sizeof(entry->value)), _entries(entry), _nentries(nentry){}inlineDynamicNameDB::DynamicNameDB(uint32_t type, const String &prefix, int vsize)    : NameDB(type, prefix, vsize), _sorted(0){}inline StringNameInfo::revquery_int(uint32_t type, const Element *e, int32_t value){    return revquery(type, e, &value, sizeof(value));}inline voidNameInfo::define(uint32_t type, const Element *e, const String &name, const void *value, int vsize){    if (NameDB *db = getdb(type, e, vsize, true))	db->define(name, value, vsize);}inline voidNameInfo::define_int(uint32_t type, const Element *e, const String &name, const int32_t value){    if (NameDB *db = getdb(type, e, sizeof(value), true))	db->define(name, &value, sizeof(value));}inline voidNameDB::define_int(const String &name, const int32_t value){    define(name, &value, sizeof(value));}CLICK_ENDDECLS#endif

⌨️ 快捷键说明

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