gem5
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
match.cc
Go to the documentation of this file.
1 /*
2  * Copyright (c) 2004-2005 The Regents of The University of Michigan
3  * All rights reserved.
4  *
5  * Redistribution and use in source and binary forms, with or without
6  * modification, are permitted provided that the following conditions are
7  * met: redistributions of source code must retain the above copyright
8  * notice, this list of conditions and the following disclaimer;
9  * redistributions in binary form must reproduce the above copyright
10  * notice, this list of conditions and the following disclaimer in the
11  * documentation and/or other materials provided with the distribution;
12  * neither the name of the copyright holders nor the names of its
13  * contributors may be used to endorse or promote products derived from
14  * this software without specific prior written permission.
15  *
16  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
17  * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
18  * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
19  * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
20  * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
21  * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
22  * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
23  * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
24  * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
25  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
26  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
27  *
28  * Authors: Nathan Binkert
29  */
30 
31 #include "base/match.hh"
32 
33 #include "base/str.hh"
34 
35 using namespace std;
36 
38 {
39 }
40 
41 ObjectMatch::ObjectMatch(const string &expr)
42 {
43  setExpression(expr);
44 }
45 
46 void
47 ObjectMatch::setExpression(const string &expr)
48 {
49  tokens.resize(1);
50  tokenize(tokens[0], expr, '.');
51 }
52 
53 void
55 {
56  if (expr.empty()) {
57  tokens.resize(0);
58  } else {
59  tokens.resize(expr.size());
60  for (vector<string>::size_type i = 0; i < expr.size(); ++i)
61  tokenize(tokens[i], expr[i], '.');
62  }
63 }
64 
69 bool
70 ObjectMatch::domatch(const string &name) const
71 {
72  vector<string> name_tokens;
73  tokenize(name_tokens, name, '.');
74  int ntsize = name_tokens.size();
75 
76  int num_expr = tokens.size();
77  for (int i = 0; i < num_expr; ++i) {
78  const vector<string> &token = tokens[i];
79  int jstop = token.size();
80 
81  bool match = true;
82  for (int j = 0; j < jstop; ++j) {
83  if (j >= ntsize)
84  break;
85 
86  const string &var = token[j];
87  if (var != "*" && var != name_tokens[j]) {
88  match = false;
89  break;
90  }
91  }
92 
93  if (match)
94  return true;
95  }
96 
97  return false;
98 }
99 
const std::string & name()
Definition: trace.cc:49
Bitfield< 7 > i
Definition: miscregs.hh:1378
ObjectMatch()
Definition: match.cc:37
void setExpression(const std::string &expression)
Bitfield< 24 > j
Definition: miscregs.hh:1369
void tokenize(vector< string > &v, const string &s, char token, bool ignore)
Definition: str.cc:69
bool domatch(const std::string &name) const
Definition: match.cc:70

Generated on Fri Jun 9 2017 13:03:41 for gem5 by doxygen 1.8.6