blob: 9c50c60ec799b34e92b5e643b96420f3a08b96fc [file] [log] [blame]
Mike Dodd8cfa7022010-11-17 11:12:26 -08001/**
2 * @file filename_spec.h
3 * Container holding a sample filename split into its components
4 *
5 * @remark Copyright 2003 OProfile authors
6 * @remark Read the file COPYING
7 *
8 * @author Philippe Elie
9 */
10
11#ifndef FILENAME_SPEC_H
12#define FILENAME_SPEC_H
13
14#include <unistd.h>
15#include <string>
16
17#include "generic_spec.h"
18
19class profile_spec;
20class extra_images;
21
22/**
23 * A class to split and store components of a sample filename.
24 * These derived values are then used to match against a
25 * profile_spec as given by the user.
26 */
27class filename_spec
28{
29 friend class profile_spec;
30
31public:
32 /**
33 * @param filename the samples filename
34 * @param extra extra binary image location
35 *
36 * build a filename_spec from a samples filename
37 */
38 filename_spec(std::string const & filename,
39 extra_images const & extra);
40
41 filename_spec();
42
43 /**
44 * @param filename a sample filename
45 * @param extra extra binary image location
46 *
47 * setup filename spec according to the samples filename. PP:3.19 to
48 * 3.25
49 */
50 void set_sample_filename(std::string const & filename,
51 extra_images const & extra);
52
53 /**
54 * @param rhs right hand side of the match operator
55 * @param binary if binary is non-empty, and matches
56 * the binary or lib name, use it rather than the
57 * one in rhs.
58 *
59 * return true if *this match rhs, matching if:
60 * - image_name are identical
61 * - lib_name are identical
62 * - event_spec match
63 *
64 * This operation is not commutative. First part of PP:3.24
65 */
66 bool match(filename_spec const & rhs,
67 std::string const & binary) const;
68
69 bool is_dependent() const;
70
71private:
72 std::string image;
73 std::string lib_image;
74 std::string cg_image;
75 std::string event;
76 int count;
77 unsigned int unitmask;
78 generic_spec<pid_t> tgid;
79 generic_spec<pid_t> tid;
80 generic_spec<int> cpu;
81};
82
83
84#endif /* !FILENAME_SPEC_H */