This file is indexed.

/usr/include/wfmath-1.0/wfmath/const.h is in libwfmath-1.0-dev 1.0.2+dfsg1-0.4.

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
// const.h (Defined constants for the WFMath library)
//
//  The WorldForge Project
//  Copyright (C) 2001, 2002  The WorldForge Project
//
//  This program 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 2 of the License, or
//  (at your option) any later version.
//
//  This program 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 this program; if not, write to the Free Software
//  Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
//
//  For information about WorldForge and its authors, please contact
//  the Worldforge Web Site at http://www.worldforge.org.

// Author: Ron Steinke
// Created: 2001-12-7

#ifndef WFMATH_CONST_H
#define WFMATH_CONST_H

#include <limits>

#ifdef _MSC_VER
  #if _MSC_VER < 1500
    #error "You are using an older version of MSVC++ with extremely poor"
    #error "template support. Please use at least version 2008,"
    #error "or try a different compiler."
  #endif
#endif

/// Generic library namespace
namespace WFMath {

// WFMath::Foo::toAtlas() has to return a definite type,
// we deal with supporting both 0.4 and 0.6 by forward declaring
// types which we define in the AtlasConv header
class AtlasInType;
class AtlasOutType;

template<int dim> class AxisBox;
template<int dim> class Ball;
template<int dim> class Point;
template<int dim> class Polygon;
template<int dim> class RotBox;
template<int dim> class RotMatrix;
template<int dim> class Segment;
template<int dim> class Vector;
class Quaternion;

// Constants

/// Determines how close to machine precision the library tries to come.
#define WFMATH_PRECISION_FUDGE_FACTOR 30

template<typename FloatType>
struct numeric_constants
{
  /// The constant pi
  static FloatType pi();
  /// The square root of pi
  static FloatType sqrt_pi();
  /// The natural logarithm of pi
  static FloatType log_pi();
  /// The square root of 2
  static FloatType sqrt2();
  /// The square root of 3
  static FloatType sqrt3();
  /// The natural logarithm of 2
  static FloatType log2();
  /// This is the attempted precision of the library.
  static FloatType epsilon();
};

template<>
struct numeric_constants<float>
{
  static float pi() {
    return 3.14159265358979323846264338327950288419716939937508F;
  }
  static float sqrt_pi() {
    return 1.77245385090551602729816748334114518279754945612237F;
  }
  static float log_pi() {
    return 1.14472988584940017414342735135305871164729481291530F;
  }
  static float sqrt2() {
    return 1.41421356237309504880168872420969807856967187537693F;
  }
  static float sqrt3() {
    return 1.73205080756887729352744634150587236694280525381037F;
  }
  static float log2() {
    return 0.69314718055994530941723212145817656807550013436025F;
  }
  static float epsilon() {
    return (WFMATH_PRECISION_FUDGE_FACTOR *
            std::numeric_limits<float>::epsilon());
  }
};

template<>
struct numeric_constants<double>
{
  static double pi() {
    return 3.14159265358979323846264338327950288419716939937508;
  }
  static double sqrt_pi() {
    return 1.77245385090551602729816748334114518279754945612237;
  }
  static double log_pi() {
    return 1.14472988584940017414342735135305871164729481291530;
  }
  static double sqrt2() {
    return 1.41421356237309504880168872420969807856967187537693;
  }
  static double sqrt3() {
    return 1.73205080756887729352744634150587236694280525381037;
  }
  static double log2() {
    return 0.69314718055994530941723212145817656807550013436025;
  }
  static double epsilon() {
    return (WFMATH_PRECISION_FUDGE_FACTOR *
            std::numeric_limits<double>::epsilon());
  }
};

/// How long we can let RotMatrix and Quaternion go before fixing normalization
#define WFMATH_MAX_NORM_AGE ((WFMATH_PRECISION_FUDGE_FACTOR * 2) / 3)

/// Basic floating point type
typedef float CoordType;

// Basic comparisons

double _ScaleEpsilon(double x1, double x2, double epsilon);
float _ScaleEpsilon(float x1, float x2, float epsilon);
CoordType _ScaleEpsilon(const CoordType* x1, const CoordType* x2,
		        int length, CoordType epsilon = numeric_constants<CoordType>::epsilon());

/// Test for equality up to precision epsilon
/**
 * Returns true if the difference between the numbers is less
 * than epsilon. Note that epsilon is multiplied by 2 raised
 * to the power of the exponent of the smaller number. So,
 * for example, Equal(0.00010000, 0.00010002, 1.0e-4) will not
 * compare equal, but Equal(0.00010000, 0.00010002, 1.0e-3) will.
 **/
template<class C>
inline bool Equal(const C& c1, const C& c2, CoordType epsilon = numeric_constants<CoordType>::epsilon())
	{return c1.isEqualTo(c2, epsilon);}

bool Equal(double x1, double x2, double epsilon = numeric_constants<double>::epsilon());
// Avoid template and expensive casts from float to doubles.
bool Equal(float x1, float x2, float epsilon = numeric_constants<float>::epsilon());

// These let us avoid including <algorithm> for the sake of
// std::max() and std::min().

inline CoordType FloatMax(CoordType a, CoordType b)
	{return (a > b) ? a : b;}
inline CoordType FloatMin(CoordType a, CoordType b)
	{return (a < b) ? a : b;}
inline CoordType FloatClamp(CoordType val, CoordType min, CoordType max)
	{return (min >= val) ? min : (max <= val ? max : val);}

inline double DoubleMax(double a, double b)
	{return (a > b) ? a : b;}
inline double DoubleMin(double a, double b)
	{return (a < b) ? a : b;}
inline double DoubleClamp(double val, double min, double max)
	{return (min >= val) ? min : (max <= val ? max : val);}

} // namespace WFMath

#endif // WFMATH_CONST_H