16class ClickIno {
public:
21 uint32_t generation()
const {
return _generation; }
24 enum { dt_u = 1U, dt_hh = 2U, dt_hu = 3U, dt_hn = 4U, dt_global = 5U };
25 enum { ino_globaldir = (unsigned) (dt_global << 28),
26 ino_enumdir = (unsigned) (dt_u << 28) };
27 static bool is_handler(
unsigned ino) {
return (int32_t) ino < 0; }
28 static unsigned dirtype(
unsigned ino) {
return ino >> 28; }
29 static bool has_element(
unsigned ino) {
return ino & 0xFFFFU; }
30 static bool has_handlers(
unsigned ino) {
return ino > (dt_u << 28); }
31 static bool has_names(
unsigned ino) {
return ino >= (dt_hn << 28); }
32 static int ino_element(
unsigned ino) {
return (
int) (ino & 0xFFFFU) - 1; }
33 static int ino_handler(
unsigned ino) {
34 return (has_element(ino) ? 0 :
Router::FIRST_GLOBAL_HANDLER)
35 + ((ino >> 16) & 0x7FFFU);
38 static unsigned make_handler(
int e,
int hi) {
39 return 0x80000000U | ((hi & 0x7FFFU) << 16) | ((e + 1) & 0xFFFFU);
41 static unsigned make_dir(
unsigned dtype,
int e) {
42 return (dtype << 28) | ((e + 1) & 0xFFFFU);
47 inline int prepare(
Router *router, uint32_t generation);
49 ino_t lookup(ino_t dir,
const String &component);
53 typedef bool (*filldir_t)(
const char *name,
int name_len, ino_t ino,
int dirtype, loff_t f_pos,
void *user_data);
54 int readdir(ino_t dir, loff_t &f_pos, filldir_t fd,
void *user_data);
67 uint16_t elementno_plus1;
91 inline int xindex(
int elementno)
const;
92 inline int next_xindex(
int elementno)
const;
93 inline int elementno(
int xindex)
const;
95 int name_search(
const String &n,
int first_xi,
int last_xi,
int name_offset)
const;
96 int element_name_search(
const String &n,
int elementno)
const;
98 int grow(
int min_size);
99 int true_prepare(
Router*, uint32_t);
104ClickIno::prepare(
Router* router, uint32_t generation)
106 if (generation != _generation)
107 return true_prepare(router, generation);
113ClickIno::xindex(
int elementno)
const
115 assert(elementno >= -1 && elementno < _nentries - 1);
116 return _x[elementno + 1].xindex;
120ClickIno::next_xindex(
int elementno)
const
122 int xi = xindex(elementno);
123 return xi + _x[xi].skip + 1;
127ClickIno::elementno(
int xindex)
const
129 return _x[xindex].elementno_plus1 - 1;
A router configuration.
Definition router.hh:28
A string of characters.
Definition string.hh:22
The Router class implementing a router configuration.