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