1/**
2 * @file parse_filename.h
3 * Split a sample filename into its constituent parts
4 *
5 * @remark Copyright 2003 OProfile authors
6 * @remark Read the file COPYING
7 *
8 * @author Philippe Elie
9 */
10
11#ifndef PARSE_FILENAME_H
12#define PARSE_FILENAME_H
13
14#include <string>
15
16class extra_images;
17
18/**
19 * a convenience class to store result of parse_filename()
20 */
21struct parsed_filename
22{
23	std::string image;
24	std::string lib_image;
25	/// destination image for call graph file, empty if this sample
26	/// file is not a callgraph file.
27	std::string cg_image;
28	std::string event;
29	std::string count;
30	std::string unitmask;
31	std::string tgid;
32	std::string tid;
33	std::string cpu;
34
35	/// return true if the profile specification are identical.
36	bool profile_spec_equal(parsed_filename const & parsed);
37
38	/**
39	 * the original sample filename from which the
40	 * above components are built
41	 */
42	std::string filename;
43	bool jit_dumpfile_exists;
44};
45
46
47/// debugging helper
48std::ostream & operator<<(std::ostream &, parsed_filename const &);
49
50
51/**
52 * parse a sample filename
53 * @param filename in: a sample filename
54 * @param extra_found_images binary image location
55 *
56 * filename is split into constituent parts, the lib_image is optional
57 * and can be empty on successfull call. All other error are fatal.
58 * Filenames are encoded as according to PP:3.19 to PP:3.25
59 *
60 * all errors throw an std::invalid_argument exception
61 */
62parsed_filename parse_filename(std::string const & filename,
63			       extra_images const & extra_found_images);
64
65#endif /* !PARSE_FILENAME_H */
66