This file is indexed.

/usr/include/itpp/fixed/fix.h is in libitpp-dev 4.3.1-8.

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
/*!
 * \file
 * \brief Definitions of a fixed-point data type Fix
 * \author Johan Bergman
 *
 * -------------------------------------------------------------------------
 *
 * Copyright (C) 1995-2010  (see AUTHORS file for a list of contributors)
 *
 * This file is part of IT++ - a C++ library of mathematical, signal
 * processing, speech processing, and communications classes and functions.
 *
 * IT++ is free software: you can redistribute it and/or modify it under the
 * terms of the GNU General Public License as published by the Free Software
 * Foundation, either version 3 of the License, or (at your option) any
 * later version.
 *
 * IT++ 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 General Public License for more
 * details.
 *
 * You should have received a copy of the GNU General Public License along
 * with IT++.  If not, see <http://www.gnu.org/licenses/>.
 *
 * -------------------------------------------------------------------------
 */

#ifndef FIX_H
#define FIX_H

#include <itpp/fixed/fix_base.h>
#include <itpp/fixed/fix_factory.h>
#include <itpp/itexports.h>

namespace itpp
{

// Forward declarations
template<class Num_T> class Vec;
template<class Num_T> class Mat;

//! \addtogroup fixed
//!@{

/*!
  \brief Fixed-point data type

  See the Detailed Description in the \ref fixed module.
*/
class ITPP_EXPORT Fix : public Fix_Base
{
  friend class CFix;
  template<int, e_mode, o_mode, q_mode> friend class Fixed;
  template<int, e_mode, o_mode, q_mode> friend class CFixed;
public:
  //! Default constructor
  Fix(double x = 0.0, int s = 0, int w = MAX_WORDLEN, e_mode e = TC, o_mode o = WRAP, q_mode q = TRN, Stat *ptr = 0)
      : Fix_Base(s, w, e, o, q, ptr), re(scale_and_apply_modes(x)) {}
  //! Constructor
  explicit Fix(const Fix_Factory &f)
      : Fix_Base(0, f.wordlen, f.emode, f.omode, f.qmode, f.stat_ptr), re(0) {}
  //! Constructor for internal use. No restrictions are applied. The dummies help to avoid ambiguities
  Fix(fixrep r, int s, int, int)
      : Fix_Base(s), re(r) {}
  //! Copy constructor
  Fix(const Fix &x, int w = MAX_WORDLEN, e_mode e = TC, o_mode o = WRAP, q_mode q = TRN, Stat *ptr = 0)
      : Fix_Base(x.shift, w, e, o, q, ptr), re(x.re) {}
  //! Destructor
  virtual ~Fix() {}

  //! Assignment from Fix
  Fix& operator=(const Fix &x);
  //! Assignment from int
  Fix& operator=(const int x);
  //! Addition of Fix
  Fix& operator+=(const Fix &x);
  //! Addition of int
  Fix& operator+=(const int x);
  //! Subtraction of Fix
  Fix& operator-=(const Fix &x);
  //! Subtraction of int
  Fix& operator-=(const int x);
  //! Multiplication with Fix
  Fix& operator*=(const Fix &x);
  //! Multiplication with int
  Fix& operator*=(const int x);
  //! Division with Fix using quantization mode \c TRN
  Fix& operator/=(const Fix &x);
  //! Division with int using quantization mode \c TRN
  Fix& operator/=(const int x);
  //! Unary negative of Fix
  Fix operator-() const;
  //! Left shift \c n bits
  Fix& operator<<=(const int n);
  //! Right shift \c n bits using quantization mode \c qmode (constructor argument)
  Fix& operator>>=(const int n);

  //! Set to <tt>x * pow2(n)</tt> using quantization mode \c qmode (constructor argument)
  void set(double x, int n);
  //! Set to <tt>x * pow2(n)</tt> using quantization mode \c q (function argument)
  void set(double x, int n, q_mode q);
  //! Set data representation (mainly for internal use since it reveals the representation type)
  void set_re(fixrep x) {re = apply_o_mode(x);}

  //! Left shift \c n bits
  void lshift(int n);
  //! Right shift \c n bits using quantization mode \c qmode (constructor argument)
  void rshift(int n);
  //! Right shift \c n bits using quantization mode \c q (function argument)
  void rshift(int n, q_mode q);

  //! Print restrictions
  virtual void print() const;
  //! Get data representation (mainly for internal use since it reveals the representation type)
  fixrep get_re() const {return re;}
  //! Conversion to double
  double unfix() const;

#ifndef NO_IMPLICIT_FIX_CONVERSION
  //! Conversion to double
  operator double() const {
    it_assert_debug(shift>=-63 && shift <= 64, "Fix::operator double: Illegal shift!");
    return double(re)*DOUBLE_POW2[64 - shift];
  }
#endif

  //! Check that x.shift==y.shift OR x==0 OR y==0 and return the shift (for the non-zero argument)
  friend ITPP_EXPORT int assert_shifts(const CFix &x, const Fix &y);
  //! Check that x.shift==y.shift OR x==0 OR y==0 and return the shift (for the non-zero argument)
  friend ITPP_EXPORT int assert_shifts(const Fix &x, const Fix &y);
  //! Check that x.shift==0 OR x==0 OR y==0 and return x.shift
  friend ITPP_EXPORT int assert_shifts(const Fix &x, int y);

protected:
  //! Data representation
  fixrep re;
};

//! Check that x.shift==y.shift OR x==0 OR y==0 and return the shift (for the non-zero argument)
ITPP_EXPORT int assert_shifts(const Fix &x, const Fix &y);
//! Check that x.shift==0 OR x==0 OR y==0 and return x.shift
ITPP_EXPORT int assert_shifts(const Fix &x, int y);

//! Input bit representation and, optionally, the shift
ITPP_EXPORT std::istream &operator>>(std::istream &is, Fix &x);
//! Output bit representation and, optionally, the shift
ITPP_EXPORT std::ostream &operator<<(std::ostream &os, const Fix &x);

//! Typedef for fixed-point vector type
typedef Vec<Fix> fixvec;
//! Typedef for fixed-point matrix type
typedef Mat<Fix> fixmat;

// Specialization of template definition in vec.cpp
template<> void fixvec::set(const char *values);
// Specialization of template definition in mat.cpp
template<> void fixmat::set(const char *values);

//!@}

} // namespace itpp

#endif // #ifndef FIX_H