This file is indexed.

/usr/include/givaro/givrns.h is in libgivaro-dev 4.0.2-5.

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
// ==========================================================================
// $Source: /var/lib/cvs/Givaro/src/kernel/zpz/givrns.h,v $
// Copyright(c)'1994-2009 by The Givaro group
// This file is part of Givaro.
// Givaro is governed by the CeCILL-B license under French law
// and abiding by the rules of distribution of free software.
// see the COPYRIGHT file for more details.
// Authors: T. Gautier
// $Id: givrns.h,v 1.5 2011-02-02 16:23:56 briceboyer Exp $
// ==========================================================================

/*! @file givrns.h
 * @ingroup zpz
 * @brief  Modular arithmetic for GIVARO.
 * Here is defined arithmetic functions
 * on rns representation and interface between RNS and Integer,
 *  all is done via the Chinese Remainder Algorithm.
 */

#ifndef __GIVARO_arithmodu_H
#define __GIVARO_arithmodu_H

#include "givaro/givconfig.h"
#include "givaro/giverror.h"
#include "givaro/givarray0.h"

namespace Givaro {

	/*! @brief class RNSsystem.
	 * Structure which manages list of domains in order to convert integer
	 * to/from RNS number system using a mixed radix form.  This class is
	 * parameterized by the type of \c RING and of \c Domain.
	 * The ring should have:
	 * - Ring( Modulo ) and Domain.init(Ring) conversions
	 * - operator *= (Ring&, const Modulo&)
	 * - operator += (Ring&, const Modulo&)
	 * .
	 */
	template<class RING, class Domain>
	class RNSsystem  {
		typedef RNSsystem<RING, Domain> Self_t;
	public:
		typedef RING   ring;
		typedef typename Domain::Element modulo;

		typedef Array0<modulo> array;
		typedef Array0<Domain> domains;

		// Default Cstor, Dstor/Cstor of recopy:
		RNSsystem() ;
		~RNSsystem() ;
		RNSsystem(const Self_t& R);

		// -- Cstor with given primes
		RNSsystem( const domains& primes );

		// -- Computation of a mixed-radix representation of the residus.
		void RnsToMixedRadix(array&  mixrad, const array&  residu) ;

		// -- Convert a mixed radix representation to an Integer
		RING& MixedRadixToRing( RING& res,  const array& mixrad ) const;

		// -- Convert a Ring Element to a its RNS representation
		// with the "this" rns system.
		void RingToRns( array& rns, const RING& a ) const;

		// -- Convert a RNS representation to a RING Element
		RING& RnsToRing( RING& a, const array& rns ) ;

		// ------------- Access methods

		// -- Returns the number of primes of this ctxt
		size_t size() const { return _primes.size(); }

		// -- Returns a array to the begin of the array of primes
		const domains& Primes() const;
		// -- Returns the ith primes of the rns system
		const Domain ith(const size_t i) const;

		//! -- Returns an array of the reciprocal \f$ck = \left(\prod_{j=0..k-1}p_j\right)^{-1} \mod pk\f$
		const array& Reciprocals() const;
		const modulo reciprocal(const size_t i) const;

		// -- Cstor with given primes
		void setPrimes( const domains& primes );
	protected:
		// -------------- Compute some fields of the structure :
		void ComputeCk();

		domains  _primes; 	// - array of the primes
		array  _ck;     	// - reciprocals, _ck[0] = 1, same size as _primes
	};

} // namespace Givaro

#include "givaro/givrnscstor.inl"
#include "givaro/givrnsconvert.inl"

#endif // __GIVARO_arithmodu_H

// vim:sts=8:sw=8:ts=8:noet:sr:cino=>s,f0,{0,g0,(0,\:0,t0,+0,=s:syntax=cpp.doxygen