This file is indexed.

/usr/include/stxxl/bits/containers/pager.h is in libstxxl-dev 1.4.1-2.

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
/***************************************************************************
 *  include/stxxl/bits/containers/pager.h
 *
 *  Part of the STXXL. See http://stxxl.sourceforge.net
 *
 *  Copyright (C) 2002, 2003, 2006 Roman Dementiev <dementiev@ira.uka.de>
 *  Copyright (C) 2011 Andreas Beckmann <beckmann@cs.uni-frankfurt.de>
 *
 *  Distributed under the Boost Software License, Version 1.0.
 *  (See accompanying file LICENSE_1_0.txt or copy at
 *  http://www.boost.org/LICENSE_1_0.txt)
 **************************************************************************/

#ifndef STXXL_CONTAINERS_PAGER_HEADER
#define STXXL_CONTAINERS_PAGER_HEADER

#include <list>
#include <cassert>

#include <stxxl/bits/noncopyable.h>
#include <stxxl/bits/common/rand.h>
#include <stxxl/bits/common/simple_vector.h>

STXXL_BEGIN_NAMESPACE

//! \addtogroup stlcont_vector
//! \{

enum pager_type
{
    random,
    lru
};

//! Pager with \b random replacement strategy
template <unsigned npages_>
class random_pager
{
    enum { n_pages = npages_ };

    typedef unsigned_type size_type;

    size_type num_pages;
    random_number<random_uniform_fast> rnd;

public:
    random_pager(size_type num_pages = n_pages) : num_pages(num_pages) { }
    size_type kick()
    {
        return rnd(size());
    }

    void hit(size_type ipage)
    {
        STXXL_ASSERT(ipage < size());
    }

    size_type size() const
    {
        return num_pages;
    }
};

//! Pager with \b LRU replacement strategy
template <unsigned npages_ = 0>
class lru_pager : private noncopyable
{
    enum { n_pages = npages_ };

    typedef unsigned_type size_type;
    typedef std::list<size_type> list_type;

    list_type history;
    simple_vector<list_type::iterator> history_entry;

public:
    lru_pager(size_type num_pages = n_pages) : history_entry(num_pages)
    {
        for (size_type i = 0; i < size(); ++i)
            history_entry[i] = history.insert(history.end(), i);
    }

    size_type kick()
    {
        return history.back();
    }

    void hit(size_type ipage)
    {
        assert(ipage < size());
        history.splice(history.begin(), history, history_entry[ipage]);
    }

    void swap(lru_pager& obj)
    {
        history.swap(obj.history);
        history_entry.swap(obj.history_entry);
    }

    size_type size() const
    {
        return history_entry.size();
    }
};

//! \}

STXXL_END_NAMESPACE

namespace std {

template <unsigned npages_>
void swap(stxxl::lru_pager<npages_>& a,
          stxxl::lru_pager<npages_>& b)
{
    a.swap(b);
}

} // namespace std

#endif // !STXXL_CONTAINERS_PAGER_HEADER
// vim: et:ts=4:sw=4