/usr/share/doc/libbobcat3-dev/man/ranger.3.html is in libbobcat-dev 3.19.01-1ubuntu1.
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 197 198 199 200 | <html><head>
<title>FBB::Ranger</title>
<link rev="made" href="mailto:Frank B. Brokken: f.b.brokken@rug.nl">
</head>
<body text="#27408B" bgcolor="#FFFAF0">
<hr>
<h1>FBB::Ranger</h1>
<h2>libbobcat-dev_3.19.01-x.tar.gz</h2>
<h2>2005-2013</h2>
<html><head>
<link rev="made" href="mailto:Frank B. Brokken: f.b.brokken@rug.nl">
</head>
<body text="#27408B" bgcolor="#FFFAF0">
<hr>
<h1></h1>
<html><head>
<title>FBB::Ranger(3bobcat)</title>
<link rev="made" href="mailto:Frank B. Brokken: f.b.brokken@rug.nl">
</head>
<body text="#27408B" bgcolor="#FFFAF0">
<hr>
<h1>FBB::Ranger(3bobcat)</h1>
<h2>libbobcat-dev_3.19.01-x.tar.gz Error handler</h2>
<h2>2005-2013</h2>
<p>
<h2>NAME</h2>FBB::Ranger - generalizes ranges for range-based for-loops
<p>
<h2>SYNOPSIS</h2>
<strong>#include <bobcat/ranger></strong><br>
<p>
<h2>DESCRIPTION</h2>
<p>
The <em>Ranger</em> class template defines ranges that can be used with range-based
for-loops. The standard range-based for-loop requires for its
range-specificiation an array or an iterator range as offered by, e.g.,
containers (through their <em>begin</em> and <em>end</em> members. Ranges defined by a
pair of pointers or by a subrange defined by iterator expressions cannot
currently be used in combination with range-based for-loops.
<p>
<em>Ranger</em> extends the applicability of range-based for-loops by turning pairs
of pointers, an initial pointer and a pointer count, or a pair of iterators
into a range that can be used by range-based for-loops.
<p>
<em>Ranger</em> is a class template requiring one template type parameter:
<em>Iterator</em>, an iterator or pointer type reaching the data when dereferenced.
<p>
<em>Ranger</em>'s users don't have to specify <em>Ranger</em>'s template type. The
function template <em>ranger</em> returns the appropriate <em>Ranger</em> object.
<p>
<h2>NAMESPACE</h2>
<strong>FBB</strong><br>
All constructors, members, operators and manipulators, mentioned in this
man-page, are defined in the namespace <strong>FBB</strong>.
<p>
<h2>FREE FUNCTION</h2>
When using the following free functions, any (subrange) of iterators or
pointers can be used. With iterators subranges of <em>reverse iterators</em> can
also be specified. The <strong>EXAMPLE</strong> section below illustrates the use of the
<em>ranger</em> function templates.
<ul>
<li> <strong>Ranger<Iterator> ranger(Iterator &&begin, Iterator &&end)</strong>:<br>
this function template returns a <em>Ranger</em> object for the (sub)range
defined by two (reverse) iterators;
<li> <strong>Ranger<Iterator> ranger(Iterator &&begin, size_t count)</strong>:<br>
this function template returns a <em>Ranger</em> object for the (sub)range
defined by the (reverse) iterator range <em>begin</em> and <em>begin +
count</em>;
<li> <strong>Ranger<Data *> ranger(Data *begin, Data *end)</strong>:<br>
this function template returns a <em>Ranger</em> object for the (sub)range
defined by the two pointers <em>begin</em> and <em>end</em>;
<li> <strong>Ranger<Data *> ranger(Data *begin, size_t count)</strong>:<br>
this function template returns a <em>Ranger</em> object for the (sub)range
defined by the two pointers <em>begin</em> and <em>begin + count</em>.
</ul>
<p>
<h2>CONSTRUCTORS</h2>
Below, <em>Iterator</em> refers to the <em>Ranger</em> class template's type
parameter. Although named 'Iterator' it can also be a pointer to some data
type (e.g., <em>std::string *</em>).
<ul>
<li> <strong>Ranger(Iterator const &begin, Iterator const &end)</strong>:<br>
A <em>Ranger</em> object can be passed as range-specifier in a range-based
for-loop. All elements defined by the range will subsequently be visited by
the range-based for-loop.
</ul>
The copy and move constructors are available.
<p>
<h2>OVERLOADED OPERATORS</h2>
The copy and move assignment operators are available.
<p>
<h2>MEMBER FUNCTIONS</h2>
<ul>
<li> <strong>Iterator const &begin() const</strong>:<br>
returns (a copy of) the <em>begin</em> iterator passed to the <em>Ranger</em>'s
constructor. Note that if <em>Iterator</em> was a pointer type (like <em>int *</em>) the
data to which the iterator returned by <em>begin()</em> can actually be modified,
as the member's return type (using <em>int *</em> for <em>Iterator</em>) becomes <em>int
* const &</em>, so a reference to a constant pointer to an <em>int</em>. This is
perfectly OK: if the data themselves should be immutable, then the data type
must be defined as <em>int const</em>, which is automatically the case when passing
<em>int const *</em> data. See the <strong>EXAMPLE</strong> section for an illustration.
<li> <strong>Iterator const &end() const</strong>:<br>
returns (a copy of) the <em>end</em> iterator passed to the <em>Ranger</em>'s
constructor.
</ul>
If reverse iterators are passed to <em>Ranger</em>'s constructor, then
the <em>begin</em> and <em>end</em> members return <em>reverse iterators</em>. Since
the intended use of <em>Ranger</em> objects is to define a range for range-base
for-loops, members like <em>rbegin</em> and <em>rend</em> can be omitted from
<em>Ranger</em>.
<p>
<h2>EXAMPLE</h2>
<pre>
#include <vector>
#include <iostream>
#include <bobcat/ranger>
using namespace std;
using namespace FBB;
int main()
{
vector<int> iv {1, 2, 3, 4, 5};
// display and modify a subrange
for(auto &el: ranger(iv.rbegin() + 1, iv.rend() - 1))
cout << el++ << ' ';
cout << '\n';
// display a reversed range
for(auto &el: ranger(iv.rbegin() + 1, iv.rend() - 1))
cout << el << ' ';
cout << '\n';
// same: display using a count
for(auto &el: ranger(iv.rbegin() + 1, 3))
cout << el << ' ';
cout << '\n';
int intArray[] = {1, 2, 3, 4, 5};
// display and modify elements
// in a pointer-based range
for(auto &el: ranger(intArray + 1, intArray + 3))
cout << el++ << ' ';
cout << '\n';
// data now modified
for(auto &el: ranger(intArray + 1, intArray + 3))
cout << el << ' ';
cout << '\n';
// using a count rather than an
// end-pointer
for(auto &el: ranger(intArray + 1, 3))
cout << el << ' ';
cout << '\n';
int const constInts[] = {1, 2, 3, 4, 5};
// data can't be modified
for(auto &el: ranger(constInts + 1, constInts + 3))
cout << el << ' ';
cout << '\n';
}
</pre>
<p>
<h2>FILES</h2>
<em>bobcat/ranger</em> - defines the class interface
<p>
<h2>SEE ALSO</h2>
<strong>bobcat</strong>(7)
<p>
<h2>BUGS</h2>
None Reported.
<p>
<h2>DISTRIBUTION FILES</h2>
<ul>
<li> <em>bobcat_3.19.01-x.dsc</em>: detached signature;
<li> <em>bobcat_3.19.01-x.tar.gz</em>: source archive;
<li> <em>bobcat_3.19.01-x_i386.changes</em>: change log;
<li> <em>libbobcat1_3.19.01-x_*.deb</em>: debian package holding the
libraries;
<li> <em>libbobcat1-dev_3.19.01-x_*.deb</em>: debian package holding the
libraries, headers and manual pages;
<li> <em>http://sourceforge.net/projects/bobcat</em>: public archive location;
</ul>
<p>
<h2>BOBCAT</h2>
Bobcat is an acronym of `Brokken's Own Base Classes And Templates'.
<p>
<h2>COPYRIGHT</h2>
This is free software, distributed under the terms of the
GNU General Public License (GPL).
<p>
<h2>AUTHOR</h2>
Frank B. Brokken (<strong>f.b.brokken@rug.nl</strong>).
<p>
|