filename_spec.cpp revision 8cfa702f803c5ef6a2b062a489a1b2cf66b45b5e
1/** 2 * @file filename_spec.cpp 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#include <string> 12 13#include "filename_spec.h" 14#include "parse_filename.h" 15#include "generic_spec.h" 16#include "locate_images.h" 17 18 19using namespace std; 20 21 22filename_spec::filename_spec(string const & filename, 23 extra_images const & extra) 24{ 25 set_sample_filename(filename, extra); 26} 27 28 29filename_spec::filename_spec() 30 : image("*"), lib_image("*") 31{ 32} 33 34 35bool filename_spec::match(filename_spec const & rhs, 36 string const & binary) const 37{ 38 if (!tid.match(rhs.tid) || !cpu.match(rhs.cpu) || 39 !tgid.match(rhs.tgid) || count != rhs.count || 40 unitmask != rhs.unitmask || event != rhs.event) { 41 return false; 42 } 43 44 if (binary.empty()) 45 return image == rhs.image && lib_image == rhs.lib_image; 46 47 // PP:3.3 if binary is not empty we must match either the 48 // lib_name if present or the image name 49 if (!rhs.lib_image.empty()) { 50 // FIXME: use fnmatch ? 51 return rhs.lib_image == binary; 52 } 53 54 // FIXME: use fnmatch ? 55 return rhs.image == binary; 56} 57 58 59void filename_spec::set_sample_filename(string const & filename, 60 extra_images const & extra) 61{ 62 parsed_filename parsed = parse_filename(filename, extra); 63 64 image = parsed.image; 65 lib_image = parsed.lib_image; 66 cg_image = parsed.cg_image; 67 event = parsed.event; 68 count = op_lexical_cast<int>(parsed.count); 69 unitmask = op_lexical_cast<unsigned int>(parsed.unitmask); 70 tgid.set(parsed.tgid); 71 tid.set(parsed.tid); 72 cpu.set(parsed.cpu); 73} 74 75 76bool filename_spec::is_dependent() const 77{ 78 if (cg_image.empty()) 79 return image != lib_image; 80 return cg_image != image || cg_image != lib_image; 81} 82