/usr/include/libqhullcpp/QhullRidge.h is in libqhull-dev 2015.2-1.
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 | /****************************************************************************
**
** Copyright (c) 2008-2015 C.B. Barber. All rights reserved.
** $Id: //main/2015/qhull/src/libqhullcpp/QhullRidge.h#3 $$Change: 2066 $
** $DateTime: 2016/01/18 19:29:17 $$Author: bbarber $
**
****************************************************************************/
#ifndef QHULLRIDGE_H
#define QHULLRIDGE_H
extern "C" {
#include "libqhull_r/qhull_ra.h"
}
#include "libqhullcpp/QhullSet.h"
#include "libqhullcpp/QhullVertex.h"
#include "libqhullcpp/QhullVertexSet.h"
#include "libqhullcpp/QhullFacet.h"
#include <ostream>
namespace orgQhull {
#//!\name Used here
class Qhull;
class QhullVertex;
class QhullVertexSet;
class QhullFacet;
#//!\name Defined here
//! QhullRidge -- Qhull's ridge structure, ridgeT [libqhull.h], as a C++ class
class QhullRidge;
typedef QhullSet<QhullRidge> QhullRidgeSet;
typedef QhullSetIterator<QhullRidge> QhullRidgeSetIterator;
// see QhullSets.h for QhullRidgeSet and QhullRidgeSetIterator -- avoids circular references
/************************
a ridge is hull_dim-1 simplex between two neighboring facets. If the
facets are non-simplicial, there may be more than one ridge between
two facets. E.G. a 4-d hypercube has two triangles between each pair
of neighboring facets.
topological information:
vertices a set of vertices
top,bottom neighboring facets with orientation
geometric information:
tested True if ridge is clearly convex
nonconvex True if ridge is non-convex
*/
class QhullRidge {
#//!\name Defined here
public:
typedef ridgeT * base_type; // for QhullRidgeSet
#//!\name Fields
private:
ridgeT * qh_ridge; //!< Corresponding ridgeT, never 0
QhullQh * qh_qh; //!< QhullQh/qhT for ridgeT, may be 0
#//!\name Class objects
static ridgeT s_empty_ridge;
public:
#//!\name Constants
#//!\name Constructors
QhullRidge() : qh_ridge(&s_empty_ridge), qh_qh(0) {}
explicit QhullRidge(const Qhull &q);
QhullRidge(const Qhull &q, ridgeT *r);
explicit QhullRidge(QhullQh *qqh) : qh_ridge(&s_empty_ridge), qh_qh(qqh) {}
QhullRidge(QhullQh *qqh, ridgeT *r) : qh_ridge(r ? r : &s_empty_ridge), qh_qh(qqh) {}
// Creates an alias. Does not copy QhullRidge. Needed for return by value and parameter passing
QhullRidge(const QhullRidge &other) : qh_ridge(other.qh_ridge), qh_qh(other.qh_qh) {}
// Creates an alias. Does not copy QhullRidge. Needed for vector<QhullRidge>
QhullRidge & operator=(const QhullRidge &other) { qh_ridge= other.qh_ridge; qh_qh= other.qh_qh; return *this; }
~QhullRidge() {}
#//!\name GetSet
QhullFacet bottomFacet() const { return QhullFacet(qh_qh, qh_ridge->bottom); }
int dimension() const { return ((qh_qh && qh_qh->hull_dim) ? qh_qh->hull_dim-1 : 0); }
ridgeT * getBaseT() const { return getRidgeT(); } //!< For QhullSet<QhullRidge>
ridgeT * getRidgeT() const { return qh_ridge; }
countT id() const { return qh_ridge->id; }
bool isValid() const { return (qh_qh && qh_ridge != &s_empty_ridge); }
bool operator==(const QhullRidge &other) const { return qh_ridge==other.qh_ridge; }
bool operator!=(const QhullRidge &other) const { return !operator==(other); }
QhullFacet otherFacet(const QhullFacet &f) const { return QhullFacet(qh_qh, (qh_ridge->top==f.getFacetT() ? qh_ridge->bottom : qh_ridge->top)); }
QhullFacet topFacet() const { return QhullFacet(qh_qh, qh_ridge->top); }
#//!\name foreach
bool hasNextRidge3d(const QhullFacet &f) const;
QhullRidge nextRidge3d(const QhullFacet &f) const { return nextRidge3d(f, 0); }
QhullRidge nextRidge3d(const QhullFacet &f, QhullVertex *nextVertex) const;
QhullVertexSet vertices() const { return QhullVertexSet(qh_qh, qh_ridge->vertices); }
#//!\name IO
struct PrintRidge{
const QhullRidge *ridge;
const char * print_message; //!< non-null message
PrintRidge(const char *message, const QhullRidge &r) : ridge(&r), print_message(message) {}
};//PrintRidge
PrintRidge print(const char* message) const { return PrintRidge(message, *this); }
};//class QhullRidge
}//namespace orgQhull
std::ostream &operator<<(std::ostream &os, const orgQhull::QhullRidge &r);
std::ostream &operator<<(std::ostream &os, const orgQhull::QhullRidge::PrintRidge &pr);
#endif // QHULLRIDGE_H
|