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

📄 permstr.hh

📁 Click is a modular router toolkit. To use it you ll need to know how to compile and install the sof
💻 HH
字号:
#ifndef CLICKY_PERMSTR_HH#define CLICKY_PERMSTR_HH#include <assert.h>#include <string.h>#include <click/string.hh>#include <click/hashcode.hh>class PermString;inline bool operator==(PermString a, PermString b);inline bool operator!=(PermString a, PermString b);class PermString { struct Doodad; public:    typedef Doodad *Capsule;    // Declare a PermString::Initializer in any file in which you declare    // static global PermStrings.    struct Initializer { Initializer(); };    PermString()	: _rep(zero_char_doodad.data) {    }    explicit PermString(char c)	: _rep(one_char_doodad[(unsigned char) c].data) {    }    inline PermString(const char *s);    inline PermString(const char *s, int len);    inline PermString(const char *begin, const char *end);    inline PermString(const String &str);    typedef int (PermString::*unspecified_bool_type)() const;    inline operator unspecified_bool_type() const;    inline bool operator!() const;    inline int length() const;    char operator[](int i) const;    inline const char *c_str() const {	return _rep;    }    inline char operator*() const {	return *_rep;    }    inline operator String() const {	return String::make_stable(_rep, length());    }    inline const char *begin() const;    inline const char *end() const;    friend inline bool operator==(PermString a, PermString b);    friend inline bool operator!=(PermString a, PermString b);    inline Capsule capsule() const;    inline static PermString decapsule(Capsule c);    inline hashcode_t hashcode() const {	return (uintptr_t) _rep;    }  private:    struct Doodad {	Doodad *next;	int length;	char data[2];    };    const char *_rep;    PermString(Doodad* d)		: _rep(d->data) { }    void initialize(const char*, int);    Doodad* doodad() const { return (Doodad*)(_rep - offsetof(Doodad, data)); }    friend struct PermString::Initializer;    static void static_initialize();    enum { NHASH = 1024 };	// must be power of 2    static Doodad zero_char_doodad, one_char_doodad[256], *buckets[NHASH];};inline PermString::PermString(const char* s){    initialize(s, -1);}inline PermString::PermString(const char* s, int len){    initialize(s, len);}inline PermString::PermString(const char* begin, const char* end){    assert(end);    initialize(begin, end > begin ? end - begin : 0);}inline PermString::PermString(const String &str){    initialize(str.begin(), str.length());}inline PermString::operator unspecified_bool_type() const{    return _rep != zero_char_doodad.data ? &PermString::length : 0;}inline bool PermString::operator!() const{    return _rep == zero_char_doodad.data;}inline int PermString::length() const{    return doodad()->length;}inline const char *PermString::begin() const{    return _rep;}inline const char *PermString::end() const{    return _rep + doodad()->length;}inline char PermString::operator[](int i) const{    assert((unsigned) i < (unsigned) length());    return c_str()[i];}inline bool operator==(PermString a, PermString b){    return a._rep == b._rep;}inline bool operator==(PermString a, const char *b){    return (!a || !b ? !a && !b : strcmp(a.c_str(), b) == 0);}inline bool operator==(const char *a, PermString b){    return b == a;}inline bool operator!=(PermString a, PermString b){    return a._rep != b._rep;}inline bool operator!=(PermString a, const char *b){    return !(a == b);}inline bool operator!=(const char *a, PermString b){    return !(b == a);}inline bool operator==(PermString a, const String &b){    return a.length() == b.length() && memcmp(a.begin(), b.begin(), a.length()) == 0;}inline bool operator==(const String &a, PermString b){    return b == a;}inline bool operator!=(PermString a, const String &b){    return !(a == b);}inline bool operator!=(const String &a, PermString b){    return !(b == a);}inline bool operator<(PermString a, PermString b){    // NOT lexicographic ordering!    return a.begin() < b.begin();}inline PermString::Capsule PermString::capsule() const{    return doodad();}inline PermString PermString::decapsule(Capsule c){    return PermString(c);}PermString operator+(PermString a, PermString b);#endif

⌨️ 快捷键说明

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