From b55bc428b7e03ce7bcf6ec1eb502f5f443fbd0b8 Mon Sep 17 00:00:00 2001 From: fche Date: Thu, 16 Jun 2005 14:59:17 +0000 Subject: 2005-06-14 Graydon Hoare * tapsets.h: New file. (derived_probe_builder): Callback for making derived probes. (match_key): Component of pattern-matching tree. (match_node): Other component of pattern-matching tree. * tapsets.cxx: Add pattern-matching system for probes. (alias_derived_probe): Skeleton for alias probes. (dwarf_derived_probe): Skeleton for dwarf probes. (register_standard_tapsets): Registry for standard tapsets. --- tapsets.h | 72 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 72 insertions(+) create mode 100644 tapsets.h (limited to 'tapsets.h') diff --git a/tapsets.h b/tapsets.h new file mode 100644 index 00000000..e1ca5f8d --- /dev/null +++ b/tapsets.h @@ -0,0 +1,72 @@ +#ifndef TAPSETS_H +#define TAPSETS_H + +// -*- C++ -*- +// Copyright (C) 2005 Red Hat Inc. +// +// This file is part of systemtap, and is free software. You can +// redistribute it and/or modify it under the terms of the GNU General +// Public License (GPL); either version 2, or (at your option) any +// later version. + +#include "config.h" +#include "staptree.h" +#include "elaborate.h" +#include "translate.h" +#include +#include +#include +#include + +struct +derived_probe_builder +{ + virtual derived_probe * build(probe * base, + probe_point * location, + std::map const & parameters) = 0; + virtual ~derived_probe_builder() {} +}; + + +struct +match_key +{ + std::string name; + bool have_parameter; + token_type parameter_type; + + match_key(std::string const & n); + match_key(probe_point::component const & c); + + match_key & with_number(); + match_key & with_string(); + std::string str() const; + bool operator<(match_key const & other) const; +}; + + +class +match_node +{ + std::map sub; + derived_probe_builder * end; + + public: + match_node(); + derived_probe_builder * find_builder(std::vector const & components, + unsigned pos, + std::vector< std::pair > & parameters); + + match_node & bind(match_key const & k); + match_node & bind(std::string const & k); + match_node & bind_str(std::string const & k); + match_node & bind_num(std::string const & k); + void bind(derived_probe_builder * e); +}; + + +void +register_standard_tapsets(match_node & root); + + +#endif // TAPSETS_H -- cgit