📄 elementt.hh
字号:
// -*- c-basic-offset: 4 -*-#ifndef CLICK_ELEMENTT_HH#define CLICK_ELEMENTT_HH#include "eclasst.hh"struct ElementT { int flags; ElementT(); ElementT(const String &, ElementClassT *, const String &, const String & = String()); ~ElementT(); RouterT *router() const { return _owner; } int eindex() const { return _eindex; } bool live() const { return _type; } bool dead() const { return !_type; } void kill(); const String &name() const { return _name; } const char *name_c_str() const { return _name.c_str(); } bool anonymous() const { return _name && _name[0] == ';'; } ElementClassT *type() const { return _type; } String type_name() const { return _type->name(); } const char *type_name_c_str() const { return _type->printable_name_c_str(); } void set_type(ElementClassT *); const String &config() const { return _configuration; } const String &configuration() const { return _configuration; } void set_config(const String &s) { _configuration = s; } void set_configuration(const String &s) { _configuration = s; } String &config() { return _configuration; } String &configuration() { return _configuration; } const String &landmark() const { return _landmark; } void set_landmark(const String &s) { _landmark = s; } String &landmark() { return _landmark; } bool tunnel() const { return _type==ElementClassT::tunnel_type(); } inline bool tunnel_connected() const; ElementT *tunnel_input() const { return _tunnel_input; } ElementT *tunnel_output() const { return _tunnel_output; } int ninputs() const { return _ninputs; } int noutputs() const { return _noutputs; } inline String declaration() const; void *user_data() const { return _user_data; } void set_user_data(void *v) { _user_data = v; } void set_user_data(intptr_t v) { _user_data = (void *)v; } static bool name_ok(const String &, bool allow_anon_names = false); static void redeclaration_error(ErrorHandler *, const char *type, String name, const String &landmark, const String &old_landmark); private: int _eindex; String _name; ElementClassT *_type; String _configuration; String _landmark; int _ninputs; int _noutputs; ElementT *_tunnel_input; ElementT *_tunnel_output; RouterT *_owner; void *_user_data; ElementT(const ElementT &); ElementT &operator=(const ElementT &); friend class RouterT; };struct PortT { ElementT *element; int port; PortT() : element(0), port(-1) { } PortT(ElementT *e, int p) : element(e), port(p) { } bool live() const { return element != 0; } bool dead() const { return element == 0; } RouterT *router() const { return (element ? element->router() : 0); } int eindex() const { return (element ? element->eindex() : -1); } int index_in(const Vector<PortT> &, int start = 0) const; int force_index_in(Vector<PortT> &, int start = 0) const; String unparse_input() const; String unparse_output() const; static void sort(Vector<PortT> &);};class ConnectionT { public: ConnectionT(); ConnectionT(const PortT &, const PortT &, const String & = String()); ConnectionT(const PortT &, const PortT &, const String &, int, int); bool live() const { return _from.live(); } bool dead() const { return _from.dead(); } void kill() { _from.element = 0; } const PortT &from() const { return _from; } const PortT &to() const { return _to; } ElementT *from_element() const { return _from.element; } int from_eindex() const { return _from.eindex(); } int from_port() const { return _from.port; } ElementT *to_element() const { return _to.element; } int to_eindex() const { return _to.eindex(); } int to_port() const { return _to.port; } const String &landmark() const { return _landmark; } int next_from() const { return _next_from; } int next_to() const { return _next_to; } String unparse() const; private: PortT _from; PortT _to; String _landmark; int _next_from; int _next_to; friend class RouterT; };inline voidElementT::kill(){ if (_type) _type->unuse(); _type = 0;}inline voidElementT::set_type(ElementClassT *t){ assert(t); t->use(); if (_type) _type->unuse(); _type = t;}inline StringElementT::declaration() const{ assert(_type); return _name + " :: " + _type->name();}inline boolElementT::tunnel_connected() const{ return _tunnel_input || _tunnel_output;}inline booloperator==(const PortT &h1, const PortT &h2){ return h1.element == h2.element && h1.port == h2.port;}inline booloperator!=(const PortT &h1, const PortT &h2){ return h1.element != h2.element || h1.port != h2.port;}inline booloperator<(const PortT &h1, const PortT &h2){ return h1.eindex() < h2.eindex() || (h1.element == h2.element && h1.port < h2.port);}inline booloperator>(const PortT &h1, const PortT &h2){ return h1.eindex() > h2.eindex() || (h1.element == h2.element && h1.port > h2.port);}inline booloperator<=(const PortT &h1, const PortT &h2){ return h1.eindex() < h2.eindex() || (h1.element == h2.element && h1.port <= h2.port);}inline booloperator>=(const PortT &h1, const PortT &h2){ return h1.eindex() > h2.eindex() || (h1.element == h2.element && h1.port >= h2.port);}#endif
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -