18cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd/**
28cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd * @file filename_spec.h
38cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd * Container holding a sample filename split into its components
48cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd *
58cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd * @remark Copyright 2003 OProfile authors
68cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd * @remark Read the file COPYING
78cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd *
88cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd * @author Philippe Elie
98cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd */
108cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd
118cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd#ifndef FILENAME_SPEC_H
128cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd#define FILENAME_SPEC_H
138cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd
148cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd#include <unistd.h>
158cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd#include <string>
168cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd
178cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd#include "generic_spec.h"
188cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd
198cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Doddclass profile_spec;
208cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Doddclass extra_images;
218cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd
228cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd/**
238cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd * A class to split and store components of a sample filename.
248cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd * These derived values are then used to match against a
258cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd * profile_spec as given by the user.
268cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd */
278cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Doddclass filename_spec
288cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd{
298cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd	friend class profile_spec;
308cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd
318cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Doddpublic:
328cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd	/**
338cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd	 * @param filename  the samples filename
348cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd	 * @param extra  extra binary image location
358cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd	 *
368cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd	 * build a filename_spec from a samples filename
378cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd	 */
388cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd	filename_spec(std::string const & filename,
398cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd		      extra_images const & extra);
408cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd
418cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd	filename_spec();
428cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd
438cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd	/**
448cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd	 * @param filename  a sample filename
458cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd	 * @param extra  extra binary image location
468cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd	 *
478cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd	 * setup filename spec according to the samples filename. PP:3.19 to
488cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd	 * 3.25
498cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd	 */
508cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd	void set_sample_filename(std::string const & filename,
518cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd				 extra_images const & extra);
528cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd
538cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd	/**
548cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd	 * @param rhs  right hand side of the match operator
558cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd	 * @param binary  if binary is non-empty, and matches
568cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd	 * the binary or lib name, use it rather than the
578cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd	 * one in rhs.
588cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd	 *
598cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd	 * return true if *this match rhs, matching if:
608cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd	 *  - image_name are identical
618cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd	 *  - lib_name are identical
628cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd	 *  - event_spec match
638cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd	 *
648cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd	 * This operation is not commutative. First part of PP:3.24
658cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd	 */
668cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd	bool match(filename_spec const & rhs,
678cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd	           std::string const & binary) const;
688cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd
698cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd	bool is_dependent() const;
708cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd
718cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Doddprivate:
728cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd	std::string image;
738cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd	std::string lib_image;
748cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd	std::string cg_image;
758cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd	std::string event;
768cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd	int count;
778cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd	unsigned int unitmask;
788cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd	generic_spec<pid_t> tgid;
798cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd	generic_spec<pid_t> tid;
808cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd	generic_spec<int> cpu;
818cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd};
828cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd
838cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd
848cfa702f803c5ef6a2b062a489a1b2cf66b45b5eMike Dodd#endif /* !FILENAME_SPEC_H */
85