This file is indexed.

/usr/include/ncl/nxsdistancesblock.h is in libncl-dev 2.1.18+dfsg-2build1.

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
//	Copyright (C) 1999-2003 Paul O. Lewis
//
//	This file is part of NCL (Nexus Class Library) version 2.0.
//
//	NCL 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.
//
//	NCL 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 NCL; if not, write to the Free Software Foundation, Inc.,
//	59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
//

#ifndef NCL_NXSDISTANCESBLOCK_H
#define NCL_NXSDISTANCESBLOCK_H

#include "ncl/nxsdefs.h"
#include "ncl/nxstaxablock.h"
#include "ncl/nxsdistancedatum.h"

/*!
	This class handles reading and storage for the NEXUS block DISTANCES. It overrides the member functions Read and
	Reset, which are abstract virtual functions in the base class NxsBlock. Below is a table showing the correspondence
	between the elements of a DISTANCES block and the variables and member functions that can be used to access each
	piece of information stored.
>
	NEXUS command   Command attribute  Data Members        Member Functions
	------------------------------------------------------------------------
	DIMENSIONS      NEWTAXA            newtaxa

	                NTAX               ntax                GetNtax

	                NCHAR              nchar               GetNchar

	FORMAT          TRIANGLE           triangle            GetTriangle
	                                                       IsUpperTriangular
	                                                       IsLowerTriangular
	                                                       IsRectangular

	                [NO]DIAGONAL       diagonal            IsDiagonal

	                [NO]LABELS         labels              IsLabels

	                MISSING            missing             GetMissingSymbol

	                INTERLEAVE         interleave          IsInterleave

	                TAXLABELS          (stored in the      (access through
					                   NxsTaxaBlockAPI        data member taxa)
									   object)

	MATRIX                             matrix              GetDistance
	                                                       IsMissing
	                                                       SetMissing
	                                                       SetDistance
	------------------------------------------------------------------------
>
*/
class NxsDistancesBlock
  : public NxsBlock, public NxsTaxaBlockSurrogate
	{
	public:
							NxsDistancesBlock(NxsTaxaBlockAPI *t);
		virtual				~NxsDistancesBlock();

		double				GetDistance(unsigned i, unsigned j) const;
		char				GetMissingSymbol() NCL_COULD_BE_CONST ; /*v2.1to2.2 1 */
		unsigned			GetNchar() NCL_COULD_BE_CONST ; /*v2.1to2.2 1 */
		unsigned			GetTriangle() NCL_COULD_BE_CONST ; /*v2.1to2.2 1 */
		bool				IsRectangular() NCL_COULD_BE_CONST ; /*v2.1to2.2 1 */
		bool				IsBoth() NCL_COULD_BE_CONST ; /*v2.1to2.2 1 */
		bool				IsDiagonal() NCL_COULD_BE_CONST ; /*v2.1to2.2 1 */
		bool				IsInterleave() NCL_COULD_BE_CONST ; /*v2.1to2.2 1 */
		bool				IsLabels() NCL_COULD_BE_CONST ; /*v2.1to2.2 1 */
		bool				IsLowerTriangular() NCL_COULD_BE_CONST ;  /*v2.1to2.2 1 */
		bool				IsMissing(unsigned i, unsigned j) const;
		bool				IsUpperTriangular() NCL_COULD_BE_CONST ;  /*v2.1to2.2 1 */
		virtual void		Report(std::ostream &out) NCL_COULD_BE_CONST ;  /*v2.1to2.2 1 */
		virtual void		Reset();
		void				SetDistance(unsigned i, unsigned j, double d);
		void				SetMissing(unsigned i, unsigned j);
		void				SetNchar(unsigned i);
		void				SetNexus(NxsReader *nxsptr)
			{
			NxsBlock::SetNexus(nxsptr);
			NxsTaxaBlockSurrogate::SetNexusReader(nxsptr);
			}
			/*! \ref BlockTypeIDDiscussion */
        virtual const std::string & GetBlockName() const
            {
            return NCL_BLOCKTYPE_ATTR_NAME;
            }

		enum NxsDistancesBlockEnum		/* used by data member triangle to determine which triangle(s) of the distance matrix is/are occupied */
			{
			upper			= 1,		/* matrix is upper-triangular */
			lower			= 2,		/* matrix is lower-triangular */
			both			= 3			/* matrix is rectangular */
			};

		virtual VecBlockPtr		GetImpliedBlocks()
			{
			return GetCreatedTaxaBlocks();
			}

		/*only used it the linkAPI is enabled*/
		virtual void		HandleLinkCommand(NxsToken & token)
			{
			HandleLinkTaxaCommand(token);
			}
		virtual void		WriteLinkCommand(std::ostream &out) const
			{
			WriteLinkTaxaCommand(out);
			}
		void				WriteAsNexus(std::ostream &out) const;


		NxsDistancesBlock &operator=(const NxsDistancesBlock &other)
			{
			Reset();
			CopyBaseBlockContents(static_cast<const NxsBlock &>(other));
			CopyTaxaBlockSurrogateContents(other);
			CopyDistancesContents(other);
			return *this;
			}

		void CopyDistancesContents(const NxsDistancesBlock &other);
		NxsDistancesBlock * Clone() const
			{
			NxsDistancesBlock *d = new NxsDistancesBlock(taxa);
			*d = *this;
			return d;
			}
		bool 		SwapEquivalentTaxaBlock(NxsTaxaBlockAPI * tb)
		{
			return SurrogateSwapEquivalentTaxaBlock(tb);
		}

	protected:
		void				WriteFormatCommand(std::ostream &out) const;
		void				WriteMatrixCommand(std::ostream &out) const;

		void				HandleDimensionsCommand(NxsToken &token);
		void				HandleFormatCommand(NxsToken &token);
		void				HandleMatrixCommand(NxsToken &token);
		bool				HandleNextPass(NxsToken &token, unsigned &offset, std::vector<unsigned> & fileMatrixCmdOrderToTaxInd, std::set<unsigned> & taxIndsRead);
		virtual void		Read(NxsToken &token);

	private:
		NxsDistanceDatum & GetCell(unsigned i, unsigned j)
			{
			return matrix.at(i).at(j);
			}
		const NxsDistanceDatum & GetCell(unsigned i, unsigned j) const
			{
			return matrix.at(i).at(j);
			}
		typedef std::vector<NxsDistanceDatum> NxsDistanceDatumRow;
		typedef std::vector<NxsDistanceDatumRow> NxsDistanceDatumMatrix;

		unsigned			expectedNtax;		/* number of taxa (determines dimensions of the matrix) */
		unsigned			nchar;		/* the number of characters used in generating the pairwise distances */

		bool				diagonal;	/* true if diagonal elements provided when reading in DISTANCES block */
		bool				interleave;	/* true if interleave format used when reading in DISTANCES block */
		bool				labels;		/* true if taxon labels were provided when reading in DISTANCES block */

		int					triangle;	/* indicates whether matrix is upper triangular, lower triangular, or rectangular, taking on one of the elements of the NxsDistancesBlockEnum enumeration */

		char				missing;	/* the symbol used to represent missing data (e.g. '?') */

		NxsDistanceDatumMatrix	matrix;	/* the structure used for storing the pairwise distance matrix */
		friend class PublicNexusReader;
	};

typedef NxsDistancesBlock	DistancesBlock;

class NxsDistancesBlockFactory
	:public NxsBlockFactory
	{
	public:
		virtual NxsDistancesBlock  *	GetBlockReaderForID(const std::string & NCL_BLOCKTYPE_ATTR_NAME, NxsReader *reader, NxsToken *token);
	};

inline bool NxsDistancesBlock::IsBoth() NCL_COULD_BE_CONST /*v2.1to2.2 1 */
	{
	return this->IsRectangular();
	}

#endif