This file is indexed.

/usr/include/ept/popcon/popcon.h is in libept-dev 1.0.6~exp1ubuntu1.

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
// -*- mode: c++; tab-width: 4; indent-tabs-mode: t -*-
#ifndef EPT_POPCON_POPCON_H
#define EPT_POPCON_POPCON_H

/** @file
 * @author Enrico Zini <enrico@enricozini.org>
 * Access popcon data
 */

/*
 * Copyright (C) 2007  Enrico Zini <enrico@debian.org>
 *
 * 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., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
 */

#include <tagcoll/diskindex/mmap.h>
#include <string>

namespace ept {
namespace apt {
class Apt;
}

namespace popcon {

/**
 * Store the score information in the popcon cache.
 *
 * Currently, this is only one float; more can be added in the future.
 */
class Score
{
protected:
	unsigned offset;

public:
	float score;

	Score(float score) : offset(offset), score(score) {}

	friend class Popcon;
	friend class PopconIndexer;
	friend class PopconGenerator;
};

/**
 * Maps Packages to IDs and vice-versa.
 *
 * This is used in building the Debtags fast index, which works representing
 * tags and packages as int IDs.
 *
 * Index building works like this:
 *  1. The file all-popcon-results.txt.gz is downloaded from
 *     http://popcon.debian.org/all-popcon-results.txt.gz
 *  2. The file is put in either ~/.popcon/all-popcon-results.txt.gz
 *     or in /var/lib/popcon/all-popcon-results.txt.gz
 *  3. If the file is newer than the index, it will be automatically used to
 *     recompute the scores and rebuild the index.
 */
class Popcon : public tagcoll::diskindex::MMap
{
	struct GeneralInfo : public tagcoll::diskindex::MMap
	{
		size_t submissions() const;
	};

	tagcoll::diskindex::MasterMMap mastermmap;
	time_t m_timestamp;

	GeneralInfo m_info;

	/// Get the score structure by index
	const Score* structByIndex(size_t idx) const
	{
		if (idx >= 0 && idx < size())
			return (Score*)m_buf + idx;
		return 0;
	}

public:
	Popcon();

	/// Get the timestamp of when the index was last updated
	time_t timestamp() const { return m_timestamp; }

	/// Return true if this data source has data, false if it's empty
	bool hasData() const { return m_timestamp != 0; }

	/// Return the total number of popcon submissions
	size_t submissions() const { return m_info.submissions(); }

	/// Get the number of packages in the index
	size_t size() const
	{
		if (m_buf)
			return ((Score*)m_buf)->offset / sizeof(Score);
		else
			return 0;
	}

	/**
	 * Get a package name by index
	 *
	 * If the index is not valid, returns the empty string.
	 */
	std::string name(size_t idx) const
	{
		const Score* s = structByIndex(idx);
		if (s == 0) return std::string();
		return std::string(m_buf + s->offset);
	}

	/// Get the score by index
	float scoreByIndex(size_t idx) const
	{
		const Score* s = structByIndex(idx);
		if (!s) return 0;
		return s->score;
	}

	/// Get the score structure by package name
	float scoreByName(const std::string& name) const;

	/// Get the score by index
	float score(size_t idx) const { return scoreByIndex(idx); }

	/// Get the score by index
	float operator[](int idx) const { return scoreByIndex(idx); }

	/// Get the score by name
	float score(const std::string& name) const { return scoreByName(name); }

	/// Get the score structure by package name
	float operator[](const std::string& name) const { return scoreByName(name); }
};

}
}

// vim:set ts=4 sw=4:
#endif