This file is indexed.

/usr/include/root/Math/GenVector/GenVectorIO.h is in libroot-math-genvector-dev 5.34.30-0ubuntu8.

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
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
// @(#)root/mathcore:$Id$
// Authors: W. Brown, M. Fischler, L. Moneta    2005  

 /**********************************************************************
  *                                                                    *
  * Copyright (c) 2005 , LCG ROOT MathLib Team (FNAL component)        *
  *                                                                    *
  *                                                                    *
  **********************************************************************/

// Support templates (class and function) for stream i/o of vectors
//     This is a utuility to allow for control, via manipulators, of the
//     form of
//
// Created by: W. E. Brown and M. Fischler at Tue Jun 21 2005
//
// Last update: Tue Jun 21 2005
//
#ifndef ROOT_Math_GenVector_GenVectorIO 
#define ROOT_Math_GenVector_GenVectorIO  1

#if defined(__alpha) 
#ifndef __USE_STD_IOSTREAM
#define __USE_STD_IOSTREAM
#endif
#endif


#include <cctype>
#include <iostream>


namespace ROOT  {
namespace Math  {

namespace detail  {


// -------- Manipulator support ----------


enum manip_t { open, sep, close, bitforbit };


inline  int
  ios_data( int k )
{
  static int const  ios_data[4]  = { std::ios::xalloc()  // open
                                   , std::ios::xalloc()  // sep
                                   , std::ios::xalloc()  // close
                                   , std::ios::xalloc()  // bitforbit
                                   };

  return ios_data[k];

}  // ios_data()


template< class char_t, class traits_t >
  inline  char_t
  get_manip( std::basic_ios<char_t,traits_t> & ios
           , manip_t m
           )
{
  char_t  ch  = static_cast<char_t>( ios.iword( ios_data(m) ) );
  if( ch )  return ch;

  switch( m )
  { default        : return ios.widen( '?' );
    case open      : return ios.widen( '(' );
    case close     : return ios.widen( ')' );
    case sep       : return ios.widen( ',' );
    case bitforbit : return ch;
  }

}  // get_manip<>()


template< class char_t, class traits_t >
  inline  void
  set_manip( std::basic_ios<char_t,traits_t> & ios
           , manip_t m
           , char_t ch
           )
{
  ios.iword( ios_data(m) ) = static_cast<long>(ch);

}  // set_manip<>()


template< class char_t >
  class manipulator
{
public:
  explicit
    manipulator( manip_t m
               , char_t  ch = 0
               )
    : fMan(m)
    , fChar(ch)
  { }

  template< class traits_t >
    void
    set( std::basic_ios<char_t,traits_t> & ios ) const
  {
    set_manip<char_t>( ios, fMan, fChar );
  }

private:
  manip_t  fMan;
  char_t   fChar;

};  // manipulator<>


template< class char_t, class traits_t >
  inline
  std::basic_istream<char_t,traits_t> &
  require_delim( std::basic_istream<char_t,traits_t> & is
               , manip_t m
               )
{
  char_t delim = get_manip( is, m );
  if( std::isspace(delim) )  return is;

  char_t ch;
  is >> ch;
  if( ch != delim )
    is.setstate( std::ios::failbit );

  return is;

}  // require_delim<>()


template< class char_t, class traits_t >
  inline
  std::basic_ostream<char_t,traits_t> &
  operator << ( std::basic_ostream<char_t,traits_t> & os
              , detail::manipulator<char_t> const   & manip
              )

{
  manip.set(os);
  return os;

}  // op<< <>()


template< class char_t, class traits_t >
  inline
  std::basic_istream<char_t,traits_t> &
  operator >> ( std::basic_istream<char_t,traits_t> & is
              , detail::manipulator<char_t> const   & manip
              )

{
  manip.set(is);
  return is;

}  // op>> <>()

}  // namespace detail


// --------- Functions that allow a user to control vector I/O ----------



template< class char_t >
  inline
  detail::manipulator<char_t>
  set_open( char_t ch )
{
  return detail::manipulator<char_t>( detail::open, ch );

}  // set_open<>()


template< class char_t >
  inline
  detail::manipulator<char_t>
  set_separator( char_t ch )
{
  return detail::manipulator<char_t>( detail::sep, ch );

}  // set_separator<>()


template< class char_t >
  inline
  detail::manipulator<char_t>
  set_close( char_t ch )
{
  return detail::manipulator<char_t>( detail::close, ch );

}  // set_close<>()


template< class char_t, class traits_t >
  inline
  std::basic_ios<char_t,traits_t> &
  human_readable( std::basic_ios<char_t,traits_t> & ios )
{
  ios.iword( ios_data(detail::bitforbit) ) = 0L;
  return ios;

}  // human_readable<>()


template< class char_t, class traits_t >
  inline
  std::basic_ios<char_t,traits_t> &
  machine_readable( std::basic_ios<char_t,traits_t> & ios )
{
  ios.iword( ios_data(detail::bitforbit) ) = 1L;
  return ios;

}  // machine_readable<>()



}  // namespace ROOT
}  // namespace Math


#endif  // ROOT_Math_GenVector_GenVectorIO