#ifndef SIGNATURE_HH
#define SIGNATURE_HH
#include <click/vector.hh>
#include <click/string.hh>
class RouterT;
class ElementMap;
class ProcessingT;

struct SignatureNode {

  int _eid;
  int _phase;
  Vector<int> _connections;
  int _next;

  SignatureNode()			{ }
  SignatureNode(int eid)		: _eid(eid), _phase(0), _next(-1) { }
  
};

class Signatures { public:

  enum { SIG_NOT_SPECIAL = 0 };

  Signatures(const RouterT *);

  void specialize_class(const String &, bool);
  
  void analyze(ElementMap &);

  const Vector<int> &signature_ids() const	{ return _sigid; }
  int nsignatures() const			{ return _sigs.size(); }

 private:
  
  const RouterT *_router;
  
  Vector<int> _sigid;
  Vector<SignatureNode> _sigs;

  void create_phase_0(const ProcessingT &);
  void check_port_numbers(int eid, const ProcessingT &);
  bool next_phase(int phase, int eid, Vector<int> &, const ProcessingT &);
  void print_signature() const;
  
};

#endif


syntax highlighted by Code2HTML, v. 0.9.1