Files
NE_YuR/openflow/include/clicktool/etraits.hh

95 lines
2.1 KiB
C++

// -*- c-basic-offset: 4 -*-
#ifndef CLICK_ETRAITS_HH
#define CLICK_ETRAITS_HH
#include <click/string.hh>
struct Driver {
enum {
USERLEVEL = 0, LINUXMODULE = 1, BSDMODULE = 2, NSMODULE = 3,
ALLMASK = 0xF, COUNT = 4, MULTITHREAD = COUNT
};
static const char *name(int);
static const char *multithread_name(int);
static const char *requirement(int);
static int driver(const String&);
static int driver_mask(const String&);
};
struct ElementTraits {
String name;
String cxx;
String documentation_name;
String header_file;
String source_file;
String port_count_code;
String processing_code;
String flow_code;
String flags;
String methods;
String requirements;
String provisions;
String libs;
String noexport;
int def_index;
int driver_mask;
int name_next;
ElementTraits();
static const ElementTraits &null_traits() { return the_null_traits; }
bool allows_driver(int d) const { return (driver_mask&(1<<d)) != 0; }
bool requires(const String &str) const;
bool provides(const String &str) const;
inline int flag_value(const String &str) const;
int hard_flag_value(const String &str) const;
String *component(int);
String *component(const String &);
void calculate_driver_mask();
enum {
D_NONE,
D_CLASS, D_CXX_CLASS, D_HEADER_FILE, D_PORT_COUNT, D_PROCESSING,
D_FLOW_CODE, D_FLAGS, D_METHODS, D_REQUIREMENTS, D_PROVISIONS, D_LIBS,
D_SOURCE_FILE, D_DOC_NAME, D_NOEXPORT,
D_FIRST_DEFAULT = D_CLASS, D_LAST_DEFAULT = D_LIBS
};
static int parse_component(const String &);
static ElementTraits make(int, ...);
private:
static ElementTraits the_null_traits;
friend class ElementMap;
};
typedef ElementTraits Traits;
inline
ElementTraits::ElementTraits()
: def_index(0), driver_mask(Driver::ALLMASK), name_next(0)
{
}
inline String *
ElementTraits::component(const String &s)
{
return component(parse_component(s));
}
inline int
ElementTraits::flag_value(const String &str) const
{
return flags ? hard_flag_value(str) : -1;
}
#endif