This file is indexed.

/usr/include/trilinos/ProfileHackPack_profile_hack.hpp is in libtrilinos-dev 10.4.0.dfsg-1ubuntu2.

This file is owned by root:root, with mode 0o644.

The actual contents of the file can be viewed below.

  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
// @HEADER
// ***********************************************************************
// 
// Moocho: Multi-functional Object-Oriented arCHitecture for Optimization
//                  Copyright (2003) Sandia Corporation
// 
// Under terms of Contract DE-AC04-94AL85000, there is a non-exclusive
// license for use of this work by or on behalf of the U.S. Government.
// 
// This library is free software; you can redistribute it and/or modify
// it under the terms of the GNU Lesser General Public License as
// published by the Free Software Foundation; either version 2.1 of the
// License, or (at your option) any later version.
//  
// This library is distributed in the hope that it will be useful, but
// WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
// Lesser General Public License for more details.
//  
// You should have received a copy of the GNU Lesser General Public
// License along with this library; if not, write to the Free Software
// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
// USA
// Questions? Contact Roscoe A. Bartlett (rabartl@sandia.gov) 
// 
// ***********************************************************************
// @HEADER

#ifndef PROFILE_HACK_H
#define PROFILE_HACK_H

#include "StopWatchPack_stopwatch.hpp"

namespace ProfileHackPack {

/** \defgroup ProfileHackPack_grp Poor-mans profiling helper tools.
 * \ingroup Misc_grp
 *
 * These are tools that allow a developer to get some profiling
 * results without fancy profiling tools included with the compiler.
 * These tools collect timings for an entire process and should work
 * properly in a multi-threaded application.  The only inteface
 * element that a developer should be concerned with is the
 * ProfileHackPack::ProfileTiming class.
 */
//@{

/** \brief Set the name and time for a function or other section of code.
 *
 * This function can be called multiple times with the same <tt>func_name</tt>
 * in which case the number of function calls and total time for <tt>func_name</tt>
 * will be accumulated.
 */
void set_time( const char func_name[], double time_secs );

/** \brief Print out the timing generated by calls to set_time().
 */
void print_timings( std::ostream& out );

/** \brief Helper class that takes care of timing.
 *
 * Here is a simple program that uses these this class:
 \verbatim
 #include <iostream>

 int main() {
 #ifdef USE_PROFILE_HACK
     ProfileHackPack::ProfileTiming profile_timing("main()",&std::cout);
 #endif
     for( int i = 0; i < 10; ++i ) {
       f();
       g();
     }
     return 0;
     // When main() exists, the destructor for profile_timing will 
     // record the time and will print the total times and number of
   // calls for "main()", "f()" and "g()" to <tt>std::cout</tt>.
 }

 void f() {
 #ifdef USE_PROFILE_HACK
     ProfileHackPack::ProfileTiming profile_timing("f()");
 #endif
     ...
     //  When f() exists, the destructor for profile_timing will record the
     // time for this function call and increment the number of calls to this
     // function.
 }

 void g() {
 #ifdef USE_PROFILE_HACK
     ProfileHackPack::ProfileTiming profile_timing("g()");
 #endif
     ...
     //  When g() exists, the destructor for profile_timing will record the
     // time for this function call and increment the number of calls to this
     // function.
 }

 \endverbatim
 *
 * ToDo: Show an example of the output that might be generated for the above program.
 *
 * In the above program, if <tt>USE_PROFILE_HACK</tt> is not defined, then there will
 * be no runtime performance penalty and no profiling results will be printed.
 *
 * This class collects timings for an entire process and should work
 * properly in a multi-threaded application.
 */
class ProfileTiming {
public:
  /** \brief 
   *
   * @param  func_name  The name of the function to be timed
   * @param  out        If != NULL then the function times will
   *                    be printed to this stream when object is destroyed.
   */
  ProfileTiming( const std::string& func_name, std::ostream* out = NULL )
    : func_name_(func_name), out_(out)
  {
    timer_.reset();
    timer_.start();
  }
  /** \brief . */
  ~ProfileTiming()
  {
    set_time( func_name_.c_str(), timer_.read() );
    if( out_ )
      print_timings( *out_ );
  }

private:
  /** \brief . */
  std::string                 func_name_;
  std::ostream                *out_;
  StopWatchPack::stopwatch    timer_;

  // Not defined and not to be called!
  ProfileTiming();
  ProfileTiming(const ProfileTiming&);
  ProfileTiming& operator=(const ProfileTiming&);

}; // end class ProfileTiming

//@}

} // end namespace ProfileHackPack

#endif // PROFILE_HACK_H