forked from boostorg/iterator
Compare commits
439 Commits
svn-branch
...
master
Author | SHA1 | Date | |
---|---|---|---|
ae5d7d8c0c | |||
d72d57fa39 | |||
c98f965388 | |||
d09f78ae9b | |||
a9dabd3c65 | |||
80bb1ac9e4 | |||
d11499c08c | |||
6d02c36718 | |||
85b542e1b6 | |||
e8fbd92a61 | |||
7c9b4296a1 | |||
0a95636faf | |||
5777e9944b | |||
853ba3d3c7 | |||
f82627f2cc | |||
ed1d96f251 | |||
ce52aee3ce | |||
17355c5ad0 | |||
9504b3bced | |||
2cc45f1694 | |||
a3269e536f | |||
129245a985 | |||
1a80896934 | |||
ee2d3a6596 | |||
cd24487161 | |||
dd37a27067 | |||
7b6edb6a7d | |||
c924b42749 | |||
85d935bf68 | |||
d175ba2450 | |||
75ba1a50c9 | |||
e4ab917f79 | |||
c901bd6d7a | |||
eb0d01126a | |||
abe6fbfd4b | |||
7a200905dd | |||
acf35d2a87 | |||
5ebbe941be | |||
72308ef787 | |||
9124869bcc | |||
216b442d23 | |||
c858138495 | |||
1c6f85d4f9 | |||
0a59f555ca | |||
18337e990b | |||
1447c566d1 | |||
fc281fa58a | |||
b76c273946 | |||
f396a8fef0 | |||
5a6013e21f | |||
6dfb175cef | |||
72a7fb1b73 | |||
f4b47fd266 | |||
2c0145bff0 | |||
987151dde6 | |||
8e457e716b | |||
32f4f4d086 | |||
72f0ebe8d0 | |||
d7ad43a925 | |||
733c0fb9cb | |||
5b18ae976e | |||
da8604615e | |||
8fc94469da | |||
b86c817481 | |||
9649d42392 | |||
0c5f0b822a | |||
dc7bf5cc05 | |||
80ec58bb3b | |||
c2929ea6c6 | |||
4fe679bb0d | |||
fdcd8439c0 | |||
3a8728a595 | |||
897ff65fdc | |||
bfe2a004d2 | |||
d528fc0b11 | |||
540f999d0b | |||
54dee0db96 | |||
814965402e | |||
2af5a16539 | |||
171c716d03 | |||
398fe907d0 | |||
e31ae13df5 | |||
02e74bf26a | |||
20b5a9c11a | |||
73918b8616 | |||
bb1efd3370 | |||
3cc4107d01 | |||
6ab148be01 | |||
06875a754d | |||
b844c8df53 | |||
194087e8ca | |||
b5edc8b64f | |||
44cee00831 | |||
b2adecb951 | |||
e16f2de233 | |||
218dc4baf1 | |||
0013c5c4f0 | |||
386dbf1054 | |||
486721bbfe | |||
5ad48c4d14 | |||
adecfd94f3 | |||
affe7e6d84 | |||
91b392a478 | |||
84227ea6ba | |||
67ac957273 | |||
f86cd29f52 | |||
fff85e7db9 | |||
d6c6f0ce16 | |||
81faa161cf | |||
7e5a32b3ea | |||
1b388c2496 | |||
30b93d7428 | |||
28b8cc8c9c | |||
992a314211 | |||
422ad12716 | |||
b2585dda6a | |||
8b5e92a0c4 | |||
a36ed0f35d | |||
0a08203107 | |||
38ef552209 | |||
a85dfaa7f2 | |||
2af60e066d | |||
7442334ce1 | |||
8577675c85 | |||
685b3fe855 | |||
a653a39cf4 | |||
c338572735 | |||
07afd26ca2 | |||
d058933767 | |||
e2f81e9b48 | |||
379200dfd1 | |||
a26314dfb9 | |||
e61592c553 | |||
a3751006db | |||
40da532a4d | |||
7ce9f87954 | |||
553b9713ac | |||
ba32745e80 | |||
282b28e51f | |||
479898d9d5 | |||
c1a375284d | |||
24d2f58f98 | |||
25a91d5981 | |||
9b78dc1006 | |||
89ca2fd1ae | |||
79277b78d2 | |||
eb90ad7a99 | |||
de07014e9a | |||
25dc5c6c9c | |||
048c3dfa72 | |||
f7dfc36a9c | |||
c529399fb1 | |||
6faa3a942b | |||
0c6b09ef6a | |||
83220e7aea | |||
991ea534ee | |||
210633c08c | |||
3275ee3c82 | |||
a72deda3ac | |||
2b6b6bf8ad | |||
0107df44ab | |||
011288c2c8 | |||
eaf1a48583 | |||
52fbe950ec | |||
6a672cecbd | |||
577203bee8 | |||
5f6ac9c020 | |||
a48de6a8b8 | |||
5f6fd2dec6 | |||
e3577e7687 | |||
5ba36b063e | |||
bab02bb82e | |||
d251a6f515 | |||
9d054b25ce | |||
d1b22ac8e8 | |||
abe77db3e0 | |||
398819237e | |||
a4bacb5077 | |||
5ba5f2c2d4 | |||
6c1b356be1 | |||
bfcf52ace6 | |||
e2c927628c | |||
ed027c2cce | |||
4791425000 | |||
b7e7e83a11 | |||
c148962bd9 | |||
5bfbfb7716 | |||
af5f6e49e0 | |||
26ee5ba754 | |||
67a2336cf4 | |||
029277f3ed | |||
847b2a1be3 | |||
18268069d9 | |||
bb54ee7900 | |||
d5b67c7fab | |||
663a30f659 | |||
177f719d15 | |||
cccbd8c6aa | |||
d6cfed4b20 | |||
514ac53326 | |||
ca3b7505ce | |||
d7c8cccd64 | |||
7b627fa679 | |||
760da84f9c | |||
89d3ec7662 | |||
c86db2ec8a | |||
0a18cfb255 | |||
11e3715f37 | |||
f2d07f76b5 | |||
53e8ac401f | |||
434818cce7 | |||
c09c8ca2b2 | |||
22dd100dfd | |||
2f72016049 | |||
5b26a8b3fc | |||
711a0232f8 | |||
443dfb9901 | |||
c734f3bfa3 | |||
b2b9ab1568 | |||
8b23342969 | |||
922296f8c8 | |||
c9a91a1fba | |||
80e6f4a3bf | |||
398bbe63bb | |||
87d82527b1 | |||
b9448b5fae | |||
76519ea4a7 | |||
878812c42f | |||
2283f084d9 | |||
a0533d97f5 | |||
ece225bbda | |||
b62dc6ba9d | |||
20dc7b1abe | |||
0dbbb61bec | |||
2de2111db2 | |||
db04fafe21 | |||
4e0fc90b60 | |||
53cbba6c09 | |||
8be623d733 | |||
d12d60fa12 | |||
ec7d398578 | |||
3d3560c12d | |||
46f9e1753f | |||
2511f21d62 | |||
adee905c51 | |||
82779f78ec | |||
a569c97969 | |||
aad821d28d | |||
23934d7c0d | |||
1073b7f7bc | |||
f158dba6ad | |||
8fe632d6b1 | |||
810b58cfb0 | |||
156c13a494 | |||
785680d929 | |||
269de2691a | |||
11f7d1bc18 | |||
4a403cd3eb | |||
dc96d371fa | |||
e000b676cc | |||
045a05f81f | |||
25139e1311 | |||
aad767ed3f | |||
7fa65a4278 | |||
fd94cc7d78 | |||
36988fcf98 | |||
4283d20261 | |||
91f782ec52 | |||
9841d87212 | |||
782313db8c | |||
c040d4c38b | |||
1ddaca8297 | |||
acf9b4d4cf | |||
e88b3f475c | |||
01cffbed98 | |||
187bc896f6 | |||
6883d083d2 | |||
0345db959b | |||
d814423414 | |||
eb288b2908 | |||
0e23f15623 | |||
6b2a5cccc4 | |||
a803b5b42d | |||
d8284fa602 | |||
8d96469cb4 | |||
09549a613e | |||
daac0f2ab1 | |||
8e5b8025d8 | |||
c142956936 | |||
21afa3d8ec | |||
2d9362fe89 | |||
8779e0e715 | |||
3546643667 | |||
70ac888f75 | |||
854d39f58a | |||
7bb83d4646 | |||
bb27f3ee25 | |||
96d2e9638c | |||
f2137c58b7 | |||
0dfc7bd53c | |||
ae1d0d0dfe | |||
9ddc974825 | |||
1cde579a68 | |||
73ccc2bac0 | |||
9b13de9bfe | |||
35cf24d413 | |||
a83b13f4e6 | |||
c6f70f8394 | |||
0b33da51dd | |||
39c44e0da3 | |||
d1c93d3574 | |||
208400a1d0 | |||
dae3cf2a9d | |||
0c44051189 | |||
4fcb23f8e0 | |||
8a004c12f6 | |||
3695e48b68 | |||
ac3a206eb9 | |||
f9095485a2 | |||
1c4527d58e | |||
455a039c33 | |||
5d7289ad3e | |||
40fd24e5b5 | |||
290cea8289 | |||
e6babb8bf9 | |||
84cd6e1be4 | |||
2325b6070a | |||
91b2854e4a | |||
27b44876bc | |||
123bf514ac | |||
ac7b14253f | |||
69df402f70 | |||
e600d3f65b | |||
f6e5aa2462 | |||
21102938e8 | |||
a1c0cf8373 | |||
220a11883c | |||
913df78ec0 | |||
01f9b396d8 | |||
67d418a5c6 | |||
d853e444ce | |||
e6d5c24b91 | |||
98db5b4f9a | |||
739c95411f | |||
8ce330a111 | |||
3eef8090d6 | |||
d291c7b43e | |||
1471102bfc | |||
2e099caceb | |||
3fd1c34411 | |||
dec42098db | |||
d4d51389d1 | |||
4a82a5646f | |||
fecf28a440 | |||
bc34e54f6c | |||
f543f1e7b6 | |||
9f661c9112 | |||
04bc178fc1 | |||
1b2fbfaaca | |||
a6a8fd00d7 | |||
30a13b8141 | |||
db29a874f1 | |||
8345293f94 | |||
512298cb5c | |||
6d0b2d4f8a | |||
7dbd0f5a89 | |||
c9463e941f | |||
1ce1296320 | |||
9025bbfc2a | |||
c6f3269f4a | |||
31c3971720 | |||
2db78eec90 | |||
c7fc3470d0 | |||
ad90dac61d | |||
964a29979c | |||
fbbdcf8c99 | |||
5d72ae48da | |||
1ca1caddff | |||
5c477dc695 | |||
d45b57c33c | |||
caa0e5035a | |||
5a88e6f958 | |||
36565eae63 | |||
14b1075d6b | |||
752fc7c185 | |||
de4ef14f9b | |||
15f3bf9352 | |||
d469568de7 | |||
251b9f8057 | |||
2786268510 | |||
6bb82230b9 | |||
f65f03afcc | |||
c07f55ff65 | |||
ac522bc9e1 | |||
4c60e26bf8 | |||
d11c7a3ec4 | |||
cfc04ce11e | |||
76fd8e27fb | |||
25d4d34ebe | |||
ea26e9f109 | |||
f2433c63d5 | |||
264c186eac | |||
55c08b706c | |||
835498603d | |||
b0ec5a759b | |||
2ece3ac5c2 | |||
e06c4b3279 | |||
78effefadb | |||
37c46f7da5 | |||
bf7d904bf8 | |||
6d0f901b2e | |||
efecbd0d27 | |||
65e229fb0d | |||
db0e0b7b91 | |||
23d53055f9 | |||
bd5731efa9 | |||
a2d9e63f94 | |||
f34109aa26 | |||
ff73538b5b | |||
30685528c7 | |||
c849f35965 | |||
aa483f4961 | |||
93c010eb51 | |||
0dc017b1a8 | |||
92c92bbbf8 | |||
f51591cb04 | |||
624131ce46 | |||
47da2546f9 | |||
8a53abc1e8 | |||
b258a435cc | |||
43e4f1a766 | |||
02d22c12ae | |||
70ef2f0e81 | |||
b7283c93c6 | |||
5184d64b80 | |||
f482354ffd | |||
7a2b9d66a9 | |||
d79112ee5a | |||
4a5e8f175a |
508
.github/workflows/ci.yml
vendored
Normal file
508
.github/workflows/ci.yml
vendored
Normal file
@ -0,0 +1,508 @@
|
|||||||
|
# Copyright 2021-2022 Andrey Semashev
|
||||||
|
#
|
||||||
|
# Distributed under the Boost Software License, Version 1.0.
|
||||||
|
# (See accompanying file LICENSE_1_0.txt or copy at http://boost.org/LICENSE_1_0.txt)
|
||||||
|
|
||||||
|
name: CI
|
||||||
|
|
||||||
|
on:
|
||||||
|
pull_request:
|
||||||
|
push:
|
||||||
|
branches:
|
||||||
|
- master
|
||||||
|
- develop
|
||||||
|
- feature/**
|
||||||
|
|
||||||
|
concurrency:
|
||||||
|
group: ${{format('{0}:{1}', github.repository, github.ref)}}
|
||||||
|
cancel-in-progress: true
|
||||||
|
|
||||||
|
env:
|
||||||
|
GIT_FETCH_JOBS: 8
|
||||||
|
NET_RETRY_COUNT: 5
|
||||||
|
DEFAULT_BUILD_VARIANT: debug,release
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
posix:
|
||||||
|
defaults:
|
||||||
|
run:
|
||||||
|
shell: bash
|
||||||
|
|
||||||
|
strategy:
|
||||||
|
fail-fast: false
|
||||||
|
matrix:
|
||||||
|
include:
|
||||||
|
# Linux, gcc
|
||||||
|
- toolset: gcc-4.6
|
||||||
|
cxxstd: "0x"
|
||||||
|
os: ubuntu-latest
|
||||||
|
container: ubuntu:16.04
|
||||||
|
install:
|
||||||
|
- g++-4.6
|
||||||
|
sources:
|
||||||
|
- "ppa:ubuntu-toolchain-r/test"
|
||||||
|
- toolset: gcc-4.7
|
||||||
|
cxxstd: "11"
|
||||||
|
os: ubuntu-latest
|
||||||
|
container: ubuntu:16.04
|
||||||
|
install:
|
||||||
|
- g++-4.7
|
||||||
|
- toolset: gcc-4.8
|
||||||
|
cxxstd: "11"
|
||||||
|
os: ubuntu-latest
|
||||||
|
container: ubuntu:18.04
|
||||||
|
install:
|
||||||
|
- g++-4.8
|
||||||
|
- toolset: gcc-4.9
|
||||||
|
cxxstd: "11"
|
||||||
|
os: ubuntu-latest
|
||||||
|
container: ubuntu:16.04
|
||||||
|
install:
|
||||||
|
- g++-4.9
|
||||||
|
- toolset: gcc-5
|
||||||
|
cxxstd: "11,14,1z"
|
||||||
|
os: ubuntu-latest
|
||||||
|
container: ubuntu:16.04
|
||||||
|
install:
|
||||||
|
- g++-5
|
||||||
|
- toolset: gcc-6
|
||||||
|
cxxstd: "11,14,1z"
|
||||||
|
os: ubuntu-latest
|
||||||
|
container: ubuntu:18.04
|
||||||
|
install:
|
||||||
|
- g++-6
|
||||||
|
- toolset: gcc-7
|
||||||
|
cxxstd: "11,14,17"
|
||||||
|
os: ubuntu-latest
|
||||||
|
container: ubuntu:18.04
|
||||||
|
install:
|
||||||
|
- g++-7
|
||||||
|
- toolset: gcc-8
|
||||||
|
cxxstd: "11,14,17,2a"
|
||||||
|
os: ubuntu-latest
|
||||||
|
container: ubuntu:18.04
|
||||||
|
install:
|
||||||
|
- g++-8
|
||||||
|
- toolset: gcc-9
|
||||||
|
cxxstd: "11,14,17,2a"
|
||||||
|
os: ubuntu-20.04
|
||||||
|
install:
|
||||||
|
- g++-9
|
||||||
|
- toolset: gcc-10
|
||||||
|
cxxstd: "11,14,17,20"
|
||||||
|
os: ubuntu-20.04
|
||||||
|
install:
|
||||||
|
- g++-10
|
||||||
|
- toolset: gcc-11
|
||||||
|
cxxstd: "11,14,17,20,23"
|
||||||
|
os: ubuntu-22.04
|
||||||
|
install:
|
||||||
|
- g++-11
|
||||||
|
- toolset: gcc-12
|
||||||
|
cxxstd: "11,14,17,20,23"
|
||||||
|
os: ubuntu-22.04
|
||||||
|
install:
|
||||||
|
- g++-12
|
||||||
|
- name: UBSAN
|
||||||
|
toolset: gcc-11
|
||||||
|
cxxstd: "11,14,17,20,23"
|
||||||
|
ubsan: 1
|
||||||
|
build_variant: debug
|
||||||
|
os: ubuntu-22.04
|
||||||
|
install:
|
||||||
|
- g++-11
|
||||||
|
|
||||||
|
# Linux, clang
|
||||||
|
- toolset: clang
|
||||||
|
compiler: clang++-3.5
|
||||||
|
cxxstd: "11"
|
||||||
|
os: ubuntu-latest
|
||||||
|
container: ubuntu:16.04
|
||||||
|
install:
|
||||||
|
- clang-3.5
|
||||||
|
- toolset: clang
|
||||||
|
compiler: clang++-3.6
|
||||||
|
cxxstd: "11,14"
|
||||||
|
os: ubuntu-latest
|
||||||
|
container: ubuntu:16.04
|
||||||
|
install:
|
||||||
|
- clang-3.6
|
||||||
|
- toolset: clang
|
||||||
|
compiler: clang++-3.7
|
||||||
|
cxxstd: "11,14"
|
||||||
|
os: ubuntu-latest
|
||||||
|
container: ubuntu:16.04
|
||||||
|
install:
|
||||||
|
- clang-3.7
|
||||||
|
- toolset: clang
|
||||||
|
compiler: clang++-3.8
|
||||||
|
cxxstd: "11,14"
|
||||||
|
os: ubuntu-latest
|
||||||
|
container: ubuntu:16.04
|
||||||
|
install:
|
||||||
|
- clang-3.8
|
||||||
|
- toolset: clang
|
||||||
|
compiler: clang++-3.9
|
||||||
|
cxxstd: "11,14"
|
||||||
|
os: ubuntu-latest
|
||||||
|
container: ubuntu:18.04
|
||||||
|
install:
|
||||||
|
- clang-3.9
|
||||||
|
- toolset: clang
|
||||||
|
compiler: clang++-4.0
|
||||||
|
cxxstd: "11,14"
|
||||||
|
os: ubuntu-latest
|
||||||
|
container: ubuntu:18.04
|
||||||
|
install:
|
||||||
|
- clang-4.0
|
||||||
|
- toolset: clang
|
||||||
|
compiler: clang++-5.0
|
||||||
|
cxxstd: "11,14,1z"
|
||||||
|
os: ubuntu-latest
|
||||||
|
container: ubuntu:18.04
|
||||||
|
install:
|
||||||
|
- clang-5.0
|
||||||
|
- toolset: clang
|
||||||
|
compiler: clang++-6.0
|
||||||
|
cxxstd: "11,14,17"
|
||||||
|
os: ubuntu-latest
|
||||||
|
container: ubuntu:18.04
|
||||||
|
install:
|
||||||
|
- clang-6.0
|
||||||
|
- toolset: clang
|
||||||
|
compiler: clang++-7
|
||||||
|
cxxstd: "11,14,17"
|
||||||
|
os: ubuntu-latest
|
||||||
|
container: ubuntu:18.04
|
||||||
|
install:
|
||||||
|
- clang-7
|
||||||
|
# Note: clang-8 does not fully support C++20, so it is not compatible with libstdc++-8 in this mode
|
||||||
|
- toolset: clang
|
||||||
|
compiler: clang++-8
|
||||||
|
cxxstd: "11,14,17,2a"
|
||||||
|
os: ubuntu-latest
|
||||||
|
container: ubuntu:18.04
|
||||||
|
install:
|
||||||
|
- clang-8
|
||||||
|
- g++-7
|
||||||
|
gcc_toolchain: 7
|
||||||
|
- toolset: clang
|
||||||
|
compiler: clang++-9
|
||||||
|
cxxstd: "11,14,17,2a"
|
||||||
|
os: ubuntu-20.04
|
||||||
|
install:
|
||||||
|
- clang-9
|
||||||
|
- toolset: clang
|
||||||
|
compiler: clang++-10
|
||||||
|
cxxstd: "11,14,17,20"
|
||||||
|
os: ubuntu-20.04
|
||||||
|
install:
|
||||||
|
- clang-10
|
||||||
|
- toolset: clang
|
||||||
|
compiler: clang++-11
|
||||||
|
cxxstd: "11,14,17,20"
|
||||||
|
os: ubuntu-22.04
|
||||||
|
install:
|
||||||
|
- clang-11
|
||||||
|
- toolset: clang
|
||||||
|
compiler: clang++-12
|
||||||
|
cxxstd: "11,14,17,20,2b"
|
||||||
|
os: ubuntu-22.04
|
||||||
|
install:
|
||||||
|
- clang-12
|
||||||
|
- g++-11
|
||||||
|
gcc_toolchain: 11
|
||||||
|
- toolset: clang
|
||||||
|
compiler: clang++-13
|
||||||
|
cxxstd: "11,14,17,20,2b"
|
||||||
|
os: ubuntu-22.04
|
||||||
|
install:
|
||||||
|
- clang-13
|
||||||
|
- g++-11
|
||||||
|
gcc_toolchain: 11
|
||||||
|
- toolset: clang
|
||||||
|
compiler: clang++-14
|
||||||
|
cxxstd: "11,14,17,20,2b"
|
||||||
|
os: ubuntu-22.04
|
||||||
|
install:
|
||||||
|
- clang-14
|
||||||
|
- g++-11
|
||||||
|
gcc_toolchain: 11
|
||||||
|
- toolset: clang
|
||||||
|
compiler: clang++-15
|
||||||
|
cxxstd: "11,14,17,20,2b"
|
||||||
|
os: ubuntu-22.04
|
||||||
|
install:
|
||||||
|
- clang-15
|
||||||
|
- g++-11
|
||||||
|
gcc_toolchain: 11
|
||||||
|
- toolset: clang
|
||||||
|
compiler: clang++-15
|
||||||
|
cxxstd: "11,14,17,20,2b"
|
||||||
|
os: ubuntu-22.04
|
||||||
|
install:
|
||||||
|
- clang-15
|
||||||
|
- libc++-15-dev
|
||||||
|
- libc++abi-15-dev
|
||||||
|
cxxflags: -stdlib=libc++
|
||||||
|
linkflags: -stdlib=libc++
|
||||||
|
- toolset: clang
|
||||||
|
compiler: clang++-16
|
||||||
|
cxxstd: "11,14,17,20,2b"
|
||||||
|
os: ubuntu-22.04
|
||||||
|
install:
|
||||||
|
- clang-16
|
||||||
|
sources:
|
||||||
|
- "deb http://apt.llvm.org/jammy/ llvm-toolchain-jammy-16 main"
|
||||||
|
source_keys:
|
||||||
|
- "https://apt.llvm.org/llvm-snapshot.gpg.key"
|
||||||
|
- toolset: clang
|
||||||
|
compiler: clang++-16
|
||||||
|
cxxstd: "11,14,17,20,2b"
|
||||||
|
os: ubuntu-22.04
|
||||||
|
install:
|
||||||
|
- clang-16
|
||||||
|
- libc++-16-dev
|
||||||
|
- libc++abi-16-dev
|
||||||
|
sources:
|
||||||
|
- "deb http://apt.llvm.org/jammy/ llvm-toolchain-jammy-16 main"
|
||||||
|
source_keys:
|
||||||
|
- "https://apt.llvm.org/llvm-snapshot.gpg.key"
|
||||||
|
cxxflags: -stdlib=libc++
|
||||||
|
linkflags: -stdlib=libc++
|
||||||
|
- name: UBSAN
|
||||||
|
toolset: clang
|
||||||
|
compiler: clang++-15
|
||||||
|
cxxstd: "11,14,17,20,2b"
|
||||||
|
cxxflags: -stdlib=libc++
|
||||||
|
linkflags: -stdlib=libc++
|
||||||
|
ubsan: 1
|
||||||
|
build_variant: debug
|
||||||
|
os: ubuntu-22.04
|
||||||
|
install:
|
||||||
|
- clang-15
|
||||||
|
- libc++-15-dev
|
||||||
|
- libc++abi-15-dev
|
||||||
|
|
||||||
|
- toolset: clang
|
||||||
|
cxxstd: "11,14,17,2a"
|
||||||
|
os: macos-11
|
||||||
|
|
||||||
|
- name: CMake tests
|
||||||
|
cmake_tests: 1
|
||||||
|
os: ubuntu-20.04
|
||||||
|
|
||||||
|
timeout-minutes: 60
|
||||||
|
runs-on: ${{matrix.os}}
|
||||||
|
container: ${{matrix.container}}
|
||||||
|
|
||||||
|
steps:
|
||||||
|
- name: Setup environment
|
||||||
|
run: |
|
||||||
|
if [ -f "/etc/debian_version" ]
|
||||||
|
then
|
||||||
|
echo "DEBIAN_FRONTEND=noninteractive" >> $GITHUB_ENV
|
||||||
|
export DEBIAN_FRONTEND=noninteractive
|
||||||
|
fi
|
||||||
|
if [ -n "${{matrix.container}}" ]
|
||||||
|
then
|
||||||
|
echo "GHA_CONTAINER=${{matrix.container}}" >> $GITHUB_ENV
|
||||||
|
if [ -f "/etc/debian_version" ]
|
||||||
|
then
|
||||||
|
apt-get -o Acquire::Retries=$NET_RETRY_COUNT update
|
||||||
|
if [ "$(apt-cache search "^python-is-python3$" | wc -l)" -ne 0 ]
|
||||||
|
then
|
||||||
|
PYTHON_PACKAGE="python-is-python3"
|
||||||
|
else
|
||||||
|
PYTHON_PACKAGE="python"
|
||||||
|
fi
|
||||||
|
apt-get -o Acquire::Retries=$NET_RETRY_COUNT install -y sudo software-properties-common tzdata wget curl apt-transport-https ca-certificates make build-essential g++ $PYTHON_PACKAGE python3 perl git cmake
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
git config --global pack.threads 0
|
||||||
|
|
||||||
|
- uses: actions/checkout@v3
|
||||||
|
|
||||||
|
- name: Install packages
|
||||||
|
if: matrix.install
|
||||||
|
run: |
|
||||||
|
declare -a SOURCE_KEYS SOURCES
|
||||||
|
if [ -n "${{join(matrix.source_keys, ' ')}}" ]
|
||||||
|
then
|
||||||
|
SOURCE_KEYS=("${{join(matrix.source_keys, '" "')}}")
|
||||||
|
fi
|
||||||
|
if [ -n "${{join(matrix.sources, ' ')}}" ]
|
||||||
|
then
|
||||||
|
SOURCES=("${{join(matrix.sources, '" "')}}")
|
||||||
|
fi
|
||||||
|
for key in "${SOURCE_KEYS[@]}"
|
||||||
|
do
|
||||||
|
for i in {1..$NET_RETRY_COUNT}
|
||||||
|
do
|
||||||
|
echo "Adding key: $key"
|
||||||
|
wget -O - "$key" | sudo apt-key add - && break || sleep 2
|
||||||
|
done
|
||||||
|
done
|
||||||
|
if [ ${#SOURCES[@]} -gt 0 ]
|
||||||
|
then
|
||||||
|
APT_ADD_REPO_COMMON_ARGS=("-y")
|
||||||
|
APT_ADD_REPO_SUPPORTED_ARGS="$(apt-add-repository --help | perl -ne 'if (/^\s*-n/) { print "n"; } elsif (/^\s*-P/) { print "P"; } elsif (/^\s*-S/) { print "S"; } elsif (/^\s*-U/) { print "U"; }')"
|
||||||
|
if [ -n "$APT_ADD_REPO_SUPPORTED_ARGS" -a -z "${APT_ADD_REPO_SUPPORTED_ARGS##*n*}" ]
|
||||||
|
then
|
||||||
|
APT_ADD_REPO_COMMON_ARGS+=("-n")
|
||||||
|
fi
|
||||||
|
APT_ADD_REPO_HAS_SOURCE_ARGS="$([ -n "$APT_ADD_REPO_SUPPORTED_ARGS" -a -z "${APT_ADD_REPO_SUPPORTED_ARGS##*P*}" -a -z "${APT_ADD_REPO_SUPPORTED_ARGS##*S*}" -a -z "${APT_ADD_REPO_SUPPORTED_ARGS##*U*}" ] && echo 1 || echo 0)"
|
||||||
|
for source in "${SOURCES[@]}"
|
||||||
|
do
|
||||||
|
for i in {1..$NET_RETRY_COUNT}
|
||||||
|
do
|
||||||
|
APT_ADD_REPO_ARGS=("${APT_ADD_REPO_COMMON_ARGS[@]}")
|
||||||
|
if [ $APT_ADD_REPO_HAS_SOURCE_ARGS -ne 0 ]
|
||||||
|
then
|
||||||
|
case "$source" in
|
||||||
|
"ppa:"*)
|
||||||
|
APT_ADD_REPO_ARGS+=("-P")
|
||||||
|
;;
|
||||||
|
"deb "*)
|
||||||
|
APT_ADD_REPO_ARGS+=("-S")
|
||||||
|
;;
|
||||||
|
*)
|
||||||
|
APT_ADD_REPO_ARGS+=("-U")
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
fi
|
||||||
|
APT_ADD_REPO_ARGS+=("$source")
|
||||||
|
echo "apt-add-repository ${APT_ADD_REPO_ARGS[@]}"
|
||||||
|
sudo -E apt-add-repository "${APT_ADD_REPO_ARGS[@]}" && break || sleep 2
|
||||||
|
done
|
||||||
|
done
|
||||||
|
fi
|
||||||
|
sudo apt-get -o Acquire::Retries=$NET_RETRY_COUNT update
|
||||||
|
sudo apt-get -o Acquire::Retries=$NET_RETRY_COUNT install -y ${{join(matrix.install, ' ')}}
|
||||||
|
|
||||||
|
- name: Setup GCC Toolchain
|
||||||
|
if: matrix.gcc_toolchain
|
||||||
|
run: |
|
||||||
|
GCC_TOOLCHAIN_ROOT="$HOME/gcc-toolchain"
|
||||||
|
echo "GCC_TOOLCHAIN_ROOT=\"$GCC_TOOLCHAIN_ROOT\"" >> $GITHUB_ENV
|
||||||
|
MULTIARCH_TRIPLET="$(dpkg-architecture -qDEB_HOST_MULTIARCH)"
|
||||||
|
mkdir -p "$GCC_TOOLCHAIN_ROOT"
|
||||||
|
ln -s /usr/include "$GCC_TOOLCHAIN_ROOT/include"
|
||||||
|
ln -s /usr/bin "$GCC_TOOLCHAIN_ROOT/bin"
|
||||||
|
mkdir -p "$GCC_TOOLCHAIN_ROOT/lib/gcc/$MULTIARCH_TRIPLET"
|
||||||
|
ln -s "/usr/lib/gcc/$MULTIARCH_TRIPLET/${{matrix.gcc_toolchain}}" "$GCC_TOOLCHAIN_ROOT/lib/gcc/$MULTIARCH_TRIPLET/${{matrix.gcc_toolchain}}"
|
||||||
|
|
||||||
|
- name: Setup Boost
|
||||||
|
run: |
|
||||||
|
echo GITHUB_REPOSITORY: $GITHUB_REPOSITORY
|
||||||
|
LIBRARY=${GITHUB_REPOSITORY#*/}
|
||||||
|
echo LIBRARY: $LIBRARY
|
||||||
|
echo "LIBRARY=$LIBRARY" >> $GITHUB_ENV
|
||||||
|
echo GITHUB_BASE_REF: $GITHUB_BASE_REF
|
||||||
|
echo GITHUB_REF: $GITHUB_REF
|
||||||
|
REF=${GITHUB_BASE_REF:-$GITHUB_REF}
|
||||||
|
REF=${REF#refs/heads/}
|
||||||
|
echo REF: $REF
|
||||||
|
BOOST_BRANCH=develop && [ "$REF" = "master" ] && BOOST_BRANCH=master || true
|
||||||
|
echo BOOST_BRANCH: $BOOST_BRANCH
|
||||||
|
BUILD_JOBS=$((nproc || sysctl -n hw.ncpu) 2> /dev/null)
|
||||||
|
echo "BUILD_JOBS=$BUILD_JOBS" >> $GITHUB_ENV
|
||||||
|
echo "CMAKE_BUILD_PARALLEL_LEVEL=$BUILD_JOBS" >> $GITHUB_ENV
|
||||||
|
DEPINST_ARGS=()
|
||||||
|
GIT_VERSION="$(git --version | sed -e 's/git version //')"
|
||||||
|
GIT_HAS_JOBS=1
|
||||||
|
if [ -f "/etc/debian_version" ]
|
||||||
|
then
|
||||||
|
if $(dpkg --compare-versions "$GIT_VERSION" lt 2.8.0)
|
||||||
|
then
|
||||||
|
GIT_HAS_JOBS=0
|
||||||
|
fi
|
||||||
|
else
|
||||||
|
declare -a GIT_VER=(${GIT_VERSION//./ })
|
||||||
|
declare -a GIT_MIN_VER=(2 8 0)
|
||||||
|
for ((i=0; i<${#GIT_VER[@]}; i++))
|
||||||
|
do
|
||||||
|
if [ -z "${GIT_MIN_VER[i]}" ]
|
||||||
|
then
|
||||||
|
GIT_MIN_VER[i]=0
|
||||||
|
fi
|
||||||
|
if [ "${GIT_VER[i]}" -lt "${GIT_MIN_VER[i]}" ]
|
||||||
|
then
|
||||||
|
GIT_HAS_JOBS=0
|
||||||
|
break
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
fi
|
||||||
|
if [ "$GIT_HAS_JOBS" -ne 0 ]
|
||||||
|
then
|
||||||
|
DEPINST_ARGS+=("--git_args" "--jobs $GIT_FETCH_JOBS")
|
||||||
|
fi
|
||||||
|
cd ..
|
||||||
|
git clone -b "$BOOST_BRANCH" --depth 1 "https://github.com/boostorg/boost.git" "boost-root"
|
||||||
|
cd boost-root
|
||||||
|
mkdir -p libs/$LIBRARY
|
||||||
|
cp -r $GITHUB_WORKSPACE/* libs/$LIBRARY
|
||||||
|
git submodule update --init tools/boostdep
|
||||||
|
DEPINST_ARGS+=("$LIBRARY")
|
||||||
|
python tools/boostdep/depinst/depinst.py "${DEPINST_ARGS[@]}"
|
||||||
|
if [ -z "${{matrix.cmake_tests}}" ]
|
||||||
|
then
|
||||||
|
./bootstrap.sh
|
||||||
|
./b2 headers
|
||||||
|
if [ -n "${{matrix.compiler}}" -o -n "$GCC_TOOLCHAIN_ROOT" ]
|
||||||
|
then
|
||||||
|
echo -n "using ${{matrix.toolset}} : : ${{matrix.compiler}}" > ~/user-config.jam
|
||||||
|
if [ -n "$GCC_TOOLCHAIN_ROOT" ]
|
||||||
|
then
|
||||||
|
echo -n " : <compileflags>\"--gcc-toolchain=$GCC_TOOLCHAIN_ROOT\" <linkflags>\"--gcc-toolchain=$GCC_TOOLCHAIN_ROOT\"" >> ~/user-config.jam
|
||||||
|
fi
|
||||||
|
echo " ;" >> ~/user-config.jam
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
|
||||||
|
- name: Run tests
|
||||||
|
if: matrix.cmake_tests == ''
|
||||||
|
run: |
|
||||||
|
cd ../boost-root
|
||||||
|
B2_ARGS=("-j" "$BUILD_JOBS" "toolset=${{matrix.toolset}}" "cxxstd=${{matrix.cxxstd}}")
|
||||||
|
if [ -n "${{matrix.build_variant}}" ]
|
||||||
|
then
|
||||||
|
B2_ARGS+=("variant=${{matrix.build_variant}}")
|
||||||
|
else
|
||||||
|
B2_ARGS+=("variant=$DEFAULT_BUILD_VARIANT")
|
||||||
|
fi
|
||||||
|
if [ -n "${{matrix.threading}}" ]
|
||||||
|
then
|
||||||
|
B2_ARGS+=("threading=${{matrix.threading}}")
|
||||||
|
fi
|
||||||
|
if [ -n "${{matrix.ubsan}}" ]
|
||||||
|
then
|
||||||
|
export UBSAN_OPTIONS="print_stacktrace=1"
|
||||||
|
B2_ARGS+=("cxxflags=-fsanitize=undefined -fno-sanitize-recover=undefined" "linkflags=-fsanitize=undefined -fuse-ld=gold" "define=UBSAN=1" "debug-symbols=on" "visibility=global")
|
||||||
|
fi
|
||||||
|
if [ -n "${{matrix.cxxflags}}" ]
|
||||||
|
then
|
||||||
|
B2_ARGS+=("cxxflags=${{matrix.cxxflags}}")
|
||||||
|
fi
|
||||||
|
if [ -n "${{matrix.linkflags}}" ]
|
||||||
|
then
|
||||||
|
B2_ARGS+=("linkflags=${{matrix.linkflags}}")
|
||||||
|
fi
|
||||||
|
B2_ARGS+=("libs/$LIBRARY/test")
|
||||||
|
./b2 "${B2_ARGS[@]}"
|
||||||
|
|
||||||
|
- name: Run CMake tests
|
||||||
|
if: matrix.cmake_tests
|
||||||
|
run: |
|
||||||
|
if [ -n "${{matrix.macosx_version_min}}" ]
|
||||||
|
then
|
||||||
|
export MACOSX_DEPLOYMENT_TARGET="${{matrix.macosx_version_min}}"
|
||||||
|
fi
|
||||||
|
cd ../boost-root
|
||||||
|
mkdir __build_static__ && cd __build_static__
|
||||||
|
cmake ../libs/$LIBRARY/test/test_cmake
|
||||||
|
cmake --build . --target boost_${LIBRARY}_cmake_self_test -j $BUILD_JOBS
|
||||||
|
cd ..
|
||||||
|
mkdir __build_shared__ && cd __build_shared__
|
||||||
|
cmake -DBUILD_SHARED_LIBS=On ../libs/$LIBRARY/test/test_cmake
|
||||||
|
cmake --build . --target boost_${LIBRARY}_cmake_self_test -j $BUILD_JOBS
|
30
CMakeLists.txt
Normal file
30
CMakeLists.txt
Normal file
@ -0,0 +1,30 @@
|
|||||||
|
# Copyright 2018 Peter Dimov
|
||||||
|
# Copyright 2018 Andrey Semashev
|
||||||
|
# Distributed under the Boost Software License, Version 1.0.
|
||||||
|
# See accompanying file LICENSE_1_0.txt or copy at https://www.boost.org/LICENSE_1_0.txt
|
||||||
|
|
||||||
|
cmake_minimum_required(VERSION 3.5...3.20)
|
||||||
|
|
||||||
|
project(boost_iterator VERSION "${BOOST_SUPERPROJECT_VERSION}" LANGUAGES CXX)
|
||||||
|
|
||||||
|
add_library(boost_iterator INTERFACE)
|
||||||
|
add_library(Boost::iterator ALIAS boost_iterator)
|
||||||
|
|
||||||
|
target_include_directories(boost_iterator INTERFACE include)
|
||||||
|
|
||||||
|
target_link_libraries(boost_iterator
|
||||||
|
INTERFACE
|
||||||
|
Boost::assert
|
||||||
|
Boost::concept_check
|
||||||
|
Boost::config
|
||||||
|
Boost::core
|
||||||
|
Boost::detail
|
||||||
|
Boost::function_types
|
||||||
|
Boost::fusion
|
||||||
|
Boost::mpl
|
||||||
|
Boost::optional
|
||||||
|
Boost::smart_ptr
|
||||||
|
Boost::static_assert
|
||||||
|
Boost::type_traits
|
||||||
|
Boost::utility
|
||||||
|
)
|
27
README.md
Normal file
27
README.md
Normal file
@ -0,0 +1,27 @@
|
|||||||
|
# Boost.Iterator
|
||||||
|
|
||||||
|
Boost.Iterator, part of collection of the [Boost C++ Libraries](https://github.com/boostorg), provides tools for building and working with iterators in C++. The library also provides a number of iterator classes that can be used out of the box.
|
||||||
|
|
||||||
|
### Directories
|
||||||
|
|
||||||
|
* **doc** - Documentation sources
|
||||||
|
* **include** - Interface headers of Boost.Iterator
|
||||||
|
* **test** - Boost.Iterator unit tests
|
||||||
|
* **example** - Boost.Iterator usage examples
|
||||||
|
|
||||||
|
### More information
|
||||||
|
|
||||||
|
* [Documentation](https://boost.org/libs/iterator)
|
||||||
|
* [Report bugs](https://github.com/boostorg/iterator/issues/new). Be sure to mention Boost version, platform and compiler you're using. A small compilable code sample to reproduce the problem is always good as well.
|
||||||
|
* Submit your patches as [pull requests](https://github.com/boostorg/iterator/compare) against **develop** branch. Note that by submitting patches you agree to license your modifications under the [Boost Software License, Version 1.0](https://www.boost.org/LICENSE_1_0.txt).
|
||||||
|
|
||||||
|
### Build status
|
||||||
|
|
||||||
|
Branch | GitHub Actions | AppVeyor | Test Matrix | Dependencies |
|
||||||
|
:-------------: | -------------- | -------- | ----------- | ------------ |
|
||||||
|
[`master`](https://github.com/boostorg/iterator/tree/master) | [](https://github.com/boostorg/iterator/actions?query=branch%3Amaster) | [](https://ci.appveyor.com/project/Lastique/iterator/branch/master) | [](http://www.boost.org/development/tests/master/developer/iterator.html) | [](https://pdimov.github.io/boostdep-report/master/iterator.html)
|
||||||
|
[`develop`](https://github.com/boostorg/iterator/tree/develop) | [](https://github.com/boostorg/iterator/actions?query=branch%3Adevelop) | [](https://ci.appveyor.com/project/Lastique/iterator/branch/develop) | [](http://www.boost.org/development/tests/develop/developer/iterator.html) | [](https://pdimov.github.io/boostdep-report/develop/iterator.html)
|
||||||
|
|
||||||
|
### License
|
||||||
|
|
||||||
|
Distributed under the [Boost Software License, Version 1.0](https://www.boost.org/LICENSE_1_0.txt).
|
102
appveyor.yml
Normal file
102
appveyor.yml
Normal file
@ -0,0 +1,102 @@
|
|||||||
|
# Copyright 2017 Edward Diener
|
||||||
|
# Copyright 2019 Andrey Semashev
|
||||||
|
# Distributed under the Boost Software License, Version 1.0.
|
||||||
|
# (See accompanying file LICENSE_1_0.txt or copy at http://boost.org/LICENSE_1_0.txt)
|
||||||
|
|
||||||
|
version: 1.0.{build}-{branch}
|
||||||
|
|
||||||
|
shallow_clone: true
|
||||||
|
|
||||||
|
branches:
|
||||||
|
only:
|
||||||
|
- master
|
||||||
|
- develop
|
||||||
|
- /feature\/.*/
|
||||||
|
|
||||||
|
environment:
|
||||||
|
matrix:
|
||||||
|
- TOOLSET: msvc-12.0
|
||||||
|
ADDRMD: 32,64
|
||||||
|
APPVEYOR_BUILD_WORKER_IMAGE: Visual Studio 2015
|
||||||
|
- TOOLSET: msvc-14.0
|
||||||
|
CXXSTD: 14,latest
|
||||||
|
ADDRMD: 32,64
|
||||||
|
APPVEYOR_BUILD_WORKER_IMAGE: Visual Studio 2015
|
||||||
|
- TOOLSET: msvc-14.1
|
||||||
|
CXXSTD: 14,17,latest
|
||||||
|
ADDRMD: 32,64
|
||||||
|
APPVEYOR_BUILD_WORKER_IMAGE: Visual Studio 2017
|
||||||
|
- TOOLSET: msvc-14.2
|
||||||
|
ADDRMD: 32,64
|
||||||
|
CXXSTD: 14,17,20,latest
|
||||||
|
APPVEYOR_BUILD_WORKER_IMAGE: Visual Studio 2019
|
||||||
|
- TOOLSET: msvc-14.3
|
||||||
|
ADDRMD: 32,64
|
||||||
|
CXXSTD: 14,17,20,latest
|
||||||
|
APPVEYOR_BUILD_WORKER_IMAGE: Visual Studio 2022
|
||||||
|
- TOOLSET: clang-win
|
||||||
|
ADDRMD: 32,64
|
||||||
|
CXXSTD: 14,17,latest
|
||||||
|
APPVEYOR_BUILD_WORKER_IMAGE: Visual Studio 2017
|
||||||
|
- TOOLSET: gcc
|
||||||
|
CXXSTD: 11,14,1z
|
||||||
|
ADDPATH: C:\cygwin\bin;
|
||||||
|
APPVEYOR_BUILD_WORKER_IMAGE: Visual Studio 2015
|
||||||
|
- TOOLSET: gcc
|
||||||
|
CXXSTD: 11,14,1z
|
||||||
|
ADDPATH: C:\cygwin64\bin;
|
||||||
|
APPVEYOR_BUILD_WORKER_IMAGE: Visual Studio 2015
|
||||||
|
- TOOLSET: gcc
|
||||||
|
CXXSTD: 11,14,1z
|
||||||
|
ADDPATH: C:\mingw\bin;
|
||||||
|
APPVEYOR_BUILD_WORKER_IMAGE: Visual Studio 2015
|
||||||
|
- TOOLSET: gcc
|
||||||
|
CXXSTD: 11,14,1z
|
||||||
|
ADDPATH: C:\mingw-w64\x86_64-6.3.0-posix-seh-rt_v5-rev1\mingw64\bin;
|
||||||
|
APPVEYOR_BUILD_WORKER_IMAGE: Visual Studio 2015
|
||||||
|
- TOOLSET: gcc
|
||||||
|
CXXSTD: 11,14,1z
|
||||||
|
ADDPATH: C:\mingw-w64\x86_64-7.3.0-posix-seh-rt_v5-rev0\mingw64\bin;
|
||||||
|
APPVEYOR_BUILD_WORKER_IMAGE: Visual Studio 2015
|
||||||
|
- TEST_CMAKE: 1
|
||||||
|
APPVEYOR_BUILD_WORKER_IMAGE: Visual Studio 2019
|
||||||
|
|
||||||
|
install:
|
||||||
|
- set GIT_FETCH_JOBS=8
|
||||||
|
- set BOOST_BRANCH=develop
|
||||||
|
- if "%APPVEYOR_REPO_BRANCH%" == "master" set BOOST_BRANCH=master
|
||||||
|
- cd ..
|
||||||
|
- git clone -b %BOOST_BRANCH% --depth 1 https://github.com/boostorg/boost.git boost-root
|
||||||
|
- cd boost-root
|
||||||
|
- git submodule init tools/build
|
||||||
|
- git submodule init tools/boostdep
|
||||||
|
- git submodule init tools/boost_install
|
||||||
|
- git submodule init libs/headers
|
||||||
|
- git submodule init libs/config
|
||||||
|
- git submodule update --jobs %GIT_FETCH_JOBS%
|
||||||
|
- xcopy /s /e /q %APPVEYOR_BUILD_FOLDER% libs\iterator
|
||||||
|
- python tools/boostdep/depinst/depinst.py --git_args "--jobs %GIT_FETCH_JOBS%" iterator
|
||||||
|
- cmd /c bootstrap
|
||||||
|
- b2 -d0 headers
|
||||||
|
|
||||||
|
build: off
|
||||||
|
|
||||||
|
test_script:
|
||||||
|
- PATH=%ADDPATH%%PATH%
|
||||||
|
- if not "%CXXSTD%" == "" set CXXSTD=cxxstd=%CXXSTD%
|
||||||
|
- if not "%ADDRMD%" == "" set ADDRMD=address-model=%ADDRMD%
|
||||||
|
- b2 -j %NUMBER_OF_PROCESSORS% libs/iterator/test toolset=%TOOLSET% %CXXSTD% %ADDRMD%
|
||||||
|
|
||||||
|
for:
|
||||||
|
- matrix:
|
||||||
|
only: [TEST_CMAKE: 1]
|
||||||
|
test_script:
|
||||||
|
- mkdir __build_static__
|
||||||
|
- cd __build_static__
|
||||||
|
- cmake ../libs/iterator/test/test_cmake
|
||||||
|
- cmake --build . --target boost_iterator_cmake_self_test -j %NUMBER_OF_PROCESSORS%
|
||||||
|
- cd ..
|
||||||
|
- mkdir __build_shared__
|
||||||
|
- cd __build_shared__
|
||||||
|
- cmake -DBUILD_SHARED_LIBS=On ../libs/iterator/test/test_cmake
|
||||||
|
- cmake --build . --target boost_iterator_cmake_self_test -j %NUMBER_OF_PROCESSORS%
|
@ -1 +0,0 @@
|
|||||||
GNUmakefile
|
|
@ -3,295 +3,14 @@
|
|||||||
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
|
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
|
||||||
<head>
|
<head>
|
||||||
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
|
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
|
||||||
<meta name="generator" content="Docutils 0.4: http://docutils.sourceforge.net/" />
|
<meta name="generator" content="Docutils 0.5: http://docutils.sourceforge.net/" />
|
||||||
<title>Bidirectional Traversal Concept</title>
|
<title>Bidirectional Traversal Concept</title>
|
||||||
<style type="text/css">
|
<link rel="stylesheet" href="../../../rst.css" type="text/css" />
|
||||||
|
|
||||||
/*
|
|
||||||
:Author: David Goodger
|
|
||||||
:Contact: goodger@users.sourceforge.net
|
|
||||||
:Date: $Date$
|
|
||||||
:Revision: $Revision$
|
|
||||||
:Copyright: This stylesheet has been placed in the public domain.
|
|
||||||
|
|
||||||
Default cascading style sheet for the HTML output of Docutils.
|
|
||||||
|
|
||||||
See http://docutils.sf.net/docs/howto/html-stylesheets.html for how to
|
|
||||||
customize this style sheet.
|
|
||||||
*/
|
|
||||||
|
|
||||||
/* used to remove borders from tables and images */
|
|
||||||
.borderless, table.borderless td, table.borderless th {
|
|
||||||
border: 0 }
|
|
||||||
|
|
||||||
table.borderless td, table.borderless th {
|
|
||||||
/* Override padding for "table.docutils td" with "! important".
|
|
||||||
The right padding separates the table cells. */
|
|
||||||
padding: 0 0.5em 0 0 ! important }
|
|
||||||
|
|
||||||
.first {
|
|
||||||
/* Override more specific margin styles with "! important". */
|
|
||||||
margin-top: 0 ! important }
|
|
||||||
|
|
||||||
.last, .with-subtitle {
|
|
||||||
margin-bottom: 0 ! important }
|
|
||||||
|
|
||||||
.hidden {
|
|
||||||
display: none }
|
|
||||||
|
|
||||||
a.toc-backref {
|
|
||||||
text-decoration: none ;
|
|
||||||
color: black }
|
|
||||||
|
|
||||||
blockquote.epigraph {
|
|
||||||
margin: 2em 5em ; }
|
|
||||||
|
|
||||||
dl.docutils dd {
|
|
||||||
margin-bottom: 0.5em }
|
|
||||||
|
|
||||||
/* Uncomment (and remove this text!) to get bold-faced definition list terms
|
|
||||||
dl.docutils dt {
|
|
||||||
font-weight: bold }
|
|
||||||
*/
|
|
||||||
|
|
||||||
div.abstract {
|
|
||||||
margin: 2em 5em }
|
|
||||||
|
|
||||||
div.abstract p.topic-title {
|
|
||||||
font-weight: bold ;
|
|
||||||
text-align: center }
|
|
||||||
|
|
||||||
div.admonition, div.attention, div.caution, div.danger, div.error,
|
|
||||||
div.hint, div.important, div.note, div.tip, div.warning {
|
|
||||||
margin: 2em ;
|
|
||||||
border: medium outset ;
|
|
||||||
padding: 1em }
|
|
||||||
|
|
||||||
div.admonition p.admonition-title, div.hint p.admonition-title,
|
|
||||||
div.important p.admonition-title, div.note p.admonition-title,
|
|
||||||
div.tip p.admonition-title {
|
|
||||||
font-weight: bold ;
|
|
||||||
font-family: sans-serif }
|
|
||||||
|
|
||||||
div.attention p.admonition-title, div.caution p.admonition-title,
|
|
||||||
div.danger p.admonition-title, div.error p.admonition-title,
|
|
||||||
div.warning p.admonition-title {
|
|
||||||
color: red ;
|
|
||||||
font-weight: bold ;
|
|
||||||
font-family: sans-serif }
|
|
||||||
|
|
||||||
/* Uncomment (and remove this text!) to get reduced vertical space in
|
|
||||||
compound paragraphs.
|
|
||||||
div.compound .compound-first, div.compound .compound-middle {
|
|
||||||
margin-bottom: 0.5em }
|
|
||||||
|
|
||||||
div.compound .compound-last, div.compound .compound-middle {
|
|
||||||
margin-top: 0.5em }
|
|
||||||
*/
|
|
||||||
|
|
||||||
div.dedication {
|
|
||||||
margin: 2em 5em ;
|
|
||||||
text-align: center ;
|
|
||||||
font-style: italic }
|
|
||||||
|
|
||||||
div.dedication p.topic-title {
|
|
||||||
font-weight: bold ;
|
|
||||||
font-style: normal }
|
|
||||||
|
|
||||||
div.figure {
|
|
||||||
margin-left: 2em ;
|
|
||||||
margin-right: 2em }
|
|
||||||
|
|
||||||
div.footer, div.header {
|
|
||||||
clear: both;
|
|
||||||
font-size: smaller }
|
|
||||||
|
|
||||||
div.line-block {
|
|
||||||
display: block ;
|
|
||||||
margin-top: 1em ;
|
|
||||||
margin-bottom: 1em }
|
|
||||||
|
|
||||||
div.line-block div.line-block {
|
|
||||||
margin-top: 0 ;
|
|
||||||
margin-bottom: 0 ;
|
|
||||||
margin-left: 1.5em }
|
|
||||||
|
|
||||||
div.sidebar {
|
|
||||||
margin-left: 1em ;
|
|
||||||
border: medium outset ;
|
|
||||||
padding: 1em ;
|
|
||||||
background-color: #ffffee ;
|
|
||||||
width: 40% ;
|
|
||||||
float: right ;
|
|
||||||
clear: right }
|
|
||||||
|
|
||||||
div.sidebar p.rubric {
|
|
||||||
font-family: sans-serif ;
|
|
||||||
font-size: medium }
|
|
||||||
|
|
||||||
div.system-messages {
|
|
||||||
margin: 5em }
|
|
||||||
|
|
||||||
div.system-messages h1 {
|
|
||||||
color: red }
|
|
||||||
|
|
||||||
div.system-message {
|
|
||||||
border: medium outset ;
|
|
||||||
padding: 1em }
|
|
||||||
|
|
||||||
div.system-message p.system-message-title {
|
|
||||||
color: red ;
|
|
||||||
font-weight: bold }
|
|
||||||
|
|
||||||
div.topic {
|
|
||||||
margin: 2em }
|
|
||||||
|
|
||||||
h1.section-subtitle, h2.section-subtitle, h3.section-subtitle,
|
|
||||||
h4.section-subtitle, h5.section-subtitle, h6.section-subtitle {
|
|
||||||
margin-top: 0.4em }
|
|
||||||
|
|
||||||
h1.title {
|
|
||||||
text-align: center }
|
|
||||||
|
|
||||||
h2.subtitle {
|
|
||||||
text-align: center }
|
|
||||||
|
|
||||||
hr.docutils {
|
|
||||||
width: 75% }
|
|
||||||
|
|
||||||
img.align-left {
|
|
||||||
clear: left }
|
|
||||||
|
|
||||||
img.align-right {
|
|
||||||
clear: right }
|
|
||||||
|
|
||||||
ol.simple, ul.simple {
|
|
||||||
margin-bottom: 1em }
|
|
||||||
|
|
||||||
ol.arabic {
|
|
||||||
list-style: decimal }
|
|
||||||
|
|
||||||
ol.loweralpha {
|
|
||||||
list-style: lower-alpha }
|
|
||||||
|
|
||||||
ol.upperalpha {
|
|
||||||
list-style: upper-alpha }
|
|
||||||
|
|
||||||
ol.lowerroman {
|
|
||||||
list-style: lower-roman }
|
|
||||||
|
|
||||||
ol.upperroman {
|
|
||||||
list-style: upper-roman }
|
|
||||||
|
|
||||||
p.attribution {
|
|
||||||
text-align: right ;
|
|
||||||
margin-left: 50% }
|
|
||||||
|
|
||||||
p.caption {
|
|
||||||
font-style: italic }
|
|
||||||
|
|
||||||
p.credits {
|
|
||||||
font-style: italic ;
|
|
||||||
font-size: smaller }
|
|
||||||
|
|
||||||
p.label {
|
|
||||||
white-space: nowrap }
|
|
||||||
|
|
||||||
p.rubric {
|
|
||||||
font-weight: bold ;
|
|
||||||
font-size: larger ;
|
|
||||||
color: maroon ;
|
|
||||||
text-align: center }
|
|
||||||
|
|
||||||
p.sidebar-title {
|
|
||||||
font-family: sans-serif ;
|
|
||||||
font-weight: bold ;
|
|
||||||
font-size: larger }
|
|
||||||
|
|
||||||
p.sidebar-subtitle {
|
|
||||||
font-family: sans-serif ;
|
|
||||||
font-weight: bold }
|
|
||||||
|
|
||||||
p.topic-title {
|
|
||||||
font-weight: bold }
|
|
||||||
|
|
||||||
pre.address {
|
|
||||||
margin-bottom: 0 ;
|
|
||||||
margin-top: 0 ;
|
|
||||||
font-family: serif ;
|
|
||||||
font-size: 100% }
|
|
||||||
|
|
||||||
pre.literal-block, pre.doctest-block {
|
|
||||||
margin-left: 2em ;
|
|
||||||
margin-right: 2em ;
|
|
||||||
background-color: #eeeeee }
|
|
||||||
|
|
||||||
span.classifier {
|
|
||||||
font-family: sans-serif ;
|
|
||||||
font-style: oblique }
|
|
||||||
|
|
||||||
span.classifier-delimiter {
|
|
||||||
font-family: sans-serif ;
|
|
||||||
font-weight: bold }
|
|
||||||
|
|
||||||
span.interpreted {
|
|
||||||
font-family: sans-serif }
|
|
||||||
|
|
||||||
span.option {
|
|
||||||
white-space: nowrap }
|
|
||||||
|
|
||||||
span.pre {
|
|
||||||
white-space: pre }
|
|
||||||
|
|
||||||
span.problematic {
|
|
||||||
color: red }
|
|
||||||
|
|
||||||
span.section-subtitle {
|
|
||||||
/* font-size relative to parent (h1..h6 element) */
|
|
||||||
font-size: 80% }
|
|
||||||
|
|
||||||
table.citation {
|
|
||||||
border-left: solid 1px gray;
|
|
||||||
margin-left: 1px }
|
|
||||||
|
|
||||||
table.docinfo {
|
|
||||||
margin: 2em 4em }
|
|
||||||
|
|
||||||
table.docutils {
|
|
||||||
margin-top: 0.5em ;
|
|
||||||
margin-bottom: 0.5em }
|
|
||||||
|
|
||||||
table.footnote {
|
|
||||||
border-left: solid 1px black;
|
|
||||||
margin-left: 1px }
|
|
||||||
|
|
||||||
table.docutils td, table.docutils th,
|
|
||||||
table.docinfo td, table.docinfo th {
|
|
||||||
padding-left: 0.5em ;
|
|
||||||
padding-right: 0.5em ;
|
|
||||||
vertical-align: top }
|
|
||||||
|
|
||||||
table.docutils th.field-name, table.docinfo th.docinfo-name {
|
|
||||||
font-weight: bold ;
|
|
||||||
text-align: left ;
|
|
||||||
white-space: nowrap ;
|
|
||||||
padding-left: 0 }
|
|
||||||
|
|
||||||
h1 tt.docutils, h2 tt.docutils, h3 tt.docutils,
|
|
||||||
h4 tt.docutils, h5 tt.docutils, h6 tt.docutils {
|
|
||||||
font-size: 100% }
|
|
||||||
|
|
||||||
tt.docutils {
|
|
||||||
background-color: #eeeeee }
|
|
||||||
|
|
||||||
ul.auto-toc {
|
|
||||||
list-style-type: none }
|
|
||||||
|
|
||||||
</style>
|
|
||||||
</head>
|
</head>
|
||||||
<body>
|
<body>
|
||||||
<div class="document" id="bidirectional-traversal-concept">
|
<div class="document" id="bidirectional-traversal-concept">
|
||||||
<h1 class="title">Bidirectional Traversal Concept</h1>
|
<h1 class="title">Bidirectional Traversal Concept</h1>
|
||||||
|
|
||||||
<!-- Copyright David Abrahams 2006. Distributed under the Boost -->
|
<!-- Copyright David Abrahams 2006. Distributed under the Boost -->
|
||||||
<!-- Software License, Version 1.0. (See accompanying -->
|
<!-- Software License, Version 1.0. (See accompanying -->
|
||||||
<!-- file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) -->
|
<!-- file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) -->
|
||||||
@ -346,6 +65,12 @@ implies <tt class="docutils literal"><span class="pre">r</span> <span class="pre
|
|||||||
</tr>
|
</tr>
|
||||||
</tbody>
|
</tbody>
|
||||||
</table>
|
</table>
|
||||||
|
</div>
|
||||||
|
<div class="footer">
|
||||||
|
<hr class="footer" />
|
||||||
|
<a class="reference external" href="BidirectionalTraversal.rst">View document source</a>.
|
||||||
|
Generated by <a class="reference external" href="http://docutils.sourceforge.net/">Docutils</a> from <a class="reference external" href="http://docutils.sourceforge.net/rst.html">reStructuredText</a> source.
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
</body>
|
</body>
|
||||||
</html>
|
</html>
|
||||||
|
0
doc/BidirectionalTraversal.rst
Executable file → Normal file
0
doc/BidirectionalTraversal.rst
Executable file → Normal file
@ -3,295 +3,14 @@
|
|||||||
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
|
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
|
||||||
<head>
|
<head>
|
||||||
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
|
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
|
||||||
<meta name="generator" content="Docutils 0.4: http://docutils.sourceforge.net/" />
|
<meta name="generator" content="Docutils 0.5: http://docutils.sourceforge.net/" />
|
||||||
<title>Forward Traversal Concept</title>
|
<title>Forward Traversal Concept</title>
|
||||||
<style type="text/css">
|
<link rel="stylesheet" href="../../../rst.css" type="text/css" />
|
||||||
|
|
||||||
/*
|
|
||||||
:Author: David Goodger
|
|
||||||
:Contact: goodger@users.sourceforge.net
|
|
||||||
:Date: $Date$
|
|
||||||
:Revision: $Revision$
|
|
||||||
:Copyright: This stylesheet has been placed in the public domain.
|
|
||||||
|
|
||||||
Default cascading style sheet for the HTML output of Docutils.
|
|
||||||
|
|
||||||
See http://docutils.sf.net/docs/howto/html-stylesheets.html for how to
|
|
||||||
customize this style sheet.
|
|
||||||
*/
|
|
||||||
|
|
||||||
/* used to remove borders from tables and images */
|
|
||||||
.borderless, table.borderless td, table.borderless th {
|
|
||||||
border: 0 }
|
|
||||||
|
|
||||||
table.borderless td, table.borderless th {
|
|
||||||
/* Override padding for "table.docutils td" with "! important".
|
|
||||||
The right padding separates the table cells. */
|
|
||||||
padding: 0 0.5em 0 0 ! important }
|
|
||||||
|
|
||||||
.first {
|
|
||||||
/* Override more specific margin styles with "! important". */
|
|
||||||
margin-top: 0 ! important }
|
|
||||||
|
|
||||||
.last, .with-subtitle {
|
|
||||||
margin-bottom: 0 ! important }
|
|
||||||
|
|
||||||
.hidden {
|
|
||||||
display: none }
|
|
||||||
|
|
||||||
a.toc-backref {
|
|
||||||
text-decoration: none ;
|
|
||||||
color: black }
|
|
||||||
|
|
||||||
blockquote.epigraph {
|
|
||||||
margin: 2em 5em ; }
|
|
||||||
|
|
||||||
dl.docutils dd {
|
|
||||||
margin-bottom: 0.5em }
|
|
||||||
|
|
||||||
/* Uncomment (and remove this text!) to get bold-faced definition list terms
|
|
||||||
dl.docutils dt {
|
|
||||||
font-weight: bold }
|
|
||||||
*/
|
|
||||||
|
|
||||||
div.abstract {
|
|
||||||
margin: 2em 5em }
|
|
||||||
|
|
||||||
div.abstract p.topic-title {
|
|
||||||
font-weight: bold ;
|
|
||||||
text-align: center }
|
|
||||||
|
|
||||||
div.admonition, div.attention, div.caution, div.danger, div.error,
|
|
||||||
div.hint, div.important, div.note, div.tip, div.warning {
|
|
||||||
margin: 2em ;
|
|
||||||
border: medium outset ;
|
|
||||||
padding: 1em }
|
|
||||||
|
|
||||||
div.admonition p.admonition-title, div.hint p.admonition-title,
|
|
||||||
div.important p.admonition-title, div.note p.admonition-title,
|
|
||||||
div.tip p.admonition-title {
|
|
||||||
font-weight: bold ;
|
|
||||||
font-family: sans-serif }
|
|
||||||
|
|
||||||
div.attention p.admonition-title, div.caution p.admonition-title,
|
|
||||||
div.danger p.admonition-title, div.error p.admonition-title,
|
|
||||||
div.warning p.admonition-title {
|
|
||||||
color: red ;
|
|
||||||
font-weight: bold ;
|
|
||||||
font-family: sans-serif }
|
|
||||||
|
|
||||||
/* Uncomment (and remove this text!) to get reduced vertical space in
|
|
||||||
compound paragraphs.
|
|
||||||
div.compound .compound-first, div.compound .compound-middle {
|
|
||||||
margin-bottom: 0.5em }
|
|
||||||
|
|
||||||
div.compound .compound-last, div.compound .compound-middle {
|
|
||||||
margin-top: 0.5em }
|
|
||||||
*/
|
|
||||||
|
|
||||||
div.dedication {
|
|
||||||
margin: 2em 5em ;
|
|
||||||
text-align: center ;
|
|
||||||
font-style: italic }
|
|
||||||
|
|
||||||
div.dedication p.topic-title {
|
|
||||||
font-weight: bold ;
|
|
||||||
font-style: normal }
|
|
||||||
|
|
||||||
div.figure {
|
|
||||||
margin-left: 2em ;
|
|
||||||
margin-right: 2em }
|
|
||||||
|
|
||||||
div.footer, div.header {
|
|
||||||
clear: both;
|
|
||||||
font-size: smaller }
|
|
||||||
|
|
||||||
div.line-block {
|
|
||||||
display: block ;
|
|
||||||
margin-top: 1em ;
|
|
||||||
margin-bottom: 1em }
|
|
||||||
|
|
||||||
div.line-block div.line-block {
|
|
||||||
margin-top: 0 ;
|
|
||||||
margin-bottom: 0 ;
|
|
||||||
margin-left: 1.5em }
|
|
||||||
|
|
||||||
div.sidebar {
|
|
||||||
margin-left: 1em ;
|
|
||||||
border: medium outset ;
|
|
||||||
padding: 1em ;
|
|
||||||
background-color: #ffffee ;
|
|
||||||
width: 40% ;
|
|
||||||
float: right ;
|
|
||||||
clear: right }
|
|
||||||
|
|
||||||
div.sidebar p.rubric {
|
|
||||||
font-family: sans-serif ;
|
|
||||||
font-size: medium }
|
|
||||||
|
|
||||||
div.system-messages {
|
|
||||||
margin: 5em }
|
|
||||||
|
|
||||||
div.system-messages h1 {
|
|
||||||
color: red }
|
|
||||||
|
|
||||||
div.system-message {
|
|
||||||
border: medium outset ;
|
|
||||||
padding: 1em }
|
|
||||||
|
|
||||||
div.system-message p.system-message-title {
|
|
||||||
color: red ;
|
|
||||||
font-weight: bold }
|
|
||||||
|
|
||||||
div.topic {
|
|
||||||
margin: 2em }
|
|
||||||
|
|
||||||
h1.section-subtitle, h2.section-subtitle, h3.section-subtitle,
|
|
||||||
h4.section-subtitle, h5.section-subtitle, h6.section-subtitle {
|
|
||||||
margin-top: 0.4em }
|
|
||||||
|
|
||||||
h1.title {
|
|
||||||
text-align: center }
|
|
||||||
|
|
||||||
h2.subtitle {
|
|
||||||
text-align: center }
|
|
||||||
|
|
||||||
hr.docutils {
|
|
||||||
width: 75% }
|
|
||||||
|
|
||||||
img.align-left {
|
|
||||||
clear: left }
|
|
||||||
|
|
||||||
img.align-right {
|
|
||||||
clear: right }
|
|
||||||
|
|
||||||
ol.simple, ul.simple {
|
|
||||||
margin-bottom: 1em }
|
|
||||||
|
|
||||||
ol.arabic {
|
|
||||||
list-style: decimal }
|
|
||||||
|
|
||||||
ol.loweralpha {
|
|
||||||
list-style: lower-alpha }
|
|
||||||
|
|
||||||
ol.upperalpha {
|
|
||||||
list-style: upper-alpha }
|
|
||||||
|
|
||||||
ol.lowerroman {
|
|
||||||
list-style: lower-roman }
|
|
||||||
|
|
||||||
ol.upperroman {
|
|
||||||
list-style: upper-roman }
|
|
||||||
|
|
||||||
p.attribution {
|
|
||||||
text-align: right ;
|
|
||||||
margin-left: 50% }
|
|
||||||
|
|
||||||
p.caption {
|
|
||||||
font-style: italic }
|
|
||||||
|
|
||||||
p.credits {
|
|
||||||
font-style: italic ;
|
|
||||||
font-size: smaller }
|
|
||||||
|
|
||||||
p.label {
|
|
||||||
white-space: nowrap }
|
|
||||||
|
|
||||||
p.rubric {
|
|
||||||
font-weight: bold ;
|
|
||||||
font-size: larger ;
|
|
||||||
color: maroon ;
|
|
||||||
text-align: center }
|
|
||||||
|
|
||||||
p.sidebar-title {
|
|
||||||
font-family: sans-serif ;
|
|
||||||
font-weight: bold ;
|
|
||||||
font-size: larger }
|
|
||||||
|
|
||||||
p.sidebar-subtitle {
|
|
||||||
font-family: sans-serif ;
|
|
||||||
font-weight: bold }
|
|
||||||
|
|
||||||
p.topic-title {
|
|
||||||
font-weight: bold }
|
|
||||||
|
|
||||||
pre.address {
|
|
||||||
margin-bottom: 0 ;
|
|
||||||
margin-top: 0 ;
|
|
||||||
font-family: serif ;
|
|
||||||
font-size: 100% }
|
|
||||||
|
|
||||||
pre.literal-block, pre.doctest-block {
|
|
||||||
margin-left: 2em ;
|
|
||||||
margin-right: 2em ;
|
|
||||||
background-color: #eeeeee }
|
|
||||||
|
|
||||||
span.classifier {
|
|
||||||
font-family: sans-serif ;
|
|
||||||
font-style: oblique }
|
|
||||||
|
|
||||||
span.classifier-delimiter {
|
|
||||||
font-family: sans-serif ;
|
|
||||||
font-weight: bold }
|
|
||||||
|
|
||||||
span.interpreted {
|
|
||||||
font-family: sans-serif }
|
|
||||||
|
|
||||||
span.option {
|
|
||||||
white-space: nowrap }
|
|
||||||
|
|
||||||
span.pre {
|
|
||||||
white-space: pre }
|
|
||||||
|
|
||||||
span.problematic {
|
|
||||||
color: red }
|
|
||||||
|
|
||||||
span.section-subtitle {
|
|
||||||
/* font-size relative to parent (h1..h6 element) */
|
|
||||||
font-size: 80% }
|
|
||||||
|
|
||||||
table.citation {
|
|
||||||
border-left: solid 1px gray;
|
|
||||||
margin-left: 1px }
|
|
||||||
|
|
||||||
table.docinfo {
|
|
||||||
margin: 2em 4em }
|
|
||||||
|
|
||||||
table.docutils {
|
|
||||||
margin-top: 0.5em ;
|
|
||||||
margin-bottom: 0.5em }
|
|
||||||
|
|
||||||
table.footnote {
|
|
||||||
border-left: solid 1px black;
|
|
||||||
margin-left: 1px }
|
|
||||||
|
|
||||||
table.docutils td, table.docutils th,
|
|
||||||
table.docinfo td, table.docinfo th {
|
|
||||||
padding-left: 0.5em ;
|
|
||||||
padding-right: 0.5em ;
|
|
||||||
vertical-align: top }
|
|
||||||
|
|
||||||
table.docutils th.field-name, table.docinfo th.docinfo-name {
|
|
||||||
font-weight: bold ;
|
|
||||||
text-align: left ;
|
|
||||||
white-space: nowrap ;
|
|
||||||
padding-left: 0 }
|
|
||||||
|
|
||||||
h1 tt.docutils, h2 tt.docutils, h3 tt.docutils,
|
|
||||||
h4 tt.docutils, h5 tt.docutils, h6 tt.docutils {
|
|
||||||
font-size: 100% }
|
|
||||||
|
|
||||||
tt.docutils {
|
|
||||||
background-color: #eeeeee }
|
|
||||||
|
|
||||||
ul.auto-toc {
|
|
||||||
list-style-type: none }
|
|
||||||
|
|
||||||
</style>
|
|
||||||
</head>
|
</head>
|
||||||
<body>
|
<body>
|
||||||
<div class="document" id="forward-traversal-concept">
|
<div class="document" id="forward-traversal-concept">
|
||||||
<h1 class="title">Forward Traversal Concept</h1>
|
<h1 class="title">Forward Traversal Concept</h1>
|
||||||
|
|
||||||
<!-- Copyright David Abrahams 2006. Distributed under the Boost -->
|
<!-- Copyright David Abrahams 2006. Distributed under the Boost -->
|
||||||
<!-- Software License, Version 1.0. (See accompanying -->
|
<!-- Software License, Version 1.0. (See accompanying -->
|
||||||
<!-- file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) -->
|
<!-- file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) -->
|
||||||
@ -337,6 +56,12 @@ the distance between iterators</td>
|
|||||||
</tr>
|
</tr>
|
||||||
</tbody>
|
</tbody>
|
||||||
</table>
|
</table>
|
||||||
|
</div>
|
||||||
|
<div class="footer">
|
||||||
|
<hr class="footer" />
|
||||||
|
<a class="reference external" href="ForwardTraversal.rst">View document source</a>.
|
||||||
|
Generated by <a class="reference external" href="http://docutils.sourceforge.net/">Docutils</a> from <a class="reference external" href="http://docutils.sourceforge.net/rst.html">reStructuredText</a> source.
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
</body>
|
</body>
|
||||||
</html>
|
</html>
|
||||||
|
0
doc/ForwardTraversal.rst
Executable file → Normal file
0
doc/ForwardTraversal.rst
Executable file → Normal file
0
doc/GNUmakefile
Executable file → Normal file
0
doc/GNUmakefile
Executable file → Normal file
@ -3,295 +3,14 @@
|
|||||||
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
|
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
|
||||||
<head>
|
<head>
|
||||||
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
|
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
|
||||||
<meta name="generator" content="Docutils 0.4: http://docutils.sourceforge.net/" />
|
<meta name="generator" content="Docutils 0.5: http://docutils.sourceforge.net/" />
|
||||||
<title>Incrementable Iterator Concept</title>
|
<title>Incrementable Iterator Concept</title>
|
||||||
<style type="text/css">
|
<link rel="stylesheet" href="../../../rst.css" type="text/css" />
|
||||||
|
|
||||||
/*
|
|
||||||
:Author: David Goodger
|
|
||||||
:Contact: goodger@users.sourceforge.net
|
|
||||||
:Date: $Date$
|
|
||||||
:Revision: $Revision$
|
|
||||||
:Copyright: This stylesheet has been placed in the public domain.
|
|
||||||
|
|
||||||
Default cascading style sheet for the HTML output of Docutils.
|
|
||||||
|
|
||||||
See http://docutils.sf.net/docs/howto/html-stylesheets.html for how to
|
|
||||||
customize this style sheet.
|
|
||||||
*/
|
|
||||||
|
|
||||||
/* used to remove borders from tables and images */
|
|
||||||
.borderless, table.borderless td, table.borderless th {
|
|
||||||
border: 0 }
|
|
||||||
|
|
||||||
table.borderless td, table.borderless th {
|
|
||||||
/* Override padding for "table.docutils td" with "! important".
|
|
||||||
The right padding separates the table cells. */
|
|
||||||
padding: 0 0.5em 0 0 ! important }
|
|
||||||
|
|
||||||
.first {
|
|
||||||
/* Override more specific margin styles with "! important". */
|
|
||||||
margin-top: 0 ! important }
|
|
||||||
|
|
||||||
.last, .with-subtitle {
|
|
||||||
margin-bottom: 0 ! important }
|
|
||||||
|
|
||||||
.hidden {
|
|
||||||
display: none }
|
|
||||||
|
|
||||||
a.toc-backref {
|
|
||||||
text-decoration: none ;
|
|
||||||
color: black }
|
|
||||||
|
|
||||||
blockquote.epigraph {
|
|
||||||
margin: 2em 5em ; }
|
|
||||||
|
|
||||||
dl.docutils dd {
|
|
||||||
margin-bottom: 0.5em }
|
|
||||||
|
|
||||||
/* Uncomment (and remove this text!) to get bold-faced definition list terms
|
|
||||||
dl.docutils dt {
|
|
||||||
font-weight: bold }
|
|
||||||
*/
|
|
||||||
|
|
||||||
div.abstract {
|
|
||||||
margin: 2em 5em }
|
|
||||||
|
|
||||||
div.abstract p.topic-title {
|
|
||||||
font-weight: bold ;
|
|
||||||
text-align: center }
|
|
||||||
|
|
||||||
div.admonition, div.attention, div.caution, div.danger, div.error,
|
|
||||||
div.hint, div.important, div.note, div.tip, div.warning {
|
|
||||||
margin: 2em ;
|
|
||||||
border: medium outset ;
|
|
||||||
padding: 1em }
|
|
||||||
|
|
||||||
div.admonition p.admonition-title, div.hint p.admonition-title,
|
|
||||||
div.important p.admonition-title, div.note p.admonition-title,
|
|
||||||
div.tip p.admonition-title {
|
|
||||||
font-weight: bold ;
|
|
||||||
font-family: sans-serif }
|
|
||||||
|
|
||||||
div.attention p.admonition-title, div.caution p.admonition-title,
|
|
||||||
div.danger p.admonition-title, div.error p.admonition-title,
|
|
||||||
div.warning p.admonition-title {
|
|
||||||
color: red ;
|
|
||||||
font-weight: bold ;
|
|
||||||
font-family: sans-serif }
|
|
||||||
|
|
||||||
/* Uncomment (and remove this text!) to get reduced vertical space in
|
|
||||||
compound paragraphs.
|
|
||||||
div.compound .compound-first, div.compound .compound-middle {
|
|
||||||
margin-bottom: 0.5em }
|
|
||||||
|
|
||||||
div.compound .compound-last, div.compound .compound-middle {
|
|
||||||
margin-top: 0.5em }
|
|
||||||
*/
|
|
||||||
|
|
||||||
div.dedication {
|
|
||||||
margin: 2em 5em ;
|
|
||||||
text-align: center ;
|
|
||||||
font-style: italic }
|
|
||||||
|
|
||||||
div.dedication p.topic-title {
|
|
||||||
font-weight: bold ;
|
|
||||||
font-style: normal }
|
|
||||||
|
|
||||||
div.figure {
|
|
||||||
margin-left: 2em ;
|
|
||||||
margin-right: 2em }
|
|
||||||
|
|
||||||
div.footer, div.header {
|
|
||||||
clear: both;
|
|
||||||
font-size: smaller }
|
|
||||||
|
|
||||||
div.line-block {
|
|
||||||
display: block ;
|
|
||||||
margin-top: 1em ;
|
|
||||||
margin-bottom: 1em }
|
|
||||||
|
|
||||||
div.line-block div.line-block {
|
|
||||||
margin-top: 0 ;
|
|
||||||
margin-bottom: 0 ;
|
|
||||||
margin-left: 1.5em }
|
|
||||||
|
|
||||||
div.sidebar {
|
|
||||||
margin-left: 1em ;
|
|
||||||
border: medium outset ;
|
|
||||||
padding: 1em ;
|
|
||||||
background-color: #ffffee ;
|
|
||||||
width: 40% ;
|
|
||||||
float: right ;
|
|
||||||
clear: right }
|
|
||||||
|
|
||||||
div.sidebar p.rubric {
|
|
||||||
font-family: sans-serif ;
|
|
||||||
font-size: medium }
|
|
||||||
|
|
||||||
div.system-messages {
|
|
||||||
margin: 5em }
|
|
||||||
|
|
||||||
div.system-messages h1 {
|
|
||||||
color: red }
|
|
||||||
|
|
||||||
div.system-message {
|
|
||||||
border: medium outset ;
|
|
||||||
padding: 1em }
|
|
||||||
|
|
||||||
div.system-message p.system-message-title {
|
|
||||||
color: red ;
|
|
||||||
font-weight: bold }
|
|
||||||
|
|
||||||
div.topic {
|
|
||||||
margin: 2em }
|
|
||||||
|
|
||||||
h1.section-subtitle, h2.section-subtitle, h3.section-subtitle,
|
|
||||||
h4.section-subtitle, h5.section-subtitle, h6.section-subtitle {
|
|
||||||
margin-top: 0.4em }
|
|
||||||
|
|
||||||
h1.title {
|
|
||||||
text-align: center }
|
|
||||||
|
|
||||||
h2.subtitle {
|
|
||||||
text-align: center }
|
|
||||||
|
|
||||||
hr.docutils {
|
|
||||||
width: 75% }
|
|
||||||
|
|
||||||
img.align-left {
|
|
||||||
clear: left }
|
|
||||||
|
|
||||||
img.align-right {
|
|
||||||
clear: right }
|
|
||||||
|
|
||||||
ol.simple, ul.simple {
|
|
||||||
margin-bottom: 1em }
|
|
||||||
|
|
||||||
ol.arabic {
|
|
||||||
list-style: decimal }
|
|
||||||
|
|
||||||
ol.loweralpha {
|
|
||||||
list-style: lower-alpha }
|
|
||||||
|
|
||||||
ol.upperalpha {
|
|
||||||
list-style: upper-alpha }
|
|
||||||
|
|
||||||
ol.lowerroman {
|
|
||||||
list-style: lower-roman }
|
|
||||||
|
|
||||||
ol.upperroman {
|
|
||||||
list-style: upper-roman }
|
|
||||||
|
|
||||||
p.attribution {
|
|
||||||
text-align: right ;
|
|
||||||
margin-left: 50% }
|
|
||||||
|
|
||||||
p.caption {
|
|
||||||
font-style: italic }
|
|
||||||
|
|
||||||
p.credits {
|
|
||||||
font-style: italic ;
|
|
||||||
font-size: smaller }
|
|
||||||
|
|
||||||
p.label {
|
|
||||||
white-space: nowrap }
|
|
||||||
|
|
||||||
p.rubric {
|
|
||||||
font-weight: bold ;
|
|
||||||
font-size: larger ;
|
|
||||||
color: maroon ;
|
|
||||||
text-align: center }
|
|
||||||
|
|
||||||
p.sidebar-title {
|
|
||||||
font-family: sans-serif ;
|
|
||||||
font-weight: bold ;
|
|
||||||
font-size: larger }
|
|
||||||
|
|
||||||
p.sidebar-subtitle {
|
|
||||||
font-family: sans-serif ;
|
|
||||||
font-weight: bold }
|
|
||||||
|
|
||||||
p.topic-title {
|
|
||||||
font-weight: bold }
|
|
||||||
|
|
||||||
pre.address {
|
|
||||||
margin-bottom: 0 ;
|
|
||||||
margin-top: 0 ;
|
|
||||||
font-family: serif ;
|
|
||||||
font-size: 100% }
|
|
||||||
|
|
||||||
pre.literal-block, pre.doctest-block {
|
|
||||||
margin-left: 2em ;
|
|
||||||
margin-right: 2em ;
|
|
||||||
background-color: #eeeeee }
|
|
||||||
|
|
||||||
span.classifier {
|
|
||||||
font-family: sans-serif ;
|
|
||||||
font-style: oblique }
|
|
||||||
|
|
||||||
span.classifier-delimiter {
|
|
||||||
font-family: sans-serif ;
|
|
||||||
font-weight: bold }
|
|
||||||
|
|
||||||
span.interpreted {
|
|
||||||
font-family: sans-serif }
|
|
||||||
|
|
||||||
span.option {
|
|
||||||
white-space: nowrap }
|
|
||||||
|
|
||||||
span.pre {
|
|
||||||
white-space: pre }
|
|
||||||
|
|
||||||
span.problematic {
|
|
||||||
color: red }
|
|
||||||
|
|
||||||
span.section-subtitle {
|
|
||||||
/* font-size relative to parent (h1..h6 element) */
|
|
||||||
font-size: 80% }
|
|
||||||
|
|
||||||
table.citation {
|
|
||||||
border-left: solid 1px gray;
|
|
||||||
margin-left: 1px }
|
|
||||||
|
|
||||||
table.docinfo {
|
|
||||||
margin: 2em 4em }
|
|
||||||
|
|
||||||
table.docutils {
|
|
||||||
margin-top: 0.5em ;
|
|
||||||
margin-bottom: 0.5em }
|
|
||||||
|
|
||||||
table.footnote {
|
|
||||||
border-left: solid 1px black;
|
|
||||||
margin-left: 1px }
|
|
||||||
|
|
||||||
table.docutils td, table.docutils th,
|
|
||||||
table.docinfo td, table.docinfo th {
|
|
||||||
padding-left: 0.5em ;
|
|
||||||
padding-right: 0.5em ;
|
|
||||||
vertical-align: top }
|
|
||||||
|
|
||||||
table.docutils th.field-name, table.docinfo th.docinfo-name {
|
|
||||||
font-weight: bold ;
|
|
||||||
text-align: left ;
|
|
||||||
white-space: nowrap ;
|
|
||||||
padding-left: 0 }
|
|
||||||
|
|
||||||
h1 tt.docutils, h2 tt.docutils, h3 tt.docutils,
|
|
||||||
h4 tt.docutils, h5 tt.docutils, h6 tt.docutils {
|
|
||||||
font-size: 100% }
|
|
||||||
|
|
||||||
tt.docutils {
|
|
||||||
background-color: #eeeeee }
|
|
||||||
|
|
||||||
ul.auto-toc {
|
|
||||||
list-style-type: none }
|
|
||||||
|
|
||||||
</style>
|
|
||||||
</head>
|
</head>
|
||||||
<body>
|
<body>
|
||||||
<div class="document" id="incrementable-iterator-concept">
|
<div class="document" id="incrementable-iterator-concept">
|
||||||
<h1 class="title">Incrementable Iterator Concept</h1>
|
<h1 class="title">Incrementable Iterator Concept</h1>
|
||||||
|
|
||||||
<!-- Copyright David Abrahams 2006. Distributed under the Boost -->
|
<!-- Copyright David Abrahams 2006. Distributed under the Boost -->
|
||||||
<!-- Software License, Version 1.0. (See accompanying -->
|
<!-- Software License, Version 1.0. (See accompanying -->
|
||||||
<!-- file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) -->
|
<!-- file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) -->
|
||||||
@ -336,6 +55,12 @@ stated semantics.</p>
|
|||||||
</tr>
|
</tr>
|
||||||
</tbody>
|
</tbody>
|
||||||
</table>
|
</table>
|
||||||
|
</div>
|
||||||
|
<div class="footer">
|
||||||
|
<hr class="footer" />
|
||||||
|
<a class="reference external" href="IncrementableIterator.rst">View document source</a>.
|
||||||
|
Generated by <a class="reference external" href="http://docutils.sourceforge.net/">Docutils</a> from <a class="reference external" href="http://docutils.sourceforge.net/rst.html">reStructuredText</a> source.
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
</body>
|
</body>
|
||||||
</html>
|
</html>
|
||||||
|
0
doc/IncrementableIterator.rst
Executable file → Normal file
0
doc/IncrementableIterator.rst
Executable file → Normal file
@ -4,17 +4,24 @@
|
|||||||
|
|
||||||
using quickbook ;
|
using quickbook ;
|
||||||
|
|
||||||
xml iterator
|
xml iterator
|
||||||
:
|
:
|
||||||
quickbook/iterator.qbk
|
quickbook/iterator.qbk
|
||||||
;
|
;
|
||||||
|
|
||||||
boostbook standalone
|
boostbook standalone
|
||||||
:
|
:
|
||||||
iterator
|
iterator
|
||||||
:
|
:
|
||||||
|
<xsl:param>"boost.root=../../../.."
|
||||||
<xsl:param>toc.max.depth=3
|
<xsl:param>toc.max.depth=3
|
||||||
<xsl:param>toc.section.depth=3
|
<xsl:param>toc.section.depth=3
|
||||||
<xsl:param>chunk.section.depth=4
|
<xsl:param>chunk.section.depth=2
|
||||||
|
<format>pdf:<xsl:param>"boost.url.prefix=http://www.boost.org/doc/libs/release/libs/iterator/doc/html"
|
||||||
;
|
;
|
||||||
|
|
||||||
|
###############################################################################
|
||||||
|
alias boostdoc ;
|
||||||
|
explicit boostdoc ;
|
||||||
|
alias boostrelease : standalone ;
|
||||||
|
explicit boostrelease ;
|
||||||
|
@ -3,295 +3,14 @@
|
|||||||
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
|
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
|
||||||
<head>
|
<head>
|
||||||
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
|
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
|
||||||
<meta name="generator" content="Docutils 0.4: http://docutils.sourceforge.net/" />
|
<meta name="generator" content="Docutils 0.5: http://docutils.sourceforge.net/" />
|
||||||
<title>Lvalue Iterator Concept</title>
|
<title>Lvalue Iterator Concept</title>
|
||||||
<style type="text/css">
|
<link rel="stylesheet" href="../../../rst.css" type="text/css" />
|
||||||
|
|
||||||
/*
|
|
||||||
:Author: David Goodger
|
|
||||||
:Contact: goodger@users.sourceforge.net
|
|
||||||
:Date: $Date$
|
|
||||||
:Revision: $Revision$
|
|
||||||
:Copyright: This stylesheet has been placed in the public domain.
|
|
||||||
|
|
||||||
Default cascading style sheet for the HTML output of Docutils.
|
|
||||||
|
|
||||||
See http://docutils.sf.net/docs/howto/html-stylesheets.html for how to
|
|
||||||
customize this style sheet.
|
|
||||||
*/
|
|
||||||
|
|
||||||
/* used to remove borders from tables and images */
|
|
||||||
.borderless, table.borderless td, table.borderless th {
|
|
||||||
border: 0 }
|
|
||||||
|
|
||||||
table.borderless td, table.borderless th {
|
|
||||||
/* Override padding for "table.docutils td" with "! important".
|
|
||||||
The right padding separates the table cells. */
|
|
||||||
padding: 0 0.5em 0 0 ! important }
|
|
||||||
|
|
||||||
.first {
|
|
||||||
/* Override more specific margin styles with "! important". */
|
|
||||||
margin-top: 0 ! important }
|
|
||||||
|
|
||||||
.last, .with-subtitle {
|
|
||||||
margin-bottom: 0 ! important }
|
|
||||||
|
|
||||||
.hidden {
|
|
||||||
display: none }
|
|
||||||
|
|
||||||
a.toc-backref {
|
|
||||||
text-decoration: none ;
|
|
||||||
color: black }
|
|
||||||
|
|
||||||
blockquote.epigraph {
|
|
||||||
margin: 2em 5em ; }
|
|
||||||
|
|
||||||
dl.docutils dd {
|
|
||||||
margin-bottom: 0.5em }
|
|
||||||
|
|
||||||
/* Uncomment (and remove this text!) to get bold-faced definition list terms
|
|
||||||
dl.docutils dt {
|
|
||||||
font-weight: bold }
|
|
||||||
*/
|
|
||||||
|
|
||||||
div.abstract {
|
|
||||||
margin: 2em 5em }
|
|
||||||
|
|
||||||
div.abstract p.topic-title {
|
|
||||||
font-weight: bold ;
|
|
||||||
text-align: center }
|
|
||||||
|
|
||||||
div.admonition, div.attention, div.caution, div.danger, div.error,
|
|
||||||
div.hint, div.important, div.note, div.tip, div.warning {
|
|
||||||
margin: 2em ;
|
|
||||||
border: medium outset ;
|
|
||||||
padding: 1em }
|
|
||||||
|
|
||||||
div.admonition p.admonition-title, div.hint p.admonition-title,
|
|
||||||
div.important p.admonition-title, div.note p.admonition-title,
|
|
||||||
div.tip p.admonition-title {
|
|
||||||
font-weight: bold ;
|
|
||||||
font-family: sans-serif }
|
|
||||||
|
|
||||||
div.attention p.admonition-title, div.caution p.admonition-title,
|
|
||||||
div.danger p.admonition-title, div.error p.admonition-title,
|
|
||||||
div.warning p.admonition-title {
|
|
||||||
color: red ;
|
|
||||||
font-weight: bold ;
|
|
||||||
font-family: sans-serif }
|
|
||||||
|
|
||||||
/* Uncomment (and remove this text!) to get reduced vertical space in
|
|
||||||
compound paragraphs.
|
|
||||||
div.compound .compound-first, div.compound .compound-middle {
|
|
||||||
margin-bottom: 0.5em }
|
|
||||||
|
|
||||||
div.compound .compound-last, div.compound .compound-middle {
|
|
||||||
margin-top: 0.5em }
|
|
||||||
*/
|
|
||||||
|
|
||||||
div.dedication {
|
|
||||||
margin: 2em 5em ;
|
|
||||||
text-align: center ;
|
|
||||||
font-style: italic }
|
|
||||||
|
|
||||||
div.dedication p.topic-title {
|
|
||||||
font-weight: bold ;
|
|
||||||
font-style: normal }
|
|
||||||
|
|
||||||
div.figure {
|
|
||||||
margin-left: 2em ;
|
|
||||||
margin-right: 2em }
|
|
||||||
|
|
||||||
div.footer, div.header {
|
|
||||||
clear: both;
|
|
||||||
font-size: smaller }
|
|
||||||
|
|
||||||
div.line-block {
|
|
||||||
display: block ;
|
|
||||||
margin-top: 1em ;
|
|
||||||
margin-bottom: 1em }
|
|
||||||
|
|
||||||
div.line-block div.line-block {
|
|
||||||
margin-top: 0 ;
|
|
||||||
margin-bottom: 0 ;
|
|
||||||
margin-left: 1.5em }
|
|
||||||
|
|
||||||
div.sidebar {
|
|
||||||
margin-left: 1em ;
|
|
||||||
border: medium outset ;
|
|
||||||
padding: 1em ;
|
|
||||||
background-color: #ffffee ;
|
|
||||||
width: 40% ;
|
|
||||||
float: right ;
|
|
||||||
clear: right }
|
|
||||||
|
|
||||||
div.sidebar p.rubric {
|
|
||||||
font-family: sans-serif ;
|
|
||||||
font-size: medium }
|
|
||||||
|
|
||||||
div.system-messages {
|
|
||||||
margin: 5em }
|
|
||||||
|
|
||||||
div.system-messages h1 {
|
|
||||||
color: red }
|
|
||||||
|
|
||||||
div.system-message {
|
|
||||||
border: medium outset ;
|
|
||||||
padding: 1em }
|
|
||||||
|
|
||||||
div.system-message p.system-message-title {
|
|
||||||
color: red ;
|
|
||||||
font-weight: bold }
|
|
||||||
|
|
||||||
div.topic {
|
|
||||||
margin: 2em }
|
|
||||||
|
|
||||||
h1.section-subtitle, h2.section-subtitle, h3.section-subtitle,
|
|
||||||
h4.section-subtitle, h5.section-subtitle, h6.section-subtitle {
|
|
||||||
margin-top: 0.4em }
|
|
||||||
|
|
||||||
h1.title {
|
|
||||||
text-align: center }
|
|
||||||
|
|
||||||
h2.subtitle {
|
|
||||||
text-align: center }
|
|
||||||
|
|
||||||
hr.docutils {
|
|
||||||
width: 75% }
|
|
||||||
|
|
||||||
img.align-left {
|
|
||||||
clear: left }
|
|
||||||
|
|
||||||
img.align-right {
|
|
||||||
clear: right }
|
|
||||||
|
|
||||||
ol.simple, ul.simple {
|
|
||||||
margin-bottom: 1em }
|
|
||||||
|
|
||||||
ol.arabic {
|
|
||||||
list-style: decimal }
|
|
||||||
|
|
||||||
ol.loweralpha {
|
|
||||||
list-style: lower-alpha }
|
|
||||||
|
|
||||||
ol.upperalpha {
|
|
||||||
list-style: upper-alpha }
|
|
||||||
|
|
||||||
ol.lowerroman {
|
|
||||||
list-style: lower-roman }
|
|
||||||
|
|
||||||
ol.upperroman {
|
|
||||||
list-style: upper-roman }
|
|
||||||
|
|
||||||
p.attribution {
|
|
||||||
text-align: right ;
|
|
||||||
margin-left: 50% }
|
|
||||||
|
|
||||||
p.caption {
|
|
||||||
font-style: italic }
|
|
||||||
|
|
||||||
p.credits {
|
|
||||||
font-style: italic ;
|
|
||||||
font-size: smaller }
|
|
||||||
|
|
||||||
p.label {
|
|
||||||
white-space: nowrap }
|
|
||||||
|
|
||||||
p.rubric {
|
|
||||||
font-weight: bold ;
|
|
||||||
font-size: larger ;
|
|
||||||
color: maroon ;
|
|
||||||
text-align: center }
|
|
||||||
|
|
||||||
p.sidebar-title {
|
|
||||||
font-family: sans-serif ;
|
|
||||||
font-weight: bold ;
|
|
||||||
font-size: larger }
|
|
||||||
|
|
||||||
p.sidebar-subtitle {
|
|
||||||
font-family: sans-serif ;
|
|
||||||
font-weight: bold }
|
|
||||||
|
|
||||||
p.topic-title {
|
|
||||||
font-weight: bold }
|
|
||||||
|
|
||||||
pre.address {
|
|
||||||
margin-bottom: 0 ;
|
|
||||||
margin-top: 0 ;
|
|
||||||
font-family: serif ;
|
|
||||||
font-size: 100% }
|
|
||||||
|
|
||||||
pre.literal-block, pre.doctest-block {
|
|
||||||
margin-left: 2em ;
|
|
||||||
margin-right: 2em ;
|
|
||||||
background-color: #eeeeee }
|
|
||||||
|
|
||||||
span.classifier {
|
|
||||||
font-family: sans-serif ;
|
|
||||||
font-style: oblique }
|
|
||||||
|
|
||||||
span.classifier-delimiter {
|
|
||||||
font-family: sans-serif ;
|
|
||||||
font-weight: bold }
|
|
||||||
|
|
||||||
span.interpreted {
|
|
||||||
font-family: sans-serif }
|
|
||||||
|
|
||||||
span.option {
|
|
||||||
white-space: nowrap }
|
|
||||||
|
|
||||||
span.pre {
|
|
||||||
white-space: pre }
|
|
||||||
|
|
||||||
span.problematic {
|
|
||||||
color: red }
|
|
||||||
|
|
||||||
span.section-subtitle {
|
|
||||||
/* font-size relative to parent (h1..h6 element) */
|
|
||||||
font-size: 80% }
|
|
||||||
|
|
||||||
table.citation {
|
|
||||||
border-left: solid 1px gray;
|
|
||||||
margin-left: 1px }
|
|
||||||
|
|
||||||
table.docinfo {
|
|
||||||
margin: 2em 4em }
|
|
||||||
|
|
||||||
table.docutils {
|
|
||||||
margin-top: 0.5em ;
|
|
||||||
margin-bottom: 0.5em }
|
|
||||||
|
|
||||||
table.footnote {
|
|
||||||
border-left: solid 1px black;
|
|
||||||
margin-left: 1px }
|
|
||||||
|
|
||||||
table.docutils td, table.docutils th,
|
|
||||||
table.docinfo td, table.docinfo th {
|
|
||||||
padding-left: 0.5em ;
|
|
||||||
padding-right: 0.5em ;
|
|
||||||
vertical-align: top }
|
|
||||||
|
|
||||||
table.docutils th.field-name, table.docinfo th.docinfo-name {
|
|
||||||
font-weight: bold ;
|
|
||||||
text-align: left ;
|
|
||||||
white-space: nowrap ;
|
|
||||||
padding-left: 0 }
|
|
||||||
|
|
||||||
h1 tt.docutils, h2 tt.docutils, h3 tt.docutils,
|
|
||||||
h4 tt.docutils, h5 tt.docutils, h6 tt.docutils {
|
|
||||||
font-size: 100% }
|
|
||||||
|
|
||||||
tt.docutils {
|
|
||||||
background-color: #eeeeee }
|
|
||||||
|
|
||||||
ul.auto-toc {
|
|
||||||
list-style-type: none }
|
|
||||||
|
|
||||||
</style>
|
|
||||||
</head>
|
</head>
|
||||||
<body>
|
<body>
|
||||||
<div class="document" id="lvalue-iterator-concept">
|
<div class="document" id="lvalue-iterator-concept">
|
||||||
<h1 class="title">Lvalue Iterator Concept</h1>
|
<h1 class="title">Lvalue Iterator Concept</h1>
|
||||||
|
|
||||||
<!-- Copyright David Abrahams 2006. Distributed under the Boost -->
|
<!-- Copyright David Abrahams 2006. Distributed under the Boost -->
|
||||||
<!-- Software License, Version 1.0. (See accompanying -->
|
<!-- Software License, Version 1.0. (See accompanying -->
|
||||||
<!-- file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) -->
|
<!-- file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) -->
|
||||||
@ -326,6 +45,12 @@ equivalent to <tt class="docutils literal"><span class="pre">*b</span></tt>.</td
|
|||||||
</tr>
|
</tr>
|
||||||
</tbody>
|
</tbody>
|
||||||
</table>
|
</table>
|
||||||
|
</div>
|
||||||
|
<div class="footer">
|
||||||
|
<hr class="footer" />
|
||||||
|
<a class="reference external" href="LvalueIterator.rst">View document source</a>.
|
||||||
|
Generated by <a class="reference external" href="http://docutils.sourceforge.net/">Docutils</a> from <a class="reference external" href="http://docutils.sourceforge.net/rst.html">reStructuredText</a> source.
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
</body>
|
</body>
|
||||||
</html>
|
</html>
|
||||||
|
0
doc/LvalueIterator.rst
Executable file → Normal file
0
doc/LvalueIterator.rst
Executable file → Normal file
@ -3,295 +3,14 @@
|
|||||||
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
|
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
|
||||||
<head>
|
<head>
|
||||||
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
|
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
|
||||||
<meta name="generator" content="Docutils 0.4: http://docutils.sourceforge.net/" />
|
<meta name="generator" content="Docutils 0.5: http://docutils.sourceforge.net/" />
|
||||||
<title>Random Access Traversal Concept</title>
|
<title>Random Access Traversal Concept</title>
|
||||||
<style type="text/css">
|
<link rel="stylesheet" href="../../../rst.css" type="text/css" />
|
||||||
|
|
||||||
/*
|
|
||||||
:Author: David Goodger
|
|
||||||
:Contact: goodger@users.sourceforge.net
|
|
||||||
:Date: $Date$
|
|
||||||
:Revision: $Revision$
|
|
||||||
:Copyright: This stylesheet has been placed in the public domain.
|
|
||||||
|
|
||||||
Default cascading style sheet for the HTML output of Docutils.
|
|
||||||
|
|
||||||
See http://docutils.sf.net/docs/howto/html-stylesheets.html for how to
|
|
||||||
customize this style sheet.
|
|
||||||
*/
|
|
||||||
|
|
||||||
/* used to remove borders from tables and images */
|
|
||||||
.borderless, table.borderless td, table.borderless th {
|
|
||||||
border: 0 }
|
|
||||||
|
|
||||||
table.borderless td, table.borderless th {
|
|
||||||
/* Override padding for "table.docutils td" with "! important".
|
|
||||||
The right padding separates the table cells. */
|
|
||||||
padding: 0 0.5em 0 0 ! important }
|
|
||||||
|
|
||||||
.first {
|
|
||||||
/* Override more specific margin styles with "! important". */
|
|
||||||
margin-top: 0 ! important }
|
|
||||||
|
|
||||||
.last, .with-subtitle {
|
|
||||||
margin-bottom: 0 ! important }
|
|
||||||
|
|
||||||
.hidden {
|
|
||||||
display: none }
|
|
||||||
|
|
||||||
a.toc-backref {
|
|
||||||
text-decoration: none ;
|
|
||||||
color: black }
|
|
||||||
|
|
||||||
blockquote.epigraph {
|
|
||||||
margin: 2em 5em ; }
|
|
||||||
|
|
||||||
dl.docutils dd {
|
|
||||||
margin-bottom: 0.5em }
|
|
||||||
|
|
||||||
/* Uncomment (and remove this text!) to get bold-faced definition list terms
|
|
||||||
dl.docutils dt {
|
|
||||||
font-weight: bold }
|
|
||||||
*/
|
|
||||||
|
|
||||||
div.abstract {
|
|
||||||
margin: 2em 5em }
|
|
||||||
|
|
||||||
div.abstract p.topic-title {
|
|
||||||
font-weight: bold ;
|
|
||||||
text-align: center }
|
|
||||||
|
|
||||||
div.admonition, div.attention, div.caution, div.danger, div.error,
|
|
||||||
div.hint, div.important, div.note, div.tip, div.warning {
|
|
||||||
margin: 2em ;
|
|
||||||
border: medium outset ;
|
|
||||||
padding: 1em }
|
|
||||||
|
|
||||||
div.admonition p.admonition-title, div.hint p.admonition-title,
|
|
||||||
div.important p.admonition-title, div.note p.admonition-title,
|
|
||||||
div.tip p.admonition-title {
|
|
||||||
font-weight: bold ;
|
|
||||||
font-family: sans-serif }
|
|
||||||
|
|
||||||
div.attention p.admonition-title, div.caution p.admonition-title,
|
|
||||||
div.danger p.admonition-title, div.error p.admonition-title,
|
|
||||||
div.warning p.admonition-title {
|
|
||||||
color: red ;
|
|
||||||
font-weight: bold ;
|
|
||||||
font-family: sans-serif }
|
|
||||||
|
|
||||||
/* Uncomment (and remove this text!) to get reduced vertical space in
|
|
||||||
compound paragraphs.
|
|
||||||
div.compound .compound-first, div.compound .compound-middle {
|
|
||||||
margin-bottom: 0.5em }
|
|
||||||
|
|
||||||
div.compound .compound-last, div.compound .compound-middle {
|
|
||||||
margin-top: 0.5em }
|
|
||||||
*/
|
|
||||||
|
|
||||||
div.dedication {
|
|
||||||
margin: 2em 5em ;
|
|
||||||
text-align: center ;
|
|
||||||
font-style: italic }
|
|
||||||
|
|
||||||
div.dedication p.topic-title {
|
|
||||||
font-weight: bold ;
|
|
||||||
font-style: normal }
|
|
||||||
|
|
||||||
div.figure {
|
|
||||||
margin-left: 2em ;
|
|
||||||
margin-right: 2em }
|
|
||||||
|
|
||||||
div.footer, div.header {
|
|
||||||
clear: both;
|
|
||||||
font-size: smaller }
|
|
||||||
|
|
||||||
div.line-block {
|
|
||||||
display: block ;
|
|
||||||
margin-top: 1em ;
|
|
||||||
margin-bottom: 1em }
|
|
||||||
|
|
||||||
div.line-block div.line-block {
|
|
||||||
margin-top: 0 ;
|
|
||||||
margin-bottom: 0 ;
|
|
||||||
margin-left: 1.5em }
|
|
||||||
|
|
||||||
div.sidebar {
|
|
||||||
margin-left: 1em ;
|
|
||||||
border: medium outset ;
|
|
||||||
padding: 1em ;
|
|
||||||
background-color: #ffffee ;
|
|
||||||
width: 40% ;
|
|
||||||
float: right ;
|
|
||||||
clear: right }
|
|
||||||
|
|
||||||
div.sidebar p.rubric {
|
|
||||||
font-family: sans-serif ;
|
|
||||||
font-size: medium }
|
|
||||||
|
|
||||||
div.system-messages {
|
|
||||||
margin: 5em }
|
|
||||||
|
|
||||||
div.system-messages h1 {
|
|
||||||
color: red }
|
|
||||||
|
|
||||||
div.system-message {
|
|
||||||
border: medium outset ;
|
|
||||||
padding: 1em }
|
|
||||||
|
|
||||||
div.system-message p.system-message-title {
|
|
||||||
color: red ;
|
|
||||||
font-weight: bold }
|
|
||||||
|
|
||||||
div.topic {
|
|
||||||
margin: 2em }
|
|
||||||
|
|
||||||
h1.section-subtitle, h2.section-subtitle, h3.section-subtitle,
|
|
||||||
h4.section-subtitle, h5.section-subtitle, h6.section-subtitle {
|
|
||||||
margin-top: 0.4em }
|
|
||||||
|
|
||||||
h1.title {
|
|
||||||
text-align: center }
|
|
||||||
|
|
||||||
h2.subtitle {
|
|
||||||
text-align: center }
|
|
||||||
|
|
||||||
hr.docutils {
|
|
||||||
width: 75% }
|
|
||||||
|
|
||||||
img.align-left {
|
|
||||||
clear: left }
|
|
||||||
|
|
||||||
img.align-right {
|
|
||||||
clear: right }
|
|
||||||
|
|
||||||
ol.simple, ul.simple {
|
|
||||||
margin-bottom: 1em }
|
|
||||||
|
|
||||||
ol.arabic {
|
|
||||||
list-style: decimal }
|
|
||||||
|
|
||||||
ol.loweralpha {
|
|
||||||
list-style: lower-alpha }
|
|
||||||
|
|
||||||
ol.upperalpha {
|
|
||||||
list-style: upper-alpha }
|
|
||||||
|
|
||||||
ol.lowerroman {
|
|
||||||
list-style: lower-roman }
|
|
||||||
|
|
||||||
ol.upperroman {
|
|
||||||
list-style: upper-roman }
|
|
||||||
|
|
||||||
p.attribution {
|
|
||||||
text-align: right ;
|
|
||||||
margin-left: 50% }
|
|
||||||
|
|
||||||
p.caption {
|
|
||||||
font-style: italic }
|
|
||||||
|
|
||||||
p.credits {
|
|
||||||
font-style: italic ;
|
|
||||||
font-size: smaller }
|
|
||||||
|
|
||||||
p.label {
|
|
||||||
white-space: nowrap }
|
|
||||||
|
|
||||||
p.rubric {
|
|
||||||
font-weight: bold ;
|
|
||||||
font-size: larger ;
|
|
||||||
color: maroon ;
|
|
||||||
text-align: center }
|
|
||||||
|
|
||||||
p.sidebar-title {
|
|
||||||
font-family: sans-serif ;
|
|
||||||
font-weight: bold ;
|
|
||||||
font-size: larger }
|
|
||||||
|
|
||||||
p.sidebar-subtitle {
|
|
||||||
font-family: sans-serif ;
|
|
||||||
font-weight: bold }
|
|
||||||
|
|
||||||
p.topic-title {
|
|
||||||
font-weight: bold }
|
|
||||||
|
|
||||||
pre.address {
|
|
||||||
margin-bottom: 0 ;
|
|
||||||
margin-top: 0 ;
|
|
||||||
font-family: serif ;
|
|
||||||
font-size: 100% }
|
|
||||||
|
|
||||||
pre.literal-block, pre.doctest-block {
|
|
||||||
margin-left: 2em ;
|
|
||||||
margin-right: 2em ;
|
|
||||||
background-color: #eeeeee }
|
|
||||||
|
|
||||||
span.classifier {
|
|
||||||
font-family: sans-serif ;
|
|
||||||
font-style: oblique }
|
|
||||||
|
|
||||||
span.classifier-delimiter {
|
|
||||||
font-family: sans-serif ;
|
|
||||||
font-weight: bold }
|
|
||||||
|
|
||||||
span.interpreted {
|
|
||||||
font-family: sans-serif }
|
|
||||||
|
|
||||||
span.option {
|
|
||||||
white-space: nowrap }
|
|
||||||
|
|
||||||
span.pre {
|
|
||||||
white-space: pre }
|
|
||||||
|
|
||||||
span.problematic {
|
|
||||||
color: red }
|
|
||||||
|
|
||||||
span.section-subtitle {
|
|
||||||
/* font-size relative to parent (h1..h6 element) */
|
|
||||||
font-size: 80% }
|
|
||||||
|
|
||||||
table.citation {
|
|
||||||
border-left: solid 1px gray;
|
|
||||||
margin-left: 1px }
|
|
||||||
|
|
||||||
table.docinfo {
|
|
||||||
margin: 2em 4em }
|
|
||||||
|
|
||||||
table.docutils {
|
|
||||||
margin-top: 0.5em ;
|
|
||||||
margin-bottom: 0.5em }
|
|
||||||
|
|
||||||
table.footnote {
|
|
||||||
border-left: solid 1px black;
|
|
||||||
margin-left: 1px }
|
|
||||||
|
|
||||||
table.docutils td, table.docutils th,
|
|
||||||
table.docinfo td, table.docinfo th {
|
|
||||||
padding-left: 0.5em ;
|
|
||||||
padding-right: 0.5em ;
|
|
||||||
vertical-align: top }
|
|
||||||
|
|
||||||
table.docutils th.field-name, table.docinfo th.docinfo-name {
|
|
||||||
font-weight: bold ;
|
|
||||||
text-align: left ;
|
|
||||||
white-space: nowrap ;
|
|
||||||
padding-left: 0 }
|
|
||||||
|
|
||||||
h1 tt.docutils, h2 tt.docutils, h3 tt.docutils,
|
|
||||||
h4 tt.docutils, h5 tt.docutils, h6 tt.docutils {
|
|
||||||
font-size: 100% }
|
|
||||||
|
|
||||||
tt.docutils {
|
|
||||||
background-color: #eeeeee }
|
|
||||||
|
|
||||||
ul.auto-toc {
|
|
||||||
list-style-type: none }
|
|
||||||
|
|
||||||
</style>
|
|
||||||
</head>
|
</head>
|
||||||
<body>
|
<body>
|
||||||
<div class="document" id="random-access-traversal-concept">
|
<div class="document" id="random-access-traversal-concept">
|
||||||
<h1 class="title">Random Access Traversal Concept</h1>
|
<h1 class="title">Random Access Traversal Concept</h1>
|
||||||
|
|
||||||
<!-- Copyright David Abrahams 2006. Distributed under the Boost -->
|
<!-- Copyright David Abrahams 2006. Distributed under the Boost -->
|
||||||
<!-- Software License, Version 1.0. (See accompanying -->
|
<!-- Software License, Version 1.0. (See accompanying -->
|
||||||
<!-- file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) -->
|
<!-- file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) -->
|
||||||
@ -404,6 +123,12 @@ ordering relation</td>
|
|||||||
</tr>
|
</tr>
|
||||||
</tbody>
|
</tbody>
|
||||||
</table>
|
</table>
|
||||||
|
</div>
|
||||||
|
<div class="footer">
|
||||||
|
<hr class="footer" />
|
||||||
|
<a class="reference external" href="RandomAccessTraversal.rst">View document source</a>.
|
||||||
|
Generated by <a class="reference external" href="http://docutils.sourceforge.net/">Docutils</a> from <a class="reference external" href="http://docutils.sourceforge.net/rst.html">reStructuredText</a> source.
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
</body>
|
</body>
|
||||||
</html>
|
</html>
|
||||||
|
@ -3,295 +3,14 @@
|
|||||||
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
|
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
|
||||||
<head>
|
<head>
|
||||||
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
|
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
|
||||||
<meta name="generator" content="Docutils 0.4: http://docutils.sourceforge.net/" />
|
<meta name="generator" content="Docutils 0.5: http://docutils.sourceforge.net/" />
|
||||||
<title>Readable Iterator Concept</title>
|
<title>Readable Iterator Concept</title>
|
||||||
<style type="text/css">
|
<link rel="stylesheet" href="../../../rst.css" type="text/css" />
|
||||||
|
|
||||||
/*
|
|
||||||
:Author: David Goodger
|
|
||||||
:Contact: goodger@users.sourceforge.net
|
|
||||||
:Date: $Date$
|
|
||||||
:Revision: $Revision$
|
|
||||||
:Copyright: This stylesheet has been placed in the public domain.
|
|
||||||
|
|
||||||
Default cascading style sheet for the HTML output of Docutils.
|
|
||||||
|
|
||||||
See http://docutils.sf.net/docs/howto/html-stylesheets.html for how to
|
|
||||||
customize this style sheet.
|
|
||||||
*/
|
|
||||||
|
|
||||||
/* used to remove borders from tables and images */
|
|
||||||
.borderless, table.borderless td, table.borderless th {
|
|
||||||
border: 0 }
|
|
||||||
|
|
||||||
table.borderless td, table.borderless th {
|
|
||||||
/* Override padding for "table.docutils td" with "! important".
|
|
||||||
The right padding separates the table cells. */
|
|
||||||
padding: 0 0.5em 0 0 ! important }
|
|
||||||
|
|
||||||
.first {
|
|
||||||
/* Override more specific margin styles with "! important". */
|
|
||||||
margin-top: 0 ! important }
|
|
||||||
|
|
||||||
.last, .with-subtitle {
|
|
||||||
margin-bottom: 0 ! important }
|
|
||||||
|
|
||||||
.hidden {
|
|
||||||
display: none }
|
|
||||||
|
|
||||||
a.toc-backref {
|
|
||||||
text-decoration: none ;
|
|
||||||
color: black }
|
|
||||||
|
|
||||||
blockquote.epigraph {
|
|
||||||
margin: 2em 5em ; }
|
|
||||||
|
|
||||||
dl.docutils dd {
|
|
||||||
margin-bottom: 0.5em }
|
|
||||||
|
|
||||||
/* Uncomment (and remove this text!) to get bold-faced definition list terms
|
|
||||||
dl.docutils dt {
|
|
||||||
font-weight: bold }
|
|
||||||
*/
|
|
||||||
|
|
||||||
div.abstract {
|
|
||||||
margin: 2em 5em }
|
|
||||||
|
|
||||||
div.abstract p.topic-title {
|
|
||||||
font-weight: bold ;
|
|
||||||
text-align: center }
|
|
||||||
|
|
||||||
div.admonition, div.attention, div.caution, div.danger, div.error,
|
|
||||||
div.hint, div.important, div.note, div.tip, div.warning {
|
|
||||||
margin: 2em ;
|
|
||||||
border: medium outset ;
|
|
||||||
padding: 1em }
|
|
||||||
|
|
||||||
div.admonition p.admonition-title, div.hint p.admonition-title,
|
|
||||||
div.important p.admonition-title, div.note p.admonition-title,
|
|
||||||
div.tip p.admonition-title {
|
|
||||||
font-weight: bold ;
|
|
||||||
font-family: sans-serif }
|
|
||||||
|
|
||||||
div.attention p.admonition-title, div.caution p.admonition-title,
|
|
||||||
div.danger p.admonition-title, div.error p.admonition-title,
|
|
||||||
div.warning p.admonition-title {
|
|
||||||
color: red ;
|
|
||||||
font-weight: bold ;
|
|
||||||
font-family: sans-serif }
|
|
||||||
|
|
||||||
/* Uncomment (and remove this text!) to get reduced vertical space in
|
|
||||||
compound paragraphs.
|
|
||||||
div.compound .compound-first, div.compound .compound-middle {
|
|
||||||
margin-bottom: 0.5em }
|
|
||||||
|
|
||||||
div.compound .compound-last, div.compound .compound-middle {
|
|
||||||
margin-top: 0.5em }
|
|
||||||
*/
|
|
||||||
|
|
||||||
div.dedication {
|
|
||||||
margin: 2em 5em ;
|
|
||||||
text-align: center ;
|
|
||||||
font-style: italic }
|
|
||||||
|
|
||||||
div.dedication p.topic-title {
|
|
||||||
font-weight: bold ;
|
|
||||||
font-style: normal }
|
|
||||||
|
|
||||||
div.figure {
|
|
||||||
margin-left: 2em ;
|
|
||||||
margin-right: 2em }
|
|
||||||
|
|
||||||
div.footer, div.header {
|
|
||||||
clear: both;
|
|
||||||
font-size: smaller }
|
|
||||||
|
|
||||||
div.line-block {
|
|
||||||
display: block ;
|
|
||||||
margin-top: 1em ;
|
|
||||||
margin-bottom: 1em }
|
|
||||||
|
|
||||||
div.line-block div.line-block {
|
|
||||||
margin-top: 0 ;
|
|
||||||
margin-bottom: 0 ;
|
|
||||||
margin-left: 1.5em }
|
|
||||||
|
|
||||||
div.sidebar {
|
|
||||||
margin-left: 1em ;
|
|
||||||
border: medium outset ;
|
|
||||||
padding: 1em ;
|
|
||||||
background-color: #ffffee ;
|
|
||||||
width: 40% ;
|
|
||||||
float: right ;
|
|
||||||
clear: right }
|
|
||||||
|
|
||||||
div.sidebar p.rubric {
|
|
||||||
font-family: sans-serif ;
|
|
||||||
font-size: medium }
|
|
||||||
|
|
||||||
div.system-messages {
|
|
||||||
margin: 5em }
|
|
||||||
|
|
||||||
div.system-messages h1 {
|
|
||||||
color: red }
|
|
||||||
|
|
||||||
div.system-message {
|
|
||||||
border: medium outset ;
|
|
||||||
padding: 1em }
|
|
||||||
|
|
||||||
div.system-message p.system-message-title {
|
|
||||||
color: red ;
|
|
||||||
font-weight: bold }
|
|
||||||
|
|
||||||
div.topic {
|
|
||||||
margin: 2em }
|
|
||||||
|
|
||||||
h1.section-subtitle, h2.section-subtitle, h3.section-subtitle,
|
|
||||||
h4.section-subtitle, h5.section-subtitle, h6.section-subtitle {
|
|
||||||
margin-top: 0.4em }
|
|
||||||
|
|
||||||
h1.title {
|
|
||||||
text-align: center }
|
|
||||||
|
|
||||||
h2.subtitle {
|
|
||||||
text-align: center }
|
|
||||||
|
|
||||||
hr.docutils {
|
|
||||||
width: 75% }
|
|
||||||
|
|
||||||
img.align-left {
|
|
||||||
clear: left }
|
|
||||||
|
|
||||||
img.align-right {
|
|
||||||
clear: right }
|
|
||||||
|
|
||||||
ol.simple, ul.simple {
|
|
||||||
margin-bottom: 1em }
|
|
||||||
|
|
||||||
ol.arabic {
|
|
||||||
list-style: decimal }
|
|
||||||
|
|
||||||
ol.loweralpha {
|
|
||||||
list-style: lower-alpha }
|
|
||||||
|
|
||||||
ol.upperalpha {
|
|
||||||
list-style: upper-alpha }
|
|
||||||
|
|
||||||
ol.lowerroman {
|
|
||||||
list-style: lower-roman }
|
|
||||||
|
|
||||||
ol.upperroman {
|
|
||||||
list-style: upper-roman }
|
|
||||||
|
|
||||||
p.attribution {
|
|
||||||
text-align: right ;
|
|
||||||
margin-left: 50% }
|
|
||||||
|
|
||||||
p.caption {
|
|
||||||
font-style: italic }
|
|
||||||
|
|
||||||
p.credits {
|
|
||||||
font-style: italic ;
|
|
||||||
font-size: smaller }
|
|
||||||
|
|
||||||
p.label {
|
|
||||||
white-space: nowrap }
|
|
||||||
|
|
||||||
p.rubric {
|
|
||||||
font-weight: bold ;
|
|
||||||
font-size: larger ;
|
|
||||||
color: maroon ;
|
|
||||||
text-align: center }
|
|
||||||
|
|
||||||
p.sidebar-title {
|
|
||||||
font-family: sans-serif ;
|
|
||||||
font-weight: bold ;
|
|
||||||
font-size: larger }
|
|
||||||
|
|
||||||
p.sidebar-subtitle {
|
|
||||||
font-family: sans-serif ;
|
|
||||||
font-weight: bold }
|
|
||||||
|
|
||||||
p.topic-title {
|
|
||||||
font-weight: bold }
|
|
||||||
|
|
||||||
pre.address {
|
|
||||||
margin-bottom: 0 ;
|
|
||||||
margin-top: 0 ;
|
|
||||||
font-family: serif ;
|
|
||||||
font-size: 100% }
|
|
||||||
|
|
||||||
pre.literal-block, pre.doctest-block {
|
|
||||||
margin-left: 2em ;
|
|
||||||
margin-right: 2em ;
|
|
||||||
background-color: #eeeeee }
|
|
||||||
|
|
||||||
span.classifier {
|
|
||||||
font-family: sans-serif ;
|
|
||||||
font-style: oblique }
|
|
||||||
|
|
||||||
span.classifier-delimiter {
|
|
||||||
font-family: sans-serif ;
|
|
||||||
font-weight: bold }
|
|
||||||
|
|
||||||
span.interpreted {
|
|
||||||
font-family: sans-serif }
|
|
||||||
|
|
||||||
span.option {
|
|
||||||
white-space: nowrap }
|
|
||||||
|
|
||||||
span.pre {
|
|
||||||
white-space: pre }
|
|
||||||
|
|
||||||
span.problematic {
|
|
||||||
color: red }
|
|
||||||
|
|
||||||
span.section-subtitle {
|
|
||||||
/* font-size relative to parent (h1..h6 element) */
|
|
||||||
font-size: 80% }
|
|
||||||
|
|
||||||
table.citation {
|
|
||||||
border-left: solid 1px gray;
|
|
||||||
margin-left: 1px }
|
|
||||||
|
|
||||||
table.docinfo {
|
|
||||||
margin: 2em 4em }
|
|
||||||
|
|
||||||
table.docutils {
|
|
||||||
margin-top: 0.5em ;
|
|
||||||
margin-bottom: 0.5em }
|
|
||||||
|
|
||||||
table.footnote {
|
|
||||||
border-left: solid 1px black;
|
|
||||||
margin-left: 1px }
|
|
||||||
|
|
||||||
table.docutils td, table.docutils th,
|
|
||||||
table.docinfo td, table.docinfo th {
|
|
||||||
padding-left: 0.5em ;
|
|
||||||
padding-right: 0.5em ;
|
|
||||||
vertical-align: top }
|
|
||||||
|
|
||||||
table.docutils th.field-name, table.docinfo th.docinfo-name {
|
|
||||||
font-weight: bold ;
|
|
||||||
text-align: left ;
|
|
||||||
white-space: nowrap ;
|
|
||||||
padding-left: 0 }
|
|
||||||
|
|
||||||
h1 tt.docutils, h2 tt.docutils, h3 tt.docutils,
|
|
||||||
h4 tt.docutils, h5 tt.docutils, h6 tt.docutils {
|
|
||||||
font-size: 100% }
|
|
||||||
|
|
||||||
tt.docutils {
|
|
||||||
background-color: #eeeeee }
|
|
||||||
|
|
||||||
ul.auto-toc {
|
|
||||||
list-style-type: none }
|
|
||||||
|
|
||||||
</style>
|
|
||||||
</head>
|
</head>
|
||||||
<body>
|
<body>
|
||||||
<div class="document" id="readable-iterator-concept">
|
<div class="document" id="readable-iterator-concept">
|
||||||
<h1 class="title">Readable Iterator Concept</h1>
|
<h1 class="title">Readable Iterator Concept</h1>
|
||||||
|
|
||||||
<!-- Copyright David Abrahams 2006. Distributed under the Boost -->
|
<!-- Copyright David Abrahams 2006. Distributed under the Boost -->
|
||||||
<!-- Software License, Version 1.0. (See accompanying -->
|
<!-- Software License, Version 1.0. (See accompanying -->
|
||||||
<!-- file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) -->
|
<!-- file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) -->
|
||||||
@ -334,6 +53,12 @@ non-cv-qualified type</td>
|
|||||||
</tr>
|
</tr>
|
||||||
</tbody>
|
</tbody>
|
||||||
</table>
|
</table>
|
||||||
|
</div>
|
||||||
|
<div class="footer">
|
||||||
|
<hr class="footer" />
|
||||||
|
<a class="reference external" href="ReadableIterator.rst">View document source</a>.
|
||||||
|
Generated by <a class="reference external" href="http://docutils.sourceforge.net/">Docutils</a> from <a class="reference external" href="http://docutils.sourceforge.net/rst.html">reStructuredText</a> source.
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
</body>
|
</body>
|
||||||
</html>
|
</html>
|
||||||
|
0
doc/ReadableIterator.rst
Executable file → Normal file
0
doc/ReadableIterator.rst
Executable file → Normal file
@ -3,295 +3,14 @@
|
|||||||
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
|
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
|
||||||
<head>
|
<head>
|
||||||
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
|
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
|
||||||
<meta name="generator" content="Docutils 0.4: http://docutils.sourceforge.net/" />
|
<meta name="generator" content="Docutils 0.5: http://docutils.sourceforge.net/" />
|
||||||
<title>Single Pass Iterator Concept</title>
|
<title>Single Pass Iterator Concept</title>
|
||||||
<style type="text/css">
|
<link rel="stylesheet" href="../../../rst.css" type="text/css" />
|
||||||
|
|
||||||
/*
|
|
||||||
:Author: David Goodger
|
|
||||||
:Contact: goodger@users.sourceforge.net
|
|
||||||
:Date: $Date$
|
|
||||||
:Revision: $Revision$
|
|
||||||
:Copyright: This stylesheet has been placed in the public domain.
|
|
||||||
|
|
||||||
Default cascading style sheet for the HTML output of Docutils.
|
|
||||||
|
|
||||||
See http://docutils.sf.net/docs/howto/html-stylesheets.html for how to
|
|
||||||
customize this style sheet.
|
|
||||||
*/
|
|
||||||
|
|
||||||
/* used to remove borders from tables and images */
|
|
||||||
.borderless, table.borderless td, table.borderless th {
|
|
||||||
border: 0 }
|
|
||||||
|
|
||||||
table.borderless td, table.borderless th {
|
|
||||||
/* Override padding for "table.docutils td" with "! important".
|
|
||||||
The right padding separates the table cells. */
|
|
||||||
padding: 0 0.5em 0 0 ! important }
|
|
||||||
|
|
||||||
.first {
|
|
||||||
/* Override more specific margin styles with "! important". */
|
|
||||||
margin-top: 0 ! important }
|
|
||||||
|
|
||||||
.last, .with-subtitle {
|
|
||||||
margin-bottom: 0 ! important }
|
|
||||||
|
|
||||||
.hidden {
|
|
||||||
display: none }
|
|
||||||
|
|
||||||
a.toc-backref {
|
|
||||||
text-decoration: none ;
|
|
||||||
color: black }
|
|
||||||
|
|
||||||
blockquote.epigraph {
|
|
||||||
margin: 2em 5em ; }
|
|
||||||
|
|
||||||
dl.docutils dd {
|
|
||||||
margin-bottom: 0.5em }
|
|
||||||
|
|
||||||
/* Uncomment (and remove this text!) to get bold-faced definition list terms
|
|
||||||
dl.docutils dt {
|
|
||||||
font-weight: bold }
|
|
||||||
*/
|
|
||||||
|
|
||||||
div.abstract {
|
|
||||||
margin: 2em 5em }
|
|
||||||
|
|
||||||
div.abstract p.topic-title {
|
|
||||||
font-weight: bold ;
|
|
||||||
text-align: center }
|
|
||||||
|
|
||||||
div.admonition, div.attention, div.caution, div.danger, div.error,
|
|
||||||
div.hint, div.important, div.note, div.tip, div.warning {
|
|
||||||
margin: 2em ;
|
|
||||||
border: medium outset ;
|
|
||||||
padding: 1em }
|
|
||||||
|
|
||||||
div.admonition p.admonition-title, div.hint p.admonition-title,
|
|
||||||
div.important p.admonition-title, div.note p.admonition-title,
|
|
||||||
div.tip p.admonition-title {
|
|
||||||
font-weight: bold ;
|
|
||||||
font-family: sans-serif }
|
|
||||||
|
|
||||||
div.attention p.admonition-title, div.caution p.admonition-title,
|
|
||||||
div.danger p.admonition-title, div.error p.admonition-title,
|
|
||||||
div.warning p.admonition-title {
|
|
||||||
color: red ;
|
|
||||||
font-weight: bold ;
|
|
||||||
font-family: sans-serif }
|
|
||||||
|
|
||||||
/* Uncomment (and remove this text!) to get reduced vertical space in
|
|
||||||
compound paragraphs.
|
|
||||||
div.compound .compound-first, div.compound .compound-middle {
|
|
||||||
margin-bottom: 0.5em }
|
|
||||||
|
|
||||||
div.compound .compound-last, div.compound .compound-middle {
|
|
||||||
margin-top: 0.5em }
|
|
||||||
*/
|
|
||||||
|
|
||||||
div.dedication {
|
|
||||||
margin: 2em 5em ;
|
|
||||||
text-align: center ;
|
|
||||||
font-style: italic }
|
|
||||||
|
|
||||||
div.dedication p.topic-title {
|
|
||||||
font-weight: bold ;
|
|
||||||
font-style: normal }
|
|
||||||
|
|
||||||
div.figure {
|
|
||||||
margin-left: 2em ;
|
|
||||||
margin-right: 2em }
|
|
||||||
|
|
||||||
div.footer, div.header {
|
|
||||||
clear: both;
|
|
||||||
font-size: smaller }
|
|
||||||
|
|
||||||
div.line-block {
|
|
||||||
display: block ;
|
|
||||||
margin-top: 1em ;
|
|
||||||
margin-bottom: 1em }
|
|
||||||
|
|
||||||
div.line-block div.line-block {
|
|
||||||
margin-top: 0 ;
|
|
||||||
margin-bottom: 0 ;
|
|
||||||
margin-left: 1.5em }
|
|
||||||
|
|
||||||
div.sidebar {
|
|
||||||
margin-left: 1em ;
|
|
||||||
border: medium outset ;
|
|
||||||
padding: 1em ;
|
|
||||||
background-color: #ffffee ;
|
|
||||||
width: 40% ;
|
|
||||||
float: right ;
|
|
||||||
clear: right }
|
|
||||||
|
|
||||||
div.sidebar p.rubric {
|
|
||||||
font-family: sans-serif ;
|
|
||||||
font-size: medium }
|
|
||||||
|
|
||||||
div.system-messages {
|
|
||||||
margin: 5em }
|
|
||||||
|
|
||||||
div.system-messages h1 {
|
|
||||||
color: red }
|
|
||||||
|
|
||||||
div.system-message {
|
|
||||||
border: medium outset ;
|
|
||||||
padding: 1em }
|
|
||||||
|
|
||||||
div.system-message p.system-message-title {
|
|
||||||
color: red ;
|
|
||||||
font-weight: bold }
|
|
||||||
|
|
||||||
div.topic {
|
|
||||||
margin: 2em }
|
|
||||||
|
|
||||||
h1.section-subtitle, h2.section-subtitle, h3.section-subtitle,
|
|
||||||
h4.section-subtitle, h5.section-subtitle, h6.section-subtitle {
|
|
||||||
margin-top: 0.4em }
|
|
||||||
|
|
||||||
h1.title {
|
|
||||||
text-align: center }
|
|
||||||
|
|
||||||
h2.subtitle {
|
|
||||||
text-align: center }
|
|
||||||
|
|
||||||
hr.docutils {
|
|
||||||
width: 75% }
|
|
||||||
|
|
||||||
img.align-left {
|
|
||||||
clear: left }
|
|
||||||
|
|
||||||
img.align-right {
|
|
||||||
clear: right }
|
|
||||||
|
|
||||||
ol.simple, ul.simple {
|
|
||||||
margin-bottom: 1em }
|
|
||||||
|
|
||||||
ol.arabic {
|
|
||||||
list-style: decimal }
|
|
||||||
|
|
||||||
ol.loweralpha {
|
|
||||||
list-style: lower-alpha }
|
|
||||||
|
|
||||||
ol.upperalpha {
|
|
||||||
list-style: upper-alpha }
|
|
||||||
|
|
||||||
ol.lowerroman {
|
|
||||||
list-style: lower-roman }
|
|
||||||
|
|
||||||
ol.upperroman {
|
|
||||||
list-style: upper-roman }
|
|
||||||
|
|
||||||
p.attribution {
|
|
||||||
text-align: right ;
|
|
||||||
margin-left: 50% }
|
|
||||||
|
|
||||||
p.caption {
|
|
||||||
font-style: italic }
|
|
||||||
|
|
||||||
p.credits {
|
|
||||||
font-style: italic ;
|
|
||||||
font-size: smaller }
|
|
||||||
|
|
||||||
p.label {
|
|
||||||
white-space: nowrap }
|
|
||||||
|
|
||||||
p.rubric {
|
|
||||||
font-weight: bold ;
|
|
||||||
font-size: larger ;
|
|
||||||
color: maroon ;
|
|
||||||
text-align: center }
|
|
||||||
|
|
||||||
p.sidebar-title {
|
|
||||||
font-family: sans-serif ;
|
|
||||||
font-weight: bold ;
|
|
||||||
font-size: larger }
|
|
||||||
|
|
||||||
p.sidebar-subtitle {
|
|
||||||
font-family: sans-serif ;
|
|
||||||
font-weight: bold }
|
|
||||||
|
|
||||||
p.topic-title {
|
|
||||||
font-weight: bold }
|
|
||||||
|
|
||||||
pre.address {
|
|
||||||
margin-bottom: 0 ;
|
|
||||||
margin-top: 0 ;
|
|
||||||
font-family: serif ;
|
|
||||||
font-size: 100% }
|
|
||||||
|
|
||||||
pre.literal-block, pre.doctest-block {
|
|
||||||
margin-left: 2em ;
|
|
||||||
margin-right: 2em ;
|
|
||||||
background-color: #eeeeee }
|
|
||||||
|
|
||||||
span.classifier {
|
|
||||||
font-family: sans-serif ;
|
|
||||||
font-style: oblique }
|
|
||||||
|
|
||||||
span.classifier-delimiter {
|
|
||||||
font-family: sans-serif ;
|
|
||||||
font-weight: bold }
|
|
||||||
|
|
||||||
span.interpreted {
|
|
||||||
font-family: sans-serif }
|
|
||||||
|
|
||||||
span.option {
|
|
||||||
white-space: nowrap }
|
|
||||||
|
|
||||||
span.pre {
|
|
||||||
white-space: pre }
|
|
||||||
|
|
||||||
span.problematic {
|
|
||||||
color: red }
|
|
||||||
|
|
||||||
span.section-subtitle {
|
|
||||||
/* font-size relative to parent (h1..h6 element) */
|
|
||||||
font-size: 80% }
|
|
||||||
|
|
||||||
table.citation {
|
|
||||||
border-left: solid 1px gray;
|
|
||||||
margin-left: 1px }
|
|
||||||
|
|
||||||
table.docinfo {
|
|
||||||
margin: 2em 4em }
|
|
||||||
|
|
||||||
table.docutils {
|
|
||||||
margin-top: 0.5em ;
|
|
||||||
margin-bottom: 0.5em }
|
|
||||||
|
|
||||||
table.footnote {
|
|
||||||
border-left: solid 1px black;
|
|
||||||
margin-left: 1px }
|
|
||||||
|
|
||||||
table.docutils td, table.docutils th,
|
|
||||||
table.docinfo td, table.docinfo th {
|
|
||||||
padding-left: 0.5em ;
|
|
||||||
padding-right: 0.5em ;
|
|
||||||
vertical-align: top }
|
|
||||||
|
|
||||||
table.docutils th.field-name, table.docinfo th.docinfo-name {
|
|
||||||
font-weight: bold ;
|
|
||||||
text-align: left ;
|
|
||||||
white-space: nowrap ;
|
|
||||||
padding-left: 0 }
|
|
||||||
|
|
||||||
h1 tt.docutils, h2 tt.docutils, h3 tt.docutils,
|
|
||||||
h4 tt.docutils, h5 tt.docutils, h6 tt.docutils {
|
|
||||||
font-size: 100% }
|
|
||||||
|
|
||||||
tt.docutils {
|
|
||||||
background-color: #eeeeee }
|
|
||||||
|
|
||||||
ul.auto-toc {
|
|
||||||
list-style-type: none }
|
|
||||||
|
|
||||||
</style>
|
|
||||||
</head>
|
</head>
|
||||||
<body>
|
<body>
|
||||||
<div class="document" id="single-pass-iterator-concept">
|
<div class="document" id="single-pass-iterator-concept">
|
||||||
<h1 class="title">Single Pass Iterator Concept</h1>
|
<h1 class="title">Single Pass Iterator Concept</h1>
|
||||||
|
|
||||||
<!-- Copyright David Abrahams 2006. Distributed under the Boost -->
|
<!-- Copyright David Abrahams 2006. Distributed under the Boost -->
|
||||||
<!-- Software License, Version 1.0. (See accompanying -->
|
<!-- Software License, Version 1.0. (See accompanying -->
|
||||||
<!-- file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) -->
|
<!-- file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) -->
|
||||||
@ -338,6 +57,12 @@ relation over its domain</td>
|
|||||||
</tr>
|
</tr>
|
||||||
</tbody>
|
</tbody>
|
||||||
</table>
|
</table>
|
||||||
|
</div>
|
||||||
|
<div class="footer">
|
||||||
|
<hr class="footer" />
|
||||||
|
<a class="reference external" href="SinglePassIterator.rst">View document source</a>.
|
||||||
|
Generated by <a class="reference external" href="http://docutils.sourceforge.net/">Docutils</a> from <a class="reference external" href="http://docutils.sourceforge.net/rst.html">reStructuredText</a> source.
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
</body>
|
</body>
|
||||||
</html>
|
</html>
|
||||||
|
0
doc/SinglePassIterator.rst
Executable file → Normal file
0
doc/SinglePassIterator.rst
Executable file → Normal file
@ -3,295 +3,14 @@
|
|||||||
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
|
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
|
||||||
<head>
|
<head>
|
||||||
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
|
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
|
||||||
<meta name="generator" content="Docutils 0.4: http://docutils.sourceforge.net/" />
|
<meta name="generator" content="Docutils 0.5: http://docutils.sourceforge.net/" />
|
||||||
<title>Swappable Iterator Concept</title>
|
<title>Swappable Iterator Concept</title>
|
||||||
<style type="text/css">
|
<link rel="stylesheet" href="../../../rst.css" type="text/css" />
|
||||||
|
|
||||||
/*
|
|
||||||
:Author: David Goodger
|
|
||||||
:Contact: goodger@users.sourceforge.net
|
|
||||||
:Date: $Date$
|
|
||||||
:Revision: $Revision$
|
|
||||||
:Copyright: This stylesheet has been placed in the public domain.
|
|
||||||
|
|
||||||
Default cascading style sheet for the HTML output of Docutils.
|
|
||||||
|
|
||||||
See http://docutils.sf.net/docs/howto/html-stylesheets.html for how to
|
|
||||||
customize this style sheet.
|
|
||||||
*/
|
|
||||||
|
|
||||||
/* used to remove borders from tables and images */
|
|
||||||
.borderless, table.borderless td, table.borderless th {
|
|
||||||
border: 0 }
|
|
||||||
|
|
||||||
table.borderless td, table.borderless th {
|
|
||||||
/* Override padding for "table.docutils td" with "! important".
|
|
||||||
The right padding separates the table cells. */
|
|
||||||
padding: 0 0.5em 0 0 ! important }
|
|
||||||
|
|
||||||
.first {
|
|
||||||
/* Override more specific margin styles with "! important". */
|
|
||||||
margin-top: 0 ! important }
|
|
||||||
|
|
||||||
.last, .with-subtitle {
|
|
||||||
margin-bottom: 0 ! important }
|
|
||||||
|
|
||||||
.hidden {
|
|
||||||
display: none }
|
|
||||||
|
|
||||||
a.toc-backref {
|
|
||||||
text-decoration: none ;
|
|
||||||
color: black }
|
|
||||||
|
|
||||||
blockquote.epigraph {
|
|
||||||
margin: 2em 5em ; }
|
|
||||||
|
|
||||||
dl.docutils dd {
|
|
||||||
margin-bottom: 0.5em }
|
|
||||||
|
|
||||||
/* Uncomment (and remove this text!) to get bold-faced definition list terms
|
|
||||||
dl.docutils dt {
|
|
||||||
font-weight: bold }
|
|
||||||
*/
|
|
||||||
|
|
||||||
div.abstract {
|
|
||||||
margin: 2em 5em }
|
|
||||||
|
|
||||||
div.abstract p.topic-title {
|
|
||||||
font-weight: bold ;
|
|
||||||
text-align: center }
|
|
||||||
|
|
||||||
div.admonition, div.attention, div.caution, div.danger, div.error,
|
|
||||||
div.hint, div.important, div.note, div.tip, div.warning {
|
|
||||||
margin: 2em ;
|
|
||||||
border: medium outset ;
|
|
||||||
padding: 1em }
|
|
||||||
|
|
||||||
div.admonition p.admonition-title, div.hint p.admonition-title,
|
|
||||||
div.important p.admonition-title, div.note p.admonition-title,
|
|
||||||
div.tip p.admonition-title {
|
|
||||||
font-weight: bold ;
|
|
||||||
font-family: sans-serif }
|
|
||||||
|
|
||||||
div.attention p.admonition-title, div.caution p.admonition-title,
|
|
||||||
div.danger p.admonition-title, div.error p.admonition-title,
|
|
||||||
div.warning p.admonition-title {
|
|
||||||
color: red ;
|
|
||||||
font-weight: bold ;
|
|
||||||
font-family: sans-serif }
|
|
||||||
|
|
||||||
/* Uncomment (and remove this text!) to get reduced vertical space in
|
|
||||||
compound paragraphs.
|
|
||||||
div.compound .compound-first, div.compound .compound-middle {
|
|
||||||
margin-bottom: 0.5em }
|
|
||||||
|
|
||||||
div.compound .compound-last, div.compound .compound-middle {
|
|
||||||
margin-top: 0.5em }
|
|
||||||
*/
|
|
||||||
|
|
||||||
div.dedication {
|
|
||||||
margin: 2em 5em ;
|
|
||||||
text-align: center ;
|
|
||||||
font-style: italic }
|
|
||||||
|
|
||||||
div.dedication p.topic-title {
|
|
||||||
font-weight: bold ;
|
|
||||||
font-style: normal }
|
|
||||||
|
|
||||||
div.figure {
|
|
||||||
margin-left: 2em ;
|
|
||||||
margin-right: 2em }
|
|
||||||
|
|
||||||
div.footer, div.header {
|
|
||||||
clear: both;
|
|
||||||
font-size: smaller }
|
|
||||||
|
|
||||||
div.line-block {
|
|
||||||
display: block ;
|
|
||||||
margin-top: 1em ;
|
|
||||||
margin-bottom: 1em }
|
|
||||||
|
|
||||||
div.line-block div.line-block {
|
|
||||||
margin-top: 0 ;
|
|
||||||
margin-bottom: 0 ;
|
|
||||||
margin-left: 1.5em }
|
|
||||||
|
|
||||||
div.sidebar {
|
|
||||||
margin-left: 1em ;
|
|
||||||
border: medium outset ;
|
|
||||||
padding: 1em ;
|
|
||||||
background-color: #ffffee ;
|
|
||||||
width: 40% ;
|
|
||||||
float: right ;
|
|
||||||
clear: right }
|
|
||||||
|
|
||||||
div.sidebar p.rubric {
|
|
||||||
font-family: sans-serif ;
|
|
||||||
font-size: medium }
|
|
||||||
|
|
||||||
div.system-messages {
|
|
||||||
margin: 5em }
|
|
||||||
|
|
||||||
div.system-messages h1 {
|
|
||||||
color: red }
|
|
||||||
|
|
||||||
div.system-message {
|
|
||||||
border: medium outset ;
|
|
||||||
padding: 1em }
|
|
||||||
|
|
||||||
div.system-message p.system-message-title {
|
|
||||||
color: red ;
|
|
||||||
font-weight: bold }
|
|
||||||
|
|
||||||
div.topic {
|
|
||||||
margin: 2em }
|
|
||||||
|
|
||||||
h1.section-subtitle, h2.section-subtitle, h3.section-subtitle,
|
|
||||||
h4.section-subtitle, h5.section-subtitle, h6.section-subtitle {
|
|
||||||
margin-top: 0.4em }
|
|
||||||
|
|
||||||
h1.title {
|
|
||||||
text-align: center }
|
|
||||||
|
|
||||||
h2.subtitle {
|
|
||||||
text-align: center }
|
|
||||||
|
|
||||||
hr.docutils {
|
|
||||||
width: 75% }
|
|
||||||
|
|
||||||
img.align-left {
|
|
||||||
clear: left }
|
|
||||||
|
|
||||||
img.align-right {
|
|
||||||
clear: right }
|
|
||||||
|
|
||||||
ol.simple, ul.simple {
|
|
||||||
margin-bottom: 1em }
|
|
||||||
|
|
||||||
ol.arabic {
|
|
||||||
list-style: decimal }
|
|
||||||
|
|
||||||
ol.loweralpha {
|
|
||||||
list-style: lower-alpha }
|
|
||||||
|
|
||||||
ol.upperalpha {
|
|
||||||
list-style: upper-alpha }
|
|
||||||
|
|
||||||
ol.lowerroman {
|
|
||||||
list-style: lower-roman }
|
|
||||||
|
|
||||||
ol.upperroman {
|
|
||||||
list-style: upper-roman }
|
|
||||||
|
|
||||||
p.attribution {
|
|
||||||
text-align: right ;
|
|
||||||
margin-left: 50% }
|
|
||||||
|
|
||||||
p.caption {
|
|
||||||
font-style: italic }
|
|
||||||
|
|
||||||
p.credits {
|
|
||||||
font-style: italic ;
|
|
||||||
font-size: smaller }
|
|
||||||
|
|
||||||
p.label {
|
|
||||||
white-space: nowrap }
|
|
||||||
|
|
||||||
p.rubric {
|
|
||||||
font-weight: bold ;
|
|
||||||
font-size: larger ;
|
|
||||||
color: maroon ;
|
|
||||||
text-align: center }
|
|
||||||
|
|
||||||
p.sidebar-title {
|
|
||||||
font-family: sans-serif ;
|
|
||||||
font-weight: bold ;
|
|
||||||
font-size: larger }
|
|
||||||
|
|
||||||
p.sidebar-subtitle {
|
|
||||||
font-family: sans-serif ;
|
|
||||||
font-weight: bold }
|
|
||||||
|
|
||||||
p.topic-title {
|
|
||||||
font-weight: bold }
|
|
||||||
|
|
||||||
pre.address {
|
|
||||||
margin-bottom: 0 ;
|
|
||||||
margin-top: 0 ;
|
|
||||||
font-family: serif ;
|
|
||||||
font-size: 100% }
|
|
||||||
|
|
||||||
pre.literal-block, pre.doctest-block {
|
|
||||||
margin-left: 2em ;
|
|
||||||
margin-right: 2em ;
|
|
||||||
background-color: #eeeeee }
|
|
||||||
|
|
||||||
span.classifier {
|
|
||||||
font-family: sans-serif ;
|
|
||||||
font-style: oblique }
|
|
||||||
|
|
||||||
span.classifier-delimiter {
|
|
||||||
font-family: sans-serif ;
|
|
||||||
font-weight: bold }
|
|
||||||
|
|
||||||
span.interpreted {
|
|
||||||
font-family: sans-serif }
|
|
||||||
|
|
||||||
span.option {
|
|
||||||
white-space: nowrap }
|
|
||||||
|
|
||||||
span.pre {
|
|
||||||
white-space: pre }
|
|
||||||
|
|
||||||
span.problematic {
|
|
||||||
color: red }
|
|
||||||
|
|
||||||
span.section-subtitle {
|
|
||||||
/* font-size relative to parent (h1..h6 element) */
|
|
||||||
font-size: 80% }
|
|
||||||
|
|
||||||
table.citation {
|
|
||||||
border-left: solid 1px gray;
|
|
||||||
margin-left: 1px }
|
|
||||||
|
|
||||||
table.docinfo {
|
|
||||||
margin: 2em 4em }
|
|
||||||
|
|
||||||
table.docutils {
|
|
||||||
margin-top: 0.5em ;
|
|
||||||
margin-bottom: 0.5em }
|
|
||||||
|
|
||||||
table.footnote {
|
|
||||||
border-left: solid 1px black;
|
|
||||||
margin-left: 1px }
|
|
||||||
|
|
||||||
table.docutils td, table.docutils th,
|
|
||||||
table.docinfo td, table.docinfo th {
|
|
||||||
padding-left: 0.5em ;
|
|
||||||
padding-right: 0.5em ;
|
|
||||||
vertical-align: top }
|
|
||||||
|
|
||||||
table.docutils th.field-name, table.docinfo th.docinfo-name {
|
|
||||||
font-weight: bold ;
|
|
||||||
text-align: left ;
|
|
||||||
white-space: nowrap ;
|
|
||||||
padding-left: 0 }
|
|
||||||
|
|
||||||
h1 tt.docutils, h2 tt.docutils, h3 tt.docutils,
|
|
||||||
h4 tt.docutils, h5 tt.docutils, h6 tt.docutils {
|
|
||||||
font-size: 100% }
|
|
||||||
|
|
||||||
tt.docutils {
|
|
||||||
background-color: #eeeeee }
|
|
||||||
|
|
||||||
ul.auto-toc {
|
|
||||||
list-style-type: none }
|
|
||||||
|
|
||||||
</style>
|
|
||||||
</head>
|
</head>
|
||||||
<body>
|
<body>
|
||||||
<div class="document" id="swappable-iterator-concept">
|
<div class="document" id="swappable-iterator-concept">
|
||||||
<h1 class="title">Swappable Iterator Concept</h1>
|
<h1 class="title">Swappable Iterator Concept</h1>
|
||||||
|
|
||||||
<!-- Copyright David Abrahams 2006. Distributed under the Boost -->
|
<!-- Copyright David Abrahams 2006. Distributed under the Boost -->
|
||||||
<!-- Software License, Version 1.0. (See accompanying -->
|
<!-- Software License, Version 1.0. (See accompanying -->
|
||||||
<!-- file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) -->
|
<!-- file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) -->
|
||||||
@ -324,6 +43,12 @@ exchanged</td>
|
|||||||
<dt>[<em>Note:</em> An iterator that is a model of the <em>Readable</em> and <em>Writable Iterator</em> concepts</dt>
|
<dt>[<em>Note:</em> An iterator that is a model of the <em>Readable</em> and <em>Writable Iterator</em> concepts</dt>
|
||||||
<dd>is also a model of <em>Swappable Iterator</em>. <em>--end note</em>]</dd>
|
<dd>is also a model of <em>Swappable Iterator</em>. <em>--end note</em>]</dd>
|
||||||
</dl>
|
</dl>
|
||||||
|
</div>
|
||||||
|
<div class="footer">
|
||||||
|
<hr class="footer" />
|
||||||
|
<a class="reference external" href="SwappableIterator.rst">View document source</a>.
|
||||||
|
Generated by <a class="reference external" href="http://docutils.sourceforge.net/">Docutils</a> from <a class="reference external" href="http://docutils.sourceforge.net/rst.html">reStructuredText</a> source.
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
</body>
|
</body>
|
||||||
</html>
|
</html>
|
||||||
|
0
doc/SwappableIterator.rst
Executable file → Normal file
0
doc/SwappableIterator.rst
Executable file → Normal file
@ -3,295 +3,14 @@
|
|||||||
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
|
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
|
||||||
<head>
|
<head>
|
||||||
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
|
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
|
||||||
<meta name="generator" content="Docutils 0.4: http://docutils.sourceforge.net/" />
|
<meta name="generator" content="Docutils 0.5: http://docutils.sourceforge.net/" />
|
||||||
<title>Writable Iterator Concept</title>
|
<title>Writable Iterator Concept</title>
|
||||||
<style type="text/css">
|
<link rel="stylesheet" href="../../../rst.css" type="text/css" />
|
||||||
|
|
||||||
/*
|
|
||||||
:Author: David Goodger
|
|
||||||
:Contact: goodger@users.sourceforge.net
|
|
||||||
:Date: $Date$
|
|
||||||
:Revision: $Revision$
|
|
||||||
:Copyright: This stylesheet has been placed in the public domain.
|
|
||||||
|
|
||||||
Default cascading style sheet for the HTML output of Docutils.
|
|
||||||
|
|
||||||
See http://docutils.sf.net/docs/howto/html-stylesheets.html for how to
|
|
||||||
customize this style sheet.
|
|
||||||
*/
|
|
||||||
|
|
||||||
/* used to remove borders from tables and images */
|
|
||||||
.borderless, table.borderless td, table.borderless th {
|
|
||||||
border: 0 }
|
|
||||||
|
|
||||||
table.borderless td, table.borderless th {
|
|
||||||
/* Override padding for "table.docutils td" with "! important".
|
|
||||||
The right padding separates the table cells. */
|
|
||||||
padding: 0 0.5em 0 0 ! important }
|
|
||||||
|
|
||||||
.first {
|
|
||||||
/* Override more specific margin styles with "! important". */
|
|
||||||
margin-top: 0 ! important }
|
|
||||||
|
|
||||||
.last, .with-subtitle {
|
|
||||||
margin-bottom: 0 ! important }
|
|
||||||
|
|
||||||
.hidden {
|
|
||||||
display: none }
|
|
||||||
|
|
||||||
a.toc-backref {
|
|
||||||
text-decoration: none ;
|
|
||||||
color: black }
|
|
||||||
|
|
||||||
blockquote.epigraph {
|
|
||||||
margin: 2em 5em ; }
|
|
||||||
|
|
||||||
dl.docutils dd {
|
|
||||||
margin-bottom: 0.5em }
|
|
||||||
|
|
||||||
/* Uncomment (and remove this text!) to get bold-faced definition list terms
|
|
||||||
dl.docutils dt {
|
|
||||||
font-weight: bold }
|
|
||||||
*/
|
|
||||||
|
|
||||||
div.abstract {
|
|
||||||
margin: 2em 5em }
|
|
||||||
|
|
||||||
div.abstract p.topic-title {
|
|
||||||
font-weight: bold ;
|
|
||||||
text-align: center }
|
|
||||||
|
|
||||||
div.admonition, div.attention, div.caution, div.danger, div.error,
|
|
||||||
div.hint, div.important, div.note, div.tip, div.warning {
|
|
||||||
margin: 2em ;
|
|
||||||
border: medium outset ;
|
|
||||||
padding: 1em }
|
|
||||||
|
|
||||||
div.admonition p.admonition-title, div.hint p.admonition-title,
|
|
||||||
div.important p.admonition-title, div.note p.admonition-title,
|
|
||||||
div.tip p.admonition-title {
|
|
||||||
font-weight: bold ;
|
|
||||||
font-family: sans-serif }
|
|
||||||
|
|
||||||
div.attention p.admonition-title, div.caution p.admonition-title,
|
|
||||||
div.danger p.admonition-title, div.error p.admonition-title,
|
|
||||||
div.warning p.admonition-title {
|
|
||||||
color: red ;
|
|
||||||
font-weight: bold ;
|
|
||||||
font-family: sans-serif }
|
|
||||||
|
|
||||||
/* Uncomment (and remove this text!) to get reduced vertical space in
|
|
||||||
compound paragraphs.
|
|
||||||
div.compound .compound-first, div.compound .compound-middle {
|
|
||||||
margin-bottom: 0.5em }
|
|
||||||
|
|
||||||
div.compound .compound-last, div.compound .compound-middle {
|
|
||||||
margin-top: 0.5em }
|
|
||||||
*/
|
|
||||||
|
|
||||||
div.dedication {
|
|
||||||
margin: 2em 5em ;
|
|
||||||
text-align: center ;
|
|
||||||
font-style: italic }
|
|
||||||
|
|
||||||
div.dedication p.topic-title {
|
|
||||||
font-weight: bold ;
|
|
||||||
font-style: normal }
|
|
||||||
|
|
||||||
div.figure {
|
|
||||||
margin-left: 2em ;
|
|
||||||
margin-right: 2em }
|
|
||||||
|
|
||||||
div.footer, div.header {
|
|
||||||
clear: both;
|
|
||||||
font-size: smaller }
|
|
||||||
|
|
||||||
div.line-block {
|
|
||||||
display: block ;
|
|
||||||
margin-top: 1em ;
|
|
||||||
margin-bottom: 1em }
|
|
||||||
|
|
||||||
div.line-block div.line-block {
|
|
||||||
margin-top: 0 ;
|
|
||||||
margin-bottom: 0 ;
|
|
||||||
margin-left: 1.5em }
|
|
||||||
|
|
||||||
div.sidebar {
|
|
||||||
margin-left: 1em ;
|
|
||||||
border: medium outset ;
|
|
||||||
padding: 1em ;
|
|
||||||
background-color: #ffffee ;
|
|
||||||
width: 40% ;
|
|
||||||
float: right ;
|
|
||||||
clear: right }
|
|
||||||
|
|
||||||
div.sidebar p.rubric {
|
|
||||||
font-family: sans-serif ;
|
|
||||||
font-size: medium }
|
|
||||||
|
|
||||||
div.system-messages {
|
|
||||||
margin: 5em }
|
|
||||||
|
|
||||||
div.system-messages h1 {
|
|
||||||
color: red }
|
|
||||||
|
|
||||||
div.system-message {
|
|
||||||
border: medium outset ;
|
|
||||||
padding: 1em }
|
|
||||||
|
|
||||||
div.system-message p.system-message-title {
|
|
||||||
color: red ;
|
|
||||||
font-weight: bold }
|
|
||||||
|
|
||||||
div.topic {
|
|
||||||
margin: 2em }
|
|
||||||
|
|
||||||
h1.section-subtitle, h2.section-subtitle, h3.section-subtitle,
|
|
||||||
h4.section-subtitle, h5.section-subtitle, h6.section-subtitle {
|
|
||||||
margin-top: 0.4em }
|
|
||||||
|
|
||||||
h1.title {
|
|
||||||
text-align: center }
|
|
||||||
|
|
||||||
h2.subtitle {
|
|
||||||
text-align: center }
|
|
||||||
|
|
||||||
hr.docutils {
|
|
||||||
width: 75% }
|
|
||||||
|
|
||||||
img.align-left {
|
|
||||||
clear: left }
|
|
||||||
|
|
||||||
img.align-right {
|
|
||||||
clear: right }
|
|
||||||
|
|
||||||
ol.simple, ul.simple {
|
|
||||||
margin-bottom: 1em }
|
|
||||||
|
|
||||||
ol.arabic {
|
|
||||||
list-style: decimal }
|
|
||||||
|
|
||||||
ol.loweralpha {
|
|
||||||
list-style: lower-alpha }
|
|
||||||
|
|
||||||
ol.upperalpha {
|
|
||||||
list-style: upper-alpha }
|
|
||||||
|
|
||||||
ol.lowerroman {
|
|
||||||
list-style: lower-roman }
|
|
||||||
|
|
||||||
ol.upperroman {
|
|
||||||
list-style: upper-roman }
|
|
||||||
|
|
||||||
p.attribution {
|
|
||||||
text-align: right ;
|
|
||||||
margin-left: 50% }
|
|
||||||
|
|
||||||
p.caption {
|
|
||||||
font-style: italic }
|
|
||||||
|
|
||||||
p.credits {
|
|
||||||
font-style: italic ;
|
|
||||||
font-size: smaller }
|
|
||||||
|
|
||||||
p.label {
|
|
||||||
white-space: nowrap }
|
|
||||||
|
|
||||||
p.rubric {
|
|
||||||
font-weight: bold ;
|
|
||||||
font-size: larger ;
|
|
||||||
color: maroon ;
|
|
||||||
text-align: center }
|
|
||||||
|
|
||||||
p.sidebar-title {
|
|
||||||
font-family: sans-serif ;
|
|
||||||
font-weight: bold ;
|
|
||||||
font-size: larger }
|
|
||||||
|
|
||||||
p.sidebar-subtitle {
|
|
||||||
font-family: sans-serif ;
|
|
||||||
font-weight: bold }
|
|
||||||
|
|
||||||
p.topic-title {
|
|
||||||
font-weight: bold }
|
|
||||||
|
|
||||||
pre.address {
|
|
||||||
margin-bottom: 0 ;
|
|
||||||
margin-top: 0 ;
|
|
||||||
font-family: serif ;
|
|
||||||
font-size: 100% }
|
|
||||||
|
|
||||||
pre.literal-block, pre.doctest-block {
|
|
||||||
margin-left: 2em ;
|
|
||||||
margin-right: 2em ;
|
|
||||||
background-color: #eeeeee }
|
|
||||||
|
|
||||||
span.classifier {
|
|
||||||
font-family: sans-serif ;
|
|
||||||
font-style: oblique }
|
|
||||||
|
|
||||||
span.classifier-delimiter {
|
|
||||||
font-family: sans-serif ;
|
|
||||||
font-weight: bold }
|
|
||||||
|
|
||||||
span.interpreted {
|
|
||||||
font-family: sans-serif }
|
|
||||||
|
|
||||||
span.option {
|
|
||||||
white-space: nowrap }
|
|
||||||
|
|
||||||
span.pre {
|
|
||||||
white-space: pre }
|
|
||||||
|
|
||||||
span.problematic {
|
|
||||||
color: red }
|
|
||||||
|
|
||||||
span.section-subtitle {
|
|
||||||
/* font-size relative to parent (h1..h6 element) */
|
|
||||||
font-size: 80% }
|
|
||||||
|
|
||||||
table.citation {
|
|
||||||
border-left: solid 1px gray;
|
|
||||||
margin-left: 1px }
|
|
||||||
|
|
||||||
table.docinfo {
|
|
||||||
margin: 2em 4em }
|
|
||||||
|
|
||||||
table.docutils {
|
|
||||||
margin-top: 0.5em ;
|
|
||||||
margin-bottom: 0.5em }
|
|
||||||
|
|
||||||
table.footnote {
|
|
||||||
border-left: solid 1px black;
|
|
||||||
margin-left: 1px }
|
|
||||||
|
|
||||||
table.docutils td, table.docutils th,
|
|
||||||
table.docinfo td, table.docinfo th {
|
|
||||||
padding-left: 0.5em ;
|
|
||||||
padding-right: 0.5em ;
|
|
||||||
vertical-align: top }
|
|
||||||
|
|
||||||
table.docutils th.field-name, table.docinfo th.docinfo-name {
|
|
||||||
font-weight: bold ;
|
|
||||||
text-align: left ;
|
|
||||||
white-space: nowrap ;
|
|
||||||
padding-left: 0 }
|
|
||||||
|
|
||||||
h1 tt.docutils, h2 tt.docutils, h3 tt.docutils,
|
|
||||||
h4 tt.docutils, h5 tt.docutils, h6 tt.docutils {
|
|
||||||
font-size: 100% }
|
|
||||||
|
|
||||||
tt.docutils {
|
|
||||||
background-color: #eeeeee }
|
|
||||||
|
|
||||||
ul.auto-toc {
|
|
||||||
list-style-type: none }
|
|
||||||
|
|
||||||
</style>
|
|
||||||
</head>
|
</head>
|
||||||
<body>
|
<body>
|
||||||
<div class="document" id="writable-iterator-concept">
|
<div class="document" id="writable-iterator-concept">
|
||||||
<h1 class="title">Writable Iterator Concept</h1>
|
<h1 class="title">Writable Iterator Concept</h1>
|
||||||
|
|
||||||
<!-- Copyright David Abrahams 2006. Distributed under the Boost -->
|
<!-- Copyright David Abrahams 2006. Distributed under the Boost -->
|
||||||
<!-- Software License, Version 1.0. (See accompanying -->
|
<!-- Software License, Version 1.0. (See accompanying -->
|
||||||
<!-- file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) -->
|
<!-- file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) -->
|
||||||
@ -322,6 +41,12 @@ value types of <tt class="docutils literal"><span class="pre">X</span></tt></td>
|
|||||||
</tr>
|
</tr>
|
||||||
</tbody>
|
</tbody>
|
||||||
</table>
|
</table>
|
||||||
|
</div>
|
||||||
|
<div class="footer">
|
||||||
|
<hr class="footer" />
|
||||||
|
<a class="reference external" href="WritableIterator.rst">View document source</a>.
|
||||||
|
Generated by <a class="reference external" href="http://docutils.sourceforge.net/">Docutils</a> from <a class="reference external" href="http://docutils.sourceforge.net/rst.html">reStructuredText</a> source.
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
</body>
|
</body>
|
||||||
</html>
|
</html>
|
||||||
|
0
doc/WritableIterator.rst
Executable file → Normal file
0
doc/WritableIterator.rst
Executable file → Normal file
75
doc/advance.rst
Normal file
75
doc/advance.rst
Normal file
@ -0,0 +1,75 @@
|
|||||||
|
.. Copyright (C) 2017 Michel Morin.
|
||||||
|
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)
|
||||||
|
|
||||||
|
=======
|
||||||
|
advance
|
||||||
|
=======
|
||||||
|
|
||||||
|
``boost::iterators::advance`` is an adapted version of ``std::advance`` for
|
||||||
|
the Boost iterator traversal concepts.
|
||||||
|
|
||||||
|
|
||||||
|
Header
|
||||||
|
------
|
||||||
|
|
||||||
|
``<boost/iterator/advance.hpp>``
|
||||||
|
|
||||||
|
|
||||||
|
Synopsis
|
||||||
|
--------
|
||||||
|
|
||||||
|
::
|
||||||
|
|
||||||
|
template <typename Iterator, typename Distance>
|
||||||
|
constexpr void advance(Iterator& it, Distance n);
|
||||||
|
|
||||||
|
|
||||||
|
Description
|
||||||
|
-----------
|
||||||
|
|
||||||
|
Moves ``it`` forward by ``n`` increments
|
||||||
|
(or backward by ``|n|`` decrements if ``n`` is negative).
|
||||||
|
|
||||||
|
|
||||||
|
Requirements
|
||||||
|
------------
|
||||||
|
|
||||||
|
``Iterator`` should model Incrementable Iterator.
|
||||||
|
|
||||||
|
|
||||||
|
Preconditions
|
||||||
|
-------------
|
||||||
|
|
||||||
|
Let ``it``\ :sub:`i` be the iterator obtained by incrementing
|
||||||
|
(or decrementing if ``n`` is negative) ``it`` by *i*. All the iterators
|
||||||
|
``it``\ :sub:`i` for *i* = 0, 1, 2, ..., ``|n|`` should be valid.
|
||||||
|
|
||||||
|
If ``Iterator`` does not model Bidirectional Traversal Iterator,
|
||||||
|
``n`` should be non-negative.
|
||||||
|
|
||||||
|
|
||||||
|
Complexity
|
||||||
|
----------
|
||||||
|
|
||||||
|
If ``Iterator`` models Random Access Traversal Iterator, it takes constant time;
|
||||||
|
otherwise it takes linear time.
|
||||||
|
|
||||||
|
|
||||||
|
Notes
|
||||||
|
-----
|
||||||
|
|
||||||
|
- This function is not a customization point and is protected against
|
||||||
|
being found by argument-dependent lookup (ADL).
|
||||||
|
- This function is ``constexpr`` only in C++14 or later.
|
||||||
|
|
||||||
|
|
||||||
|
--------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
| Author: Michel Morin
|
||||||
|
| Copyright |C| 2017 Michel Morin
|
||||||
|
| Distributed under the `Boost Software License, Version 1.0
|
||||||
|
<http://www.boost.org/LICENSE_1_0.txt>`_.
|
||||||
|
|
||||||
|
.. |C| unicode:: U+00A9 .. COPYRIGHT SIGN
|
@ -3,295 +3,13 @@
|
|||||||
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
|
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
|
||||||
<head>
|
<head>
|
||||||
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
|
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
|
||||||
<meta name="generator" content="Docutils 0.4: http://docutils.sourceforge.net/" />
|
<meta name="generator" content="Docutils 0.5: http://docutils.sourceforge.net/" />
|
||||||
<title>Counting Iterator</title>
|
<title>Counting Iterator</title>
|
||||||
<meta name="author" content="David Abrahams, Jeremy Siek, Thomas Witt" />
|
<meta name="author" content="David Abrahams, Jeremy Siek, Thomas Witt" />
|
||||||
<meta name="organization" content="Boost Consulting, Indiana University Open Systems Lab, University of Hanover Institute for Transport Railway Operation and Construction" />
|
<meta name="organization" content="Boost Consulting, Indiana University Open Systems Lab, University of Hanover Institute for Transport Railway Operation and Construction" />
|
||||||
<meta name="date" content="2004-11-01" />
|
<meta name="date" content="2006-09-11" />
|
||||||
<meta name="copyright" content="Copyright David Abrahams, Jeremy Siek, and Thomas Witt 2003." />
|
<meta name="copyright" content="Copyright David Abrahams, Jeremy Siek, and Thomas Witt 2003." />
|
||||||
<style type="text/css">
|
<link rel="stylesheet" href="../../../rst.css" type="text/css" />
|
||||||
|
|
||||||
/*
|
|
||||||
:Author: David Goodger
|
|
||||||
:Contact: goodger@users.sourceforge.net
|
|
||||||
:Date: $Date$
|
|
||||||
:Revision: $Revision$
|
|
||||||
:Copyright: This stylesheet has been placed in the public domain.
|
|
||||||
|
|
||||||
Default cascading style sheet for the HTML output of Docutils.
|
|
||||||
|
|
||||||
See http://docutils.sf.net/docs/howto/html-stylesheets.html for how to
|
|
||||||
customize this style sheet.
|
|
||||||
*/
|
|
||||||
|
|
||||||
/* used to remove borders from tables and images */
|
|
||||||
.borderless, table.borderless td, table.borderless th {
|
|
||||||
border: 0 }
|
|
||||||
|
|
||||||
table.borderless td, table.borderless th {
|
|
||||||
/* Override padding for "table.docutils td" with "! important".
|
|
||||||
The right padding separates the table cells. */
|
|
||||||
padding: 0 0.5em 0 0 ! important }
|
|
||||||
|
|
||||||
.first {
|
|
||||||
/* Override more specific margin styles with "! important". */
|
|
||||||
margin-top: 0 ! important }
|
|
||||||
|
|
||||||
.last, .with-subtitle {
|
|
||||||
margin-bottom: 0 ! important }
|
|
||||||
|
|
||||||
.hidden {
|
|
||||||
display: none }
|
|
||||||
|
|
||||||
a.toc-backref {
|
|
||||||
text-decoration: none ;
|
|
||||||
color: black }
|
|
||||||
|
|
||||||
blockquote.epigraph {
|
|
||||||
margin: 2em 5em ; }
|
|
||||||
|
|
||||||
dl.docutils dd {
|
|
||||||
margin-bottom: 0.5em }
|
|
||||||
|
|
||||||
/* Uncomment (and remove this text!) to get bold-faced definition list terms
|
|
||||||
dl.docutils dt {
|
|
||||||
font-weight: bold }
|
|
||||||
*/
|
|
||||||
|
|
||||||
div.abstract {
|
|
||||||
margin: 2em 5em }
|
|
||||||
|
|
||||||
div.abstract p.topic-title {
|
|
||||||
font-weight: bold ;
|
|
||||||
text-align: center }
|
|
||||||
|
|
||||||
div.admonition, div.attention, div.caution, div.danger, div.error,
|
|
||||||
div.hint, div.important, div.note, div.tip, div.warning {
|
|
||||||
margin: 2em ;
|
|
||||||
border: medium outset ;
|
|
||||||
padding: 1em }
|
|
||||||
|
|
||||||
div.admonition p.admonition-title, div.hint p.admonition-title,
|
|
||||||
div.important p.admonition-title, div.note p.admonition-title,
|
|
||||||
div.tip p.admonition-title {
|
|
||||||
font-weight: bold ;
|
|
||||||
font-family: sans-serif }
|
|
||||||
|
|
||||||
div.attention p.admonition-title, div.caution p.admonition-title,
|
|
||||||
div.danger p.admonition-title, div.error p.admonition-title,
|
|
||||||
div.warning p.admonition-title {
|
|
||||||
color: red ;
|
|
||||||
font-weight: bold ;
|
|
||||||
font-family: sans-serif }
|
|
||||||
|
|
||||||
/* Uncomment (and remove this text!) to get reduced vertical space in
|
|
||||||
compound paragraphs.
|
|
||||||
div.compound .compound-first, div.compound .compound-middle {
|
|
||||||
margin-bottom: 0.5em }
|
|
||||||
|
|
||||||
div.compound .compound-last, div.compound .compound-middle {
|
|
||||||
margin-top: 0.5em }
|
|
||||||
*/
|
|
||||||
|
|
||||||
div.dedication {
|
|
||||||
margin: 2em 5em ;
|
|
||||||
text-align: center ;
|
|
||||||
font-style: italic }
|
|
||||||
|
|
||||||
div.dedication p.topic-title {
|
|
||||||
font-weight: bold ;
|
|
||||||
font-style: normal }
|
|
||||||
|
|
||||||
div.figure {
|
|
||||||
margin-left: 2em ;
|
|
||||||
margin-right: 2em }
|
|
||||||
|
|
||||||
div.footer, div.header {
|
|
||||||
clear: both;
|
|
||||||
font-size: smaller }
|
|
||||||
|
|
||||||
div.line-block {
|
|
||||||
display: block ;
|
|
||||||
margin-top: 1em ;
|
|
||||||
margin-bottom: 1em }
|
|
||||||
|
|
||||||
div.line-block div.line-block {
|
|
||||||
margin-top: 0 ;
|
|
||||||
margin-bottom: 0 ;
|
|
||||||
margin-left: 1.5em }
|
|
||||||
|
|
||||||
div.sidebar {
|
|
||||||
margin-left: 1em ;
|
|
||||||
border: medium outset ;
|
|
||||||
padding: 1em ;
|
|
||||||
background-color: #ffffee ;
|
|
||||||
width: 40% ;
|
|
||||||
float: right ;
|
|
||||||
clear: right }
|
|
||||||
|
|
||||||
div.sidebar p.rubric {
|
|
||||||
font-family: sans-serif ;
|
|
||||||
font-size: medium }
|
|
||||||
|
|
||||||
div.system-messages {
|
|
||||||
margin: 5em }
|
|
||||||
|
|
||||||
div.system-messages h1 {
|
|
||||||
color: red }
|
|
||||||
|
|
||||||
div.system-message {
|
|
||||||
border: medium outset ;
|
|
||||||
padding: 1em }
|
|
||||||
|
|
||||||
div.system-message p.system-message-title {
|
|
||||||
color: red ;
|
|
||||||
font-weight: bold }
|
|
||||||
|
|
||||||
div.topic {
|
|
||||||
margin: 2em }
|
|
||||||
|
|
||||||
h1.section-subtitle, h2.section-subtitle, h3.section-subtitle,
|
|
||||||
h4.section-subtitle, h5.section-subtitle, h6.section-subtitle {
|
|
||||||
margin-top: 0.4em }
|
|
||||||
|
|
||||||
h1.title {
|
|
||||||
text-align: center }
|
|
||||||
|
|
||||||
h2.subtitle {
|
|
||||||
text-align: center }
|
|
||||||
|
|
||||||
hr.docutils {
|
|
||||||
width: 75% }
|
|
||||||
|
|
||||||
img.align-left {
|
|
||||||
clear: left }
|
|
||||||
|
|
||||||
img.align-right {
|
|
||||||
clear: right }
|
|
||||||
|
|
||||||
ol.simple, ul.simple {
|
|
||||||
margin-bottom: 1em }
|
|
||||||
|
|
||||||
ol.arabic {
|
|
||||||
list-style: decimal }
|
|
||||||
|
|
||||||
ol.loweralpha {
|
|
||||||
list-style: lower-alpha }
|
|
||||||
|
|
||||||
ol.upperalpha {
|
|
||||||
list-style: upper-alpha }
|
|
||||||
|
|
||||||
ol.lowerroman {
|
|
||||||
list-style: lower-roman }
|
|
||||||
|
|
||||||
ol.upperroman {
|
|
||||||
list-style: upper-roman }
|
|
||||||
|
|
||||||
p.attribution {
|
|
||||||
text-align: right ;
|
|
||||||
margin-left: 50% }
|
|
||||||
|
|
||||||
p.caption {
|
|
||||||
font-style: italic }
|
|
||||||
|
|
||||||
p.credits {
|
|
||||||
font-style: italic ;
|
|
||||||
font-size: smaller }
|
|
||||||
|
|
||||||
p.label {
|
|
||||||
white-space: nowrap }
|
|
||||||
|
|
||||||
p.rubric {
|
|
||||||
font-weight: bold ;
|
|
||||||
font-size: larger ;
|
|
||||||
color: maroon ;
|
|
||||||
text-align: center }
|
|
||||||
|
|
||||||
p.sidebar-title {
|
|
||||||
font-family: sans-serif ;
|
|
||||||
font-weight: bold ;
|
|
||||||
font-size: larger }
|
|
||||||
|
|
||||||
p.sidebar-subtitle {
|
|
||||||
font-family: sans-serif ;
|
|
||||||
font-weight: bold }
|
|
||||||
|
|
||||||
p.topic-title {
|
|
||||||
font-weight: bold }
|
|
||||||
|
|
||||||
pre.address {
|
|
||||||
margin-bottom: 0 ;
|
|
||||||
margin-top: 0 ;
|
|
||||||
font-family: serif ;
|
|
||||||
font-size: 100% }
|
|
||||||
|
|
||||||
pre.literal-block, pre.doctest-block {
|
|
||||||
margin-left: 2em ;
|
|
||||||
margin-right: 2em ;
|
|
||||||
background-color: #eeeeee }
|
|
||||||
|
|
||||||
span.classifier {
|
|
||||||
font-family: sans-serif ;
|
|
||||||
font-style: oblique }
|
|
||||||
|
|
||||||
span.classifier-delimiter {
|
|
||||||
font-family: sans-serif ;
|
|
||||||
font-weight: bold }
|
|
||||||
|
|
||||||
span.interpreted {
|
|
||||||
font-family: sans-serif }
|
|
||||||
|
|
||||||
span.option {
|
|
||||||
white-space: nowrap }
|
|
||||||
|
|
||||||
span.pre {
|
|
||||||
white-space: pre }
|
|
||||||
|
|
||||||
span.problematic {
|
|
||||||
color: red }
|
|
||||||
|
|
||||||
span.section-subtitle {
|
|
||||||
/* font-size relative to parent (h1..h6 element) */
|
|
||||||
font-size: 80% }
|
|
||||||
|
|
||||||
table.citation {
|
|
||||||
border-left: solid 1px gray;
|
|
||||||
margin-left: 1px }
|
|
||||||
|
|
||||||
table.docinfo {
|
|
||||||
margin: 2em 4em }
|
|
||||||
|
|
||||||
table.docutils {
|
|
||||||
margin-top: 0.5em ;
|
|
||||||
margin-bottom: 0.5em }
|
|
||||||
|
|
||||||
table.footnote {
|
|
||||||
border-left: solid 1px black;
|
|
||||||
margin-left: 1px }
|
|
||||||
|
|
||||||
table.docutils td, table.docutils th,
|
|
||||||
table.docinfo td, table.docinfo th {
|
|
||||||
padding-left: 0.5em ;
|
|
||||||
padding-right: 0.5em ;
|
|
||||||
vertical-align: top }
|
|
||||||
|
|
||||||
table.docutils th.field-name, table.docinfo th.docinfo-name {
|
|
||||||
font-weight: bold ;
|
|
||||||
text-align: left ;
|
|
||||||
white-space: nowrap ;
|
|
||||||
padding-left: 0 }
|
|
||||||
|
|
||||||
h1 tt.docutils, h2 tt.docutils, h3 tt.docutils,
|
|
||||||
h4 tt.docutils, h5 tt.docutils, h6 tt.docutils {
|
|
||||||
font-size: 100% }
|
|
||||||
|
|
||||||
tt.docutils {
|
|
||||||
background-color: #eeeeee }
|
|
||||||
|
|
||||||
ul.auto-toc {
|
|
||||||
list-style-type: none }
|
|
||||||
|
|
||||||
</style>
|
|
||||||
</head>
|
</head>
|
||||||
<body>
|
<body>
|
||||||
<div class="document" id="counting-iterator">
|
<div class="document" id="counting-iterator">
|
||||||
@ -303,13 +21,13 @@ ul.auto-toc {
|
|||||||
<tr><th class="docinfo-name">Author:</th>
|
<tr><th class="docinfo-name">Author:</th>
|
||||||
<td>David Abrahams, Jeremy Siek, Thomas Witt</td></tr>
|
<td>David Abrahams, Jeremy Siek, Thomas Witt</td></tr>
|
||||||
<tr><th class="docinfo-name">Contact:</th>
|
<tr><th class="docinfo-name">Contact:</th>
|
||||||
<td><a class="first reference" href="mailto:dave@boost-consulting.com">dave@boost-consulting.com</a>, <a class="reference" href="mailto:jsiek@osl.iu.edu">jsiek@osl.iu.edu</a>, <a class="last reference" href="mailto:witt@ive.uni-hannover.de">witt@ive.uni-hannover.de</a></td></tr>
|
<td><a class="first reference external" href="mailto:dave@boost-consulting.com">dave@boost-consulting.com</a>, <a class="reference external" href="mailto:jsiek@osl.iu.edu">jsiek@osl.iu.edu</a>, <a class="last reference external" href="mailto:witt@ive.uni-hannover.de">witt@ive.uni-hannover.de</a></td></tr>
|
||||||
<tr><th class="docinfo-name">Organization:</th>
|
<tr><th class="docinfo-name">Organization:</th>
|
||||||
<td><a class="first reference" href="http://www.boost-consulting.com">Boost Consulting</a>, Indiana University <a class="reference" href="http://www.osl.iu.edu">Open Systems
|
<td><a class="first reference external" href="http://www.boost-consulting.com">Boost Consulting</a>, Indiana University <a class="reference external" href="http://www.osl.iu.edu">Open Systems
|
||||||
Lab</a>, University of Hanover <a class="last reference" href="http://www.ive.uni-hannover.de">Institute for Transport
|
Lab</a>, University of Hanover <a class="last reference external" href="http://www.ive.uni-hannover.de">Institute for Transport
|
||||||
Railway Operation and Construction</a></td></tr>
|
Railway Operation and Construction</a></td></tr>
|
||||||
<tr><th class="docinfo-name">Date:</th>
|
<tr><th class="docinfo-name">Date:</th>
|
||||||
<td>2004-11-01</td></tr>
|
<td>2006-09-11</td></tr>
|
||||||
<tr><th class="docinfo-name">Copyright:</th>
|
<tr><th class="docinfo-name">Copyright:</th>
|
||||||
<td>Copyright David Abrahams, Jeremy Siek, and Thomas Witt 2003.</td></tr>
|
<td>Copyright David Abrahams, Jeremy Siek, and Thomas Witt 2003.</td></tr>
|
||||||
</tbody>
|
</tbody>
|
||||||
@ -339,18 +57,18 @@ are forwarded to the adapted object.</p>
|
|||||||
</tr>
|
</tr>
|
||||||
</tbody>
|
</tbody>
|
||||||
</table>
|
</table>
|
||||||
<div class="contents topic">
|
<div class="contents topic" id="table-of-contents">
|
||||||
<p class="topic-title first"><a id="table-of-contents" name="table-of-contents">Table of Contents</a></p>
|
<p class="topic-title first">Table of Contents</p>
|
||||||
<ul class="simple">
|
<ul class="simple">
|
||||||
<li><a class="reference" href="#counting-iterator-synopsis" id="id2" name="id2"><tt class="docutils literal"><span class="pre">counting_iterator</span></tt> synopsis</a></li>
|
<li><a class="reference internal" href="#counting-iterator-synopsis" id="id2"><tt class="docutils literal"><span class="pre">counting_iterator</span></tt> synopsis</a></li>
|
||||||
<li><a class="reference" href="#counting-iterator-requirements" id="id3" name="id3"><tt class="docutils literal"><span class="pre">counting_iterator</span></tt> requirements</a></li>
|
<li><a class="reference internal" href="#counting-iterator-requirements" id="id3"><tt class="docutils literal"><span class="pre">counting_iterator</span></tt> requirements</a></li>
|
||||||
<li><a class="reference" href="#counting-iterator-models" id="id4" name="id4"><tt class="docutils literal"><span class="pre">counting_iterator</span></tt> models</a></li>
|
<li><a class="reference internal" href="#counting-iterator-models" id="id4"><tt class="docutils literal"><span class="pre">counting_iterator</span></tt> models</a></li>
|
||||||
<li><a class="reference" href="#counting-iterator-operations" id="id5" name="id5"><tt class="docutils literal"><span class="pre">counting_iterator</span></tt> operations</a></li>
|
<li><a class="reference internal" href="#counting-iterator-operations" id="id5"><tt class="docutils literal"><span class="pre">counting_iterator</span></tt> operations</a></li>
|
||||||
<li><a class="reference" href="#example" id="id6" name="id6">Example</a></li>
|
<li><a class="reference internal" href="#example" id="id6">Example</a></li>
|
||||||
</ul>
|
</ul>
|
||||||
</div>
|
</div>
|
||||||
<div class="section">
|
<div class="section" id="counting-iterator-synopsis">
|
||||||
<h1><a class="toc-backref" href="#id2" id="counting-iterator-synopsis" name="counting-iterator-synopsis"><tt class="docutils literal"><span class="pre">counting_iterator</span></tt> synopsis</a></h1>
|
<h1><a class="toc-backref" href="#id2"><tt class="docutils literal"><span class="pre">counting_iterator</span></tt> synopsis</a></h1>
|
||||||
<!-- Copyright David Abrahams 2006. Distributed under the Boost -->
|
<!-- Copyright David Abrahams 2006. Distributed under the Boost -->
|
||||||
<!-- Software License, Version 1.0. (See accompanying -->
|
<!-- Software License, Version 1.0. (See accompanying -->
|
||||||
<!-- file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) -->
|
<!-- file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) -->
|
||||||
@ -389,10 +107,10 @@ algorithm:</p>
|
|||||||
if (CategoryOrTraversal is not use_default)
|
if (CategoryOrTraversal is not use_default)
|
||||||
return CategoryOrTraversal
|
return CategoryOrTraversal
|
||||||
else if (numeric_limits<Incrementable>::is_specialized)
|
else if (numeric_limits<Incrementable>::is_specialized)
|
||||||
return <a class="reference" href="iterator_facade.html#iterator-category"><em>iterator-category</em></a>(
|
return <a class="reference external" href="iterator_facade.html#iterator-category"><em>iterator-category</em></a>(
|
||||||
random_access_traversal_tag, Incrementable, const Incrementable&)
|
random_access_traversal_tag, Incrementable, const Incrementable&)
|
||||||
else
|
else
|
||||||
return <a class="reference" href="iterator_facade.html#iterator-category"><em>iterator-category</em></a>(
|
return <a class="reference external" href="iterator_facade.html#iterator-category"><em>iterator-category</em></a>(
|
||||||
iterator_traversal<Incrementable>::type,
|
iterator_traversal<Incrementable>::type,
|
||||||
Incrementable, const Incrementable&)
|
Incrementable, const Incrementable&)
|
||||||
</pre>
|
</pre>
|
||||||
@ -403,8 +121,8 @@ the cases where <tt class="docutils literal"><span class="pre">std::numeric_limi
|
|||||||
is true.]</dd>
|
is true.]</dd>
|
||||||
</dl>
|
</dl>
|
||||||
</div>
|
</div>
|
||||||
<div class="section">
|
<div class="section" id="counting-iterator-requirements">
|
||||||
<h1><a class="toc-backref" href="#id3" id="counting-iterator-requirements" name="counting-iterator-requirements"><tt class="docutils literal"><span class="pre">counting_iterator</span></tt> requirements</a></h1>
|
<h1><a class="toc-backref" href="#id3"><tt class="docutils literal"><span class="pre">counting_iterator</span></tt> requirements</a></h1>
|
||||||
<p>The <tt class="docutils literal"><span class="pre">Incrementable</span></tt> argument shall be Copy Constructible and Assignable.</p>
|
<p>The <tt class="docutils literal"><span class="pre">Incrementable</span></tt> argument shall be Copy Constructible and Assignable.</p>
|
||||||
<p>If <tt class="docutils literal"><span class="pre">iterator_category</span></tt> is convertible to <tt class="docutils literal"><span class="pre">forward_iterator_tag</span></tt>
|
<p>If <tt class="docutils literal"><span class="pre">iterator_category</span></tt> is convertible to <tt class="docutils literal"><span class="pre">forward_iterator_tag</span></tt>
|
||||||
or <tt class="docutils literal"><span class="pre">forward_traversal_tag</span></tt>, the following must be well-formed:</p>
|
or <tt class="docutils literal"><span class="pre">forward_traversal_tag</span></tt>, the following must be well-formed:</p>
|
||||||
@ -429,8 +147,8 @@ n = i - j;
|
|||||||
i < j;
|
i < j;
|
||||||
</pre>
|
</pre>
|
||||||
</div>
|
</div>
|
||||||
<div class="section">
|
<div class="section" id="counting-iterator-models">
|
||||||
<h1><a class="toc-backref" href="#id4" id="counting-iterator-models" name="counting-iterator-models"><tt class="docutils literal"><span class="pre">counting_iterator</span></tt> models</a></h1>
|
<h1><a class="toc-backref" href="#id4"><tt class="docutils literal"><span class="pre">counting_iterator</span></tt> models</a></h1>
|
||||||
<p>Specializations of <tt class="docutils literal"><span class="pre">counting_iterator</span></tt> model Readable Lvalue
|
<p>Specializations of <tt class="docutils literal"><span class="pre">counting_iterator</span></tt> model Readable Lvalue
|
||||||
Iterator. In addition, they model the concepts corresponding to the
|
Iterator. In addition, they model the concepts corresponding to the
|
||||||
iterator tags to which their <tt class="docutils literal"><span class="pre">iterator_category</span></tt> is convertible.
|
iterator tags to which their <tt class="docutils literal"><span class="pre">iterator_category</span></tt> is convertible.
|
||||||
@ -445,8 +163,8 @@ concepts modeled by <tt class="docutils literal"><span class="pre">Incrementable
|
|||||||
<tt class="docutils literal"><span class="pre">counting_iterator<Y,C2,D2></span></tt> if and only if <tt class="docutils literal"><span class="pre">X</span></tt> is
|
<tt class="docutils literal"><span class="pre">counting_iterator<Y,C2,D2></span></tt> if and only if <tt class="docutils literal"><span class="pre">X</span></tt> is
|
||||||
interoperable with <tt class="docutils literal"><span class="pre">Y</span></tt>.</p>
|
interoperable with <tt class="docutils literal"><span class="pre">Y</span></tt>.</p>
|
||||||
</div>
|
</div>
|
||||||
<div class="section">
|
<div class="section" id="counting-iterator-operations">
|
||||||
<h1><a class="toc-backref" href="#id5" id="counting-iterator-operations" name="counting-iterator-operations"><tt class="docutils literal"><span class="pre">counting_iterator</span></tt> operations</a></h1>
|
<h1><a class="toc-backref" href="#id5"><tt class="docutils literal"><span class="pre">counting_iterator</span></tt> operations</a></h1>
|
||||||
<p>In addition to the operations required by the concepts modeled by
|
<p>In addition to the operations required by the concepts modeled by
|
||||||
<tt class="docutils literal"><span class="pre">counting_iterator</span></tt>, <tt class="docutils literal"><span class="pre">counting_iterator</span></tt> provides the following
|
<tt class="docutils literal"><span class="pre">counting_iterator</span></tt>, <tt class="docutils literal"><span class="pre">counting_iterator</span></tt> provides the following
|
||||||
operations.</p>
|
operations.</p>
|
||||||
@ -539,8 +257,8 @@ with <tt class="docutils literal"><span class="pre">current</span></tt> construc
|
|||||||
<!-- Software License, Version 1.0. (See accompanying -->
|
<!-- Software License, Version 1.0. (See accompanying -->
|
||||||
<!-- file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) -->
|
<!-- file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) -->
|
||||||
</div>
|
</div>
|
||||||
<div class="section">
|
<div class="section" id="example">
|
||||||
<h1><a class="toc-backref" href="#id6" id="example" name="example">Example</a></h1>
|
<h1><a class="toc-backref" href="#id6">Example</a></h1>
|
||||||
<p>This example fills an array with numbers and a second array with
|
<p>This example fills an array with numbers and a second array with
|
||||||
pointers into the first array, using <tt class="docutils literal"><span class="pre">counting_iterator</span></tt> for both
|
pointers into the first array, using <tt class="docutils literal"><span class="pre">counting_iterator</span></tt> for both
|
||||||
tasks. Finally <tt class="docutils literal"><span class="pre">indirect_iterator</span></tt> is used to print out the numbers
|
tasks. Finally <tt class="docutils literal"><span class="pre">indirect_iterator</span></tt> is used to print out the numbers
|
||||||
@ -570,8 +288,14 @@ std::cout << std::endl;
|
|||||||
indirectly printing out the numbers from 0 to 7
|
indirectly printing out the numbers from 0 to 7
|
||||||
0 1 2 3 4 5 6
|
0 1 2 3 4 5 6
|
||||||
</pre>
|
</pre>
|
||||||
<p>The source code for this example can be found <a class="reference" href="../example/counting_iterator_example.cpp">here</a>.</p>
|
<p>The source code for this example can be found <a class="reference external" href="../example/counting_iterator_example.cpp">here</a>.</p>
|
||||||
</div>
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="footer">
|
||||||
|
<hr class="footer" />
|
||||||
|
<a class="reference external" href="counting_iterator.rst">View document source</a>.
|
||||||
|
Generated by <a class="reference external" href="http://docutils.sourceforge.net/">Docutils</a> from <a class="reference external" href="http://docutils.sourceforge.net/rst.html">reStructuredText</a> source.
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
</body>
|
</body>
|
||||||
</html>
|
</html>
|
||||||
|
0
doc/counting_iterator.pdf
Executable file → Normal file
0
doc/counting_iterator.pdf
Executable file → Normal file
72
doc/distance.rst
Normal file
72
doc/distance.rst
Normal file
@ -0,0 +1,72 @@
|
|||||||
|
.. Copyright (C) 2017 Michel Morin.
|
||||||
|
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)
|
||||||
|
|
||||||
|
========
|
||||||
|
distance
|
||||||
|
========
|
||||||
|
|
||||||
|
``boost::iterators::distance`` is an adapted version of ``std::distance`` for
|
||||||
|
the Boost iterator traversal concepts.
|
||||||
|
|
||||||
|
|
||||||
|
Header
|
||||||
|
------
|
||||||
|
|
||||||
|
``<boost/iterator/distance.hpp>``
|
||||||
|
|
||||||
|
|
||||||
|
Synopsis
|
||||||
|
--------
|
||||||
|
|
||||||
|
::
|
||||||
|
|
||||||
|
template <typename Iterator>
|
||||||
|
constexpr typename iterator_difference<Iterator>::type
|
||||||
|
distance(Iterator first, Iterator last);
|
||||||
|
|
||||||
|
|
||||||
|
Description
|
||||||
|
-----------
|
||||||
|
|
||||||
|
Computes the (signed) distance from ``first`` to ``last``.
|
||||||
|
|
||||||
|
|
||||||
|
Requirements
|
||||||
|
------------
|
||||||
|
|
||||||
|
``Iterator`` should model Single Pass Iterator.
|
||||||
|
|
||||||
|
|
||||||
|
Preconditions
|
||||||
|
-------------
|
||||||
|
|
||||||
|
If ``Iterator`` models Random Access Traversal Iterator,
|
||||||
|
``[first, last)`` or ``[last, first)`` should be valid;
|
||||||
|
otherwise ``[first, last)`` should be valid.
|
||||||
|
|
||||||
|
|
||||||
|
Complexity
|
||||||
|
----------
|
||||||
|
|
||||||
|
If ``Iterator`` models Random Access Traversal Iterator, it takes constant time;
|
||||||
|
otherwise it takes linear time.
|
||||||
|
|
||||||
|
|
||||||
|
Notes
|
||||||
|
-----
|
||||||
|
|
||||||
|
- This function is not a customization point and is protected against
|
||||||
|
being found by argument-dependent lookup (ADL).
|
||||||
|
- This function is ``constexpr`` only in C++14 or later.
|
||||||
|
|
||||||
|
|
||||||
|
--------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
| Author: Michel Morin
|
||||||
|
| Copyright |C| 2017 Michel Morin
|
||||||
|
| Distributed under the `Boost Software License, Version 1.0
|
||||||
|
<http://www.boost.org/LICENSE_1_0.txt>`_.
|
||||||
|
|
||||||
|
.. |C| unicode:: U+00A9 .. COPYRIGHT SIGN
|
0
doc/docutils.sty
Executable file → Normal file
0
doc/docutils.sty
Executable file → Normal file
716
doc/facade-and-adaptor.html
Executable file → Normal file
716
doc/facade-and-adaptor.html
Executable file → Normal file
File diff suppressed because it is too large
Load Diff
0
doc/facade-and-adaptor.pdf
Executable file → Normal file
0
doc/facade-and-adaptor.pdf
Executable file → Normal file
@ -19,7 +19,7 @@
|
|||||||
.. Version 1.9 of this ReStructuredText document corresponds to
|
.. Version 1.9 of this ReStructuredText document corresponds to
|
||||||
n1530_, the paper accepted by the LWG.
|
n1530_, the paper accepted by the LWG.
|
||||||
|
|
||||||
.. _n1530: http://anubis.dkuug.dk/jtc1/sc22/wg21/docs/papers/2003/n1530.html
|
.. _n1530: http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2003/n1530.html
|
||||||
|
|
||||||
:copyright: Copyright David Abrahams, Jeremy Siek, and Thomas Witt 2003.
|
:copyright: Copyright David Abrahams, Jeremy Siek, and Thomas Witt 2003.
|
||||||
|
|
||||||
@ -140,7 +140,7 @@ as proposed in n1550_, since user-defined and especially adapted
|
|||||||
iterators suffer from the well known categorization problems that are
|
iterators suffer from the well known categorization problems that are
|
||||||
inherent to the current iterator categories.
|
inherent to the current iterator categories.
|
||||||
|
|
||||||
.. _n1550: http://anubis.dkuug.dk/JTC1/SC22/WG21/docs/papers/2003/n1550.html
|
.. _n1550: http://www.open-std.org/JTC1/SC22/WG21/docs/papers/2003/n1550.htm
|
||||||
|
|
||||||
This proposal does not strictly depend on proposal n1550_, as there
|
This proposal does not strictly depend on proposal n1550_, as there
|
||||||
is a direct mapping between new and old categories. This proposal
|
is a direct mapping between new and old categories. This proposal
|
||||||
@ -169,8 +169,8 @@ reverse iterator types. The proposed new reverse_iterator template
|
|||||||
fixes the issues raised in 280. It provides the desired
|
fixes the issues raised in 280. It provides the desired
|
||||||
interoperability without introducing unwanted overloads.
|
interoperability without introducing unwanted overloads.
|
||||||
|
|
||||||
.. _179: http://anubis.dkuug.dk/jtc1/sc22/wg21/docs/lwg-defects.html#179
|
.. _179: http://www.open-std.org/jtc1/sc22/wg21/docs/lwg-defects.html#179
|
||||||
.. _280: http://anubis.dkuug.dk/jtc1/sc22/wg21/docs/lwg-active.html#280
|
.. _280: http://www.open-std.org/jtc1/sc22/wg21/docs/lwg-active.html#280
|
||||||
|
|
||||||
|
|
||||||
Iterator Facade
|
Iterator Facade
|
||||||
|
0
doc/facade_iterator_category.rst
Executable file → Normal file
0
doc/facade_iterator_category.rst
Executable file → Normal file
@ -3,295 +3,13 @@
|
|||||||
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
|
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
|
||||||
<head>
|
<head>
|
||||||
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
|
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
|
||||||
<meta name="generator" content="Docutils 0.4: http://docutils.sourceforge.net/" />
|
<meta name="generator" content="Docutils 0.5: http://docutils.sourceforge.net/" />
|
||||||
<title>Filter Iterator</title>
|
<title>Filter Iterator</title>
|
||||||
<meta name="author" content="David Abrahams, Jeremy Siek, Thomas Witt" />
|
<meta name="author" content="David Abrahams, Jeremy Siek, Thomas Witt" />
|
||||||
<meta name="organization" content="Boost Consulting, Indiana University Open Systems Lab, University of Hanover Institute for Transport Railway Operation and Construction" />
|
<meta name="organization" content="Boost Consulting, Indiana University Open Systems Lab, University of Hanover Institute for Transport Railway Operation and Construction" />
|
||||||
<meta name="date" content="2004-11-01" />
|
<meta name="date" content="2006-09-11" />
|
||||||
<meta name="copyright" content="Copyright David Abrahams, Jeremy Siek, and Thomas Witt 2003." />
|
<meta name="copyright" content="Copyright David Abrahams, Jeremy Siek, and Thomas Witt 2003." />
|
||||||
<style type="text/css">
|
<link rel="stylesheet" href="../../../rst.css" type="text/css" />
|
||||||
|
|
||||||
/*
|
|
||||||
:Author: David Goodger
|
|
||||||
:Contact: goodger@users.sourceforge.net
|
|
||||||
:Date: $Date$
|
|
||||||
:Revision: $Revision$
|
|
||||||
:Copyright: This stylesheet has been placed in the public domain.
|
|
||||||
|
|
||||||
Default cascading style sheet for the HTML output of Docutils.
|
|
||||||
|
|
||||||
See http://docutils.sf.net/docs/howto/html-stylesheets.html for how to
|
|
||||||
customize this style sheet.
|
|
||||||
*/
|
|
||||||
|
|
||||||
/* used to remove borders from tables and images */
|
|
||||||
.borderless, table.borderless td, table.borderless th {
|
|
||||||
border: 0 }
|
|
||||||
|
|
||||||
table.borderless td, table.borderless th {
|
|
||||||
/* Override padding for "table.docutils td" with "! important".
|
|
||||||
The right padding separates the table cells. */
|
|
||||||
padding: 0 0.5em 0 0 ! important }
|
|
||||||
|
|
||||||
.first {
|
|
||||||
/* Override more specific margin styles with "! important". */
|
|
||||||
margin-top: 0 ! important }
|
|
||||||
|
|
||||||
.last, .with-subtitle {
|
|
||||||
margin-bottom: 0 ! important }
|
|
||||||
|
|
||||||
.hidden {
|
|
||||||
display: none }
|
|
||||||
|
|
||||||
a.toc-backref {
|
|
||||||
text-decoration: none ;
|
|
||||||
color: black }
|
|
||||||
|
|
||||||
blockquote.epigraph {
|
|
||||||
margin: 2em 5em ; }
|
|
||||||
|
|
||||||
dl.docutils dd {
|
|
||||||
margin-bottom: 0.5em }
|
|
||||||
|
|
||||||
/* Uncomment (and remove this text!) to get bold-faced definition list terms
|
|
||||||
dl.docutils dt {
|
|
||||||
font-weight: bold }
|
|
||||||
*/
|
|
||||||
|
|
||||||
div.abstract {
|
|
||||||
margin: 2em 5em }
|
|
||||||
|
|
||||||
div.abstract p.topic-title {
|
|
||||||
font-weight: bold ;
|
|
||||||
text-align: center }
|
|
||||||
|
|
||||||
div.admonition, div.attention, div.caution, div.danger, div.error,
|
|
||||||
div.hint, div.important, div.note, div.tip, div.warning {
|
|
||||||
margin: 2em ;
|
|
||||||
border: medium outset ;
|
|
||||||
padding: 1em }
|
|
||||||
|
|
||||||
div.admonition p.admonition-title, div.hint p.admonition-title,
|
|
||||||
div.important p.admonition-title, div.note p.admonition-title,
|
|
||||||
div.tip p.admonition-title {
|
|
||||||
font-weight: bold ;
|
|
||||||
font-family: sans-serif }
|
|
||||||
|
|
||||||
div.attention p.admonition-title, div.caution p.admonition-title,
|
|
||||||
div.danger p.admonition-title, div.error p.admonition-title,
|
|
||||||
div.warning p.admonition-title {
|
|
||||||
color: red ;
|
|
||||||
font-weight: bold ;
|
|
||||||
font-family: sans-serif }
|
|
||||||
|
|
||||||
/* Uncomment (and remove this text!) to get reduced vertical space in
|
|
||||||
compound paragraphs.
|
|
||||||
div.compound .compound-first, div.compound .compound-middle {
|
|
||||||
margin-bottom: 0.5em }
|
|
||||||
|
|
||||||
div.compound .compound-last, div.compound .compound-middle {
|
|
||||||
margin-top: 0.5em }
|
|
||||||
*/
|
|
||||||
|
|
||||||
div.dedication {
|
|
||||||
margin: 2em 5em ;
|
|
||||||
text-align: center ;
|
|
||||||
font-style: italic }
|
|
||||||
|
|
||||||
div.dedication p.topic-title {
|
|
||||||
font-weight: bold ;
|
|
||||||
font-style: normal }
|
|
||||||
|
|
||||||
div.figure {
|
|
||||||
margin-left: 2em ;
|
|
||||||
margin-right: 2em }
|
|
||||||
|
|
||||||
div.footer, div.header {
|
|
||||||
clear: both;
|
|
||||||
font-size: smaller }
|
|
||||||
|
|
||||||
div.line-block {
|
|
||||||
display: block ;
|
|
||||||
margin-top: 1em ;
|
|
||||||
margin-bottom: 1em }
|
|
||||||
|
|
||||||
div.line-block div.line-block {
|
|
||||||
margin-top: 0 ;
|
|
||||||
margin-bottom: 0 ;
|
|
||||||
margin-left: 1.5em }
|
|
||||||
|
|
||||||
div.sidebar {
|
|
||||||
margin-left: 1em ;
|
|
||||||
border: medium outset ;
|
|
||||||
padding: 1em ;
|
|
||||||
background-color: #ffffee ;
|
|
||||||
width: 40% ;
|
|
||||||
float: right ;
|
|
||||||
clear: right }
|
|
||||||
|
|
||||||
div.sidebar p.rubric {
|
|
||||||
font-family: sans-serif ;
|
|
||||||
font-size: medium }
|
|
||||||
|
|
||||||
div.system-messages {
|
|
||||||
margin: 5em }
|
|
||||||
|
|
||||||
div.system-messages h1 {
|
|
||||||
color: red }
|
|
||||||
|
|
||||||
div.system-message {
|
|
||||||
border: medium outset ;
|
|
||||||
padding: 1em }
|
|
||||||
|
|
||||||
div.system-message p.system-message-title {
|
|
||||||
color: red ;
|
|
||||||
font-weight: bold }
|
|
||||||
|
|
||||||
div.topic {
|
|
||||||
margin: 2em }
|
|
||||||
|
|
||||||
h1.section-subtitle, h2.section-subtitle, h3.section-subtitle,
|
|
||||||
h4.section-subtitle, h5.section-subtitle, h6.section-subtitle {
|
|
||||||
margin-top: 0.4em }
|
|
||||||
|
|
||||||
h1.title {
|
|
||||||
text-align: center }
|
|
||||||
|
|
||||||
h2.subtitle {
|
|
||||||
text-align: center }
|
|
||||||
|
|
||||||
hr.docutils {
|
|
||||||
width: 75% }
|
|
||||||
|
|
||||||
img.align-left {
|
|
||||||
clear: left }
|
|
||||||
|
|
||||||
img.align-right {
|
|
||||||
clear: right }
|
|
||||||
|
|
||||||
ol.simple, ul.simple {
|
|
||||||
margin-bottom: 1em }
|
|
||||||
|
|
||||||
ol.arabic {
|
|
||||||
list-style: decimal }
|
|
||||||
|
|
||||||
ol.loweralpha {
|
|
||||||
list-style: lower-alpha }
|
|
||||||
|
|
||||||
ol.upperalpha {
|
|
||||||
list-style: upper-alpha }
|
|
||||||
|
|
||||||
ol.lowerroman {
|
|
||||||
list-style: lower-roman }
|
|
||||||
|
|
||||||
ol.upperroman {
|
|
||||||
list-style: upper-roman }
|
|
||||||
|
|
||||||
p.attribution {
|
|
||||||
text-align: right ;
|
|
||||||
margin-left: 50% }
|
|
||||||
|
|
||||||
p.caption {
|
|
||||||
font-style: italic }
|
|
||||||
|
|
||||||
p.credits {
|
|
||||||
font-style: italic ;
|
|
||||||
font-size: smaller }
|
|
||||||
|
|
||||||
p.label {
|
|
||||||
white-space: nowrap }
|
|
||||||
|
|
||||||
p.rubric {
|
|
||||||
font-weight: bold ;
|
|
||||||
font-size: larger ;
|
|
||||||
color: maroon ;
|
|
||||||
text-align: center }
|
|
||||||
|
|
||||||
p.sidebar-title {
|
|
||||||
font-family: sans-serif ;
|
|
||||||
font-weight: bold ;
|
|
||||||
font-size: larger }
|
|
||||||
|
|
||||||
p.sidebar-subtitle {
|
|
||||||
font-family: sans-serif ;
|
|
||||||
font-weight: bold }
|
|
||||||
|
|
||||||
p.topic-title {
|
|
||||||
font-weight: bold }
|
|
||||||
|
|
||||||
pre.address {
|
|
||||||
margin-bottom: 0 ;
|
|
||||||
margin-top: 0 ;
|
|
||||||
font-family: serif ;
|
|
||||||
font-size: 100% }
|
|
||||||
|
|
||||||
pre.literal-block, pre.doctest-block {
|
|
||||||
margin-left: 2em ;
|
|
||||||
margin-right: 2em ;
|
|
||||||
background-color: #eeeeee }
|
|
||||||
|
|
||||||
span.classifier {
|
|
||||||
font-family: sans-serif ;
|
|
||||||
font-style: oblique }
|
|
||||||
|
|
||||||
span.classifier-delimiter {
|
|
||||||
font-family: sans-serif ;
|
|
||||||
font-weight: bold }
|
|
||||||
|
|
||||||
span.interpreted {
|
|
||||||
font-family: sans-serif }
|
|
||||||
|
|
||||||
span.option {
|
|
||||||
white-space: nowrap }
|
|
||||||
|
|
||||||
span.pre {
|
|
||||||
white-space: pre }
|
|
||||||
|
|
||||||
span.problematic {
|
|
||||||
color: red }
|
|
||||||
|
|
||||||
span.section-subtitle {
|
|
||||||
/* font-size relative to parent (h1..h6 element) */
|
|
||||||
font-size: 80% }
|
|
||||||
|
|
||||||
table.citation {
|
|
||||||
border-left: solid 1px gray;
|
|
||||||
margin-left: 1px }
|
|
||||||
|
|
||||||
table.docinfo {
|
|
||||||
margin: 2em 4em }
|
|
||||||
|
|
||||||
table.docutils {
|
|
||||||
margin-top: 0.5em ;
|
|
||||||
margin-bottom: 0.5em }
|
|
||||||
|
|
||||||
table.footnote {
|
|
||||||
border-left: solid 1px black;
|
|
||||||
margin-left: 1px }
|
|
||||||
|
|
||||||
table.docutils td, table.docutils th,
|
|
||||||
table.docinfo td, table.docinfo th {
|
|
||||||
padding-left: 0.5em ;
|
|
||||||
padding-right: 0.5em ;
|
|
||||||
vertical-align: top }
|
|
||||||
|
|
||||||
table.docutils th.field-name, table.docinfo th.docinfo-name {
|
|
||||||
font-weight: bold ;
|
|
||||||
text-align: left ;
|
|
||||||
white-space: nowrap ;
|
|
||||||
padding-left: 0 }
|
|
||||||
|
|
||||||
h1 tt.docutils, h2 tt.docutils, h3 tt.docutils,
|
|
||||||
h4 tt.docutils, h5 tt.docutils, h6 tt.docutils {
|
|
||||||
font-size: 100% }
|
|
||||||
|
|
||||||
tt.docutils {
|
|
||||||
background-color: #eeeeee }
|
|
||||||
|
|
||||||
ul.auto-toc {
|
|
||||||
list-style-type: none }
|
|
||||||
|
|
||||||
</style>
|
|
||||||
</head>
|
</head>
|
||||||
<body>
|
<body>
|
||||||
<div class="document" id="filter-iterator">
|
<div class="document" id="filter-iterator">
|
||||||
@ -303,13 +21,13 @@ ul.auto-toc {
|
|||||||
<tr><th class="docinfo-name">Author:</th>
|
<tr><th class="docinfo-name">Author:</th>
|
||||||
<td>David Abrahams, Jeremy Siek, Thomas Witt</td></tr>
|
<td>David Abrahams, Jeremy Siek, Thomas Witt</td></tr>
|
||||||
<tr><th class="docinfo-name">Contact:</th>
|
<tr><th class="docinfo-name">Contact:</th>
|
||||||
<td><a class="first reference" href="mailto:dave@boost-consulting.com">dave@boost-consulting.com</a>, <a class="reference" href="mailto:jsiek@osl.iu.edu">jsiek@osl.iu.edu</a>, <a class="last reference" href="mailto:witt@ive.uni-hannover.de">witt@ive.uni-hannover.de</a></td></tr>
|
<td><a class="first reference external" href="mailto:dave@boost-consulting.com">dave@boost-consulting.com</a>, <a class="reference external" href="mailto:jsiek@osl.iu.edu">jsiek@osl.iu.edu</a>, <a class="last reference external" href="mailto:witt@ive.uni-hannover.de">witt@ive.uni-hannover.de</a></td></tr>
|
||||||
<tr><th class="docinfo-name">Organization:</th>
|
<tr><th class="docinfo-name">Organization:</th>
|
||||||
<td><a class="first reference" href="http://www.boost-consulting.com">Boost Consulting</a>, Indiana University <a class="reference" href="http://www.osl.iu.edu">Open Systems
|
<td><a class="first reference external" href="http://www.boost-consulting.com">Boost Consulting</a>, Indiana University <a class="reference external" href="http://www.osl.iu.edu">Open Systems
|
||||||
Lab</a>, University of Hanover <a class="last reference" href="http://www.ive.uni-hannover.de">Institute for Transport
|
Lab</a>, University of Hanover <a class="last reference external" href="http://www.ive.uni-hannover.de">Institute for Transport
|
||||||
Railway Operation and Construction</a></td></tr>
|
Railway Operation and Construction</a></td></tr>
|
||||||
<tr><th class="docinfo-name">Date:</th>
|
<tr><th class="docinfo-name">Date:</th>
|
||||||
<td>2004-11-01</td></tr>
|
<td>2006-09-11</td></tr>
|
||||||
<tr><th class="docinfo-name">Copyright:</th>
|
<tr><th class="docinfo-name">Copyright:</th>
|
||||||
<td>Copyright David Abrahams, Jeremy Siek, and Thomas Witt 2003.</td></tr>
|
<td>Copyright David Abrahams, Jeremy Siek, and Thomas Witt 2003.</td></tr>
|
||||||
</tbody>
|
</tbody>
|
||||||
@ -337,18 +55,18 @@ sequence to be traversed.</td>
|
|||||||
</tr>
|
</tr>
|
||||||
</tbody>
|
</tbody>
|
||||||
</table>
|
</table>
|
||||||
<div class="contents topic">
|
<div class="contents topic" id="table-of-contents">
|
||||||
<p class="topic-title first"><a id="table-of-contents" name="table-of-contents">Table of Contents</a></p>
|
<p class="topic-title first">Table of Contents</p>
|
||||||
<ul class="simple">
|
<ul class="simple">
|
||||||
<li><a class="reference" href="#filter-iterator-synopsis" id="id2" name="id2"><tt class="docutils literal"><span class="pre">filter_iterator</span></tt> synopsis</a></li>
|
<li><a class="reference internal" href="#filter-iterator-synopsis" id="id2"><tt class="docutils literal"><span class="pre">filter_iterator</span></tt> synopsis</a></li>
|
||||||
<li><a class="reference" href="#filter-iterator-requirements" id="id3" name="id3"><tt class="docutils literal"><span class="pre">filter_iterator</span></tt> requirements</a></li>
|
<li><a class="reference internal" href="#filter-iterator-requirements" id="id3"><tt class="docutils literal"><span class="pre">filter_iterator</span></tt> requirements</a></li>
|
||||||
<li><a class="reference" href="#filter-iterator-models" id="id4" name="id4"><tt class="docutils literal"><span class="pre">filter_iterator</span></tt> models</a></li>
|
<li><a class="reference internal" href="#filter-iterator-models" id="id4"><tt class="docutils literal"><span class="pre">filter_iterator</span></tt> models</a></li>
|
||||||
<li><a class="reference" href="#filter-iterator-operations" id="id5" name="id5"><tt class="docutils literal"><span class="pre">filter_iterator</span></tt> operations</a></li>
|
<li><a class="reference internal" href="#filter-iterator-operations" id="id5"><tt class="docutils literal"><span class="pre">filter_iterator</span></tt> operations</a></li>
|
||||||
<li><a class="reference" href="#example" id="id6" name="id6">Example</a></li>
|
<li><a class="reference internal" href="#example" id="id6">Example</a></li>
|
||||||
</ul>
|
</ul>
|
||||||
</div>
|
</div>
|
||||||
<div class="section">
|
<div class="section" id="filter-iterator-synopsis">
|
||||||
<h1><a class="toc-backref" href="#id2" id="filter-iterator-synopsis" name="filter-iterator-synopsis"><tt class="docutils literal"><span class="pre">filter_iterator</span></tt> synopsis</a></h1>
|
<h1><a class="toc-backref" href="#id2"><tt class="docutils literal"><span class="pre">filter_iterator</span></tt> synopsis</a></h1>
|
||||||
<!-- Copyright David Abrahams, Jeremy Siek, and Thomas Witt -->
|
<!-- Copyright David Abrahams, Jeremy Siek, and Thomas Witt -->
|
||||||
<!-- 2004. Use, modification and distribution is subject to the Boost -->
|
<!-- 2004. Use, modification and distribution is subject to the Boost -->
|
||||||
<!-- Software License, Version 1.0. (See accompanying file -->
|
<!-- Software License, Version 1.0. (See accompanying file -->
|
||||||
@ -392,8 +110,8 @@ Iterator then <tt class="docutils literal"><span class="pre">iterator_category</
|
|||||||
Otherwise <tt class="docutils literal"><span class="pre">iterator_category</span></tt> is
|
Otherwise <tt class="docutils literal"><span class="pre">iterator_category</span></tt> is
|
||||||
convertible to <tt class="docutils literal"><span class="pre">std::input_iterator_tag</span></tt>.</p>
|
convertible to <tt class="docutils literal"><span class="pre">std::input_iterator_tag</span></tt>.</p>
|
||||||
</div>
|
</div>
|
||||||
<div class="section">
|
<div class="section" id="filter-iterator-requirements">
|
||||||
<h1><a class="toc-backref" href="#id3" id="filter-iterator-requirements" name="filter-iterator-requirements"><tt class="docutils literal"><span class="pre">filter_iterator</span></tt> requirements</a></h1>
|
<h1><a class="toc-backref" href="#id3"><tt class="docutils literal"><span class="pre">filter_iterator</span></tt> requirements</a></h1>
|
||||||
<p>The <tt class="docutils literal"><span class="pre">Iterator</span></tt> argument shall meet the requirements of Readable
|
<p>The <tt class="docutils literal"><span class="pre">Iterator</span></tt> argument shall meet the requirements of Readable
|
||||||
Iterator and Single Pass Iterator or it shall meet the requirements of
|
Iterator and Single Pass Iterator or it shall meet the requirements of
|
||||||
Input Iterator.</p>
|
Input Iterator.</p>
|
||||||
@ -403,8 +121,8 @@ the expression <tt class="docutils literal"><span class="pre">p(x)</span></tt> m
|
|||||||
<tt class="docutils literal"><span class="pre">iterator_traits<Iterator>::value_type</span></tt>, and where the type of
|
<tt class="docutils literal"><span class="pre">iterator_traits<Iterator>::value_type</span></tt>, and where the type of
|
||||||
<tt class="docutils literal"><span class="pre">p(x)</span></tt> must be convertible to <tt class="docutils literal"><span class="pre">bool</span></tt>.</p>
|
<tt class="docutils literal"><span class="pre">p(x)</span></tt> must be convertible to <tt class="docutils literal"><span class="pre">bool</span></tt>.</p>
|
||||||
</div>
|
</div>
|
||||||
<div class="section">
|
<div class="section" id="filter-iterator-models">
|
||||||
<h1><a class="toc-backref" href="#id4" id="filter-iterator-models" name="filter-iterator-models"><tt class="docutils literal"><span class="pre">filter_iterator</span></tt> models</a></h1>
|
<h1><a class="toc-backref" href="#id4"><tt class="docutils literal"><span class="pre">filter_iterator</span></tt> models</a></h1>
|
||||||
<p>The concepts that <tt class="docutils literal"><span class="pre">filter_iterator</span></tt> models are dependent on which
|
<p>The concepts that <tt class="docutils literal"><span class="pre">filter_iterator</span></tt> models are dependent on which
|
||||||
concepts the <tt class="docutils literal"><span class="pre">Iterator</span></tt> argument models, as specified in the
|
concepts the <tt class="docutils literal"><span class="pre">Iterator</span></tt> argument models, as specified in the
|
||||||
following tables.</p>
|
following tables.</p>
|
||||||
@ -480,8 +198,8 @@ following tables.</p>
|
|||||||
<p><tt class="docutils literal"><span class="pre">filter_iterator<P1,</span> <span class="pre">X></span></tt> is interoperable with <tt class="docutils literal"><span class="pre">filter_iterator<P2,</span> <span class="pre">Y></span></tt>
|
<p><tt class="docutils literal"><span class="pre">filter_iterator<P1,</span> <span class="pre">X></span></tt> is interoperable with <tt class="docutils literal"><span class="pre">filter_iterator<P2,</span> <span class="pre">Y></span></tt>
|
||||||
if and only if <tt class="docutils literal"><span class="pre">X</span></tt> is interoperable with <tt class="docutils literal"><span class="pre">Y</span></tt>.</p>
|
if and only if <tt class="docutils literal"><span class="pre">X</span></tt> is interoperable with <tt class="docutils literal"><span class="pre">Y</span></tt>.</p>
|
||||||
</div>
|
</div>
|
||||||
<div class="section">
|
<div class="section" id="filter-iterator-operations">
|
||||||
<h1><a class="toc-backref" href="#id5" id="filter-iterator-operations" name="filter-iterator-operations"><tt class="docutils literal"><span class="pre">filter_iterator</span></tt> operations</a></h1>
|
<h1><a class="toc-backref" href="#id5"><tt class="docutils literal"><span class="pre">filter_iterator</span></tt> operations</a></h1>
|
||||||
<p>In addition to those operations required by the concepts that
|
<p>In addition to those operations required by the concepts that
|
||||||
<tt class="docutils literal"><span class="pre">filter_iterator</span></tt> models, <tt class="docutils literal"><span class="pre">filter_iterator</span></tt> provides the following
|
<tt class="docutils literal"><span class="pre">filter_iterator</span></tt> models, <tt class="docutils literal"><span class="pre">filter_iterator</span></tt> provides the following
|
||||||
operations.</p>
|
operations.</p>
|
||||||
@ -622,8 +340,8 @@ make_filter_iterator(Iterator x, Iterator end = Iterator());
|
|||||||
<!-- Software License, Version 1.0. (See accompanying -->
|
<!-- Software License, Version 1.0. (See accompanying -->
|
||||||
<!-- file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) -->
|
<!-- file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) -->
|
||||||
</div>
|
</div>
|
||||||
<div class="section">
|
<div class="section" id="example">
|
||||||
<h1><a class="toc-backref" href="#id6" id="example" name="example">Example</a></h1>
|
<h1><a class="toc-backref" href="#id6">Example</a></h1>
|
||||||
<p>This example uses <tt class="docutils literal"><span class="pre">filter_iterator</span></tt> and then
|
<p>This example uses <tt class="docutils literal"><span class="pre">filter_iterator</span></tt> and then
|
||||||
<tt class="docutils literal"><span class="pre">make_filter_iterator</span></tt> to output only the positive integers from an
|
<tt class="docutils literal"><span class="pre">make_filter_iterator</span></tt> to output only the positive integers from an
|
||||||
array of integers. Then <tt class="docutils literal"><span class="pre">make_filter_iterator</span></tt> is is used to output
|
array of integers. Then <tt class="docutils literal"><span class="pre">make_filter_iterator</span></tt> is is used to output
|
||||||
@ -682,8 +400,14 @@ int main()
|
|||||||
4 5 8
|
4 5 8
|
||||||
0 -1 4 5 8
|
0 -1 4 5 8
|
||||||
</pre>
|
</pre>
|
||||||
<p>The source code for this example can be found <a class="reference" href="../example/filter_iterator_example.cpp">here</a>.</p>
|
<p>The source code for this example can be found <a class="reference external" href="../example/filter_iterator_example.cpp">here</a>.</p>
|
||||||
</div>
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="footer">
|
||||||
|
<hr class="footer" />
|
||||||
|
<a class="reference external" href="filter_iterator.rst">View document source</a>.
|
||||||
|
Generated by <a class="reference external" href="http://docutils.sourceforge.net/">Docutils</a> from <a class="reference external" href="http://docutils.sourceforge.net/rst.html">reStructuredText</a> source.
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
</body>
|
</body>
|
||||||
</html>
|
</html>
|
||||||
|
0
doc/filter_iterator.pdf
Executable file → Normal file
0
doc/filter_iterator.pdf
Executable file → Normal file
142
doc/function_input_iterator.html
Normal file
142
doc/function_input_iterator.html
Normal file
@ -0,0 +1,142 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8" ?>
|
||||||
|
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
||||||
|
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
|
||||||
|
<head>
|
||||||
|
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
|
||||||
|
<meta name="generator" content="Docutils 0.6: http://docutils.sourceforge.net/" />
|
||||||
|
<title></title>
|
||||||
|
<meta name="author" content="Dean Michael Berris" />
|
||||||
|
<link rel="stylesheet" href="../../../rst.css" type="text/css" />
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
<div class="document">
|
||||||
|
|
||||||
|
<table class="docinfo" frame="void" rules="none">
|
||||||
|
<col class="docinfo-name" />
|
||||||
|
<col class="docinfo-content" />
|
||||||
|
<tbody valign="top">
|
||||||
|
<tr><th class="docinfo-name">Author:</th>
|
||||||
|
<td><a class="first reference external" href="mailto:mikhailberis@gmail.com">Dean Michael Berris</a></td></tr>
|
||||||
|
<tr class="field"><th class="docinfo-name">License:</th><td class="field-body">Distributed under the Boost Software License, Version 1.0
|
||||||
|
(See accompanying file LICENSE_1_0.txt or copy at <a class="reference external" href="http://www.boost.org/LICENSE_1_0.txt">http://www.boost.org/LICENSE_1_0.txt</a>)</td>
|
||||||
|
</tr>
|
||||||
|
</tbody>
|
||||||
|
</table>
|
||||||
|
<div class="section" id="function-input-iterator">
|
||||||
|
<h1>Function Input Iterator</h1>
|
||||||
|
<p>The Function Input Iterator allows for creating iterators that encapsulate
|
||||||
|
a nullary function object and a state object which tracks the number of times
|
||||||
|
the iterator has been incremented. A Function Input Iterator models the
|
||||||
|
<a class="reference external" href="http://www.sgi.com/tech/stl/InputIterator.html">InputIterator</a> concept and is useful for creating bounded input iterators.</p>
|
||||||
|
<p>Like the Generator Iterator, the Function Input Iterator takes a function
|
||||||
|
that models the <a class="reference external" href="http://www.sgi.com/tech/stl/Generator.html">Generator</a> concept (which is basically a nullary or 0-arity
|
||||||
|
function object). Each increment of the function Function Input Iterator
|
||||||
|
invokes the generator function and stores the value in the iterator. When
|
||||||
|
the iterator is dereferenced the stored value is returned.</p>
|
||||||
|
<p>The Function Input Iterator encapsulates a state object which models the
|
||||||
|
<a class="reference internal" href="#incrementable-concept">Incrementable Concept</a> and the <a class="reference external" href="http://www.sgi.com/tech/stl/EqualityComparable.html">EqualityComparable</a> Concept. These concepts are
|
||||||
|
described below as:</p>
|
||||||
|
<div class="section" id="incrementable-concept">
|
||||||
|
<h2>Incrementable Concept</h2>
|
||||||
|
<p>A type models the Incrementable Concept when it supports the pre- and post-
|
||||||
|
increment operators. For a given object <tt class="docutils literal"><span class="pre">i</span></tt> with type <tt class="docutils literal"><span class="pre">I</span></tt>, the following
|
||||||
|
constructs should be valid:</p>
|
||||||
|
<table border="1" class="docutils">
|
||||||
|
<colgroup>
|
||||||
|
<col width="24%" />
|
||||||
|
<col width="46%" />
|
||||||
|
<col width="30%" />
|
||||||
|
</colgroup>
|
||||||
|
<tbody valign="top">
|
||||||
|
<tr><td colspan="3">Construct Description Return Type</td>
|
||||||
|
</tr>
|
||||||
|
<tr><td>i++</td>
|
||||||
|
<td>Post-increment i.</td>
|
||||||
|
<td>I</td>
|
||||||
|
</tr>
|
||||||
|
<tr><td>++i</td>
|
||||||
|
<td>Pre-increment i.</td>
|
||||||
|
<td>I&</td>
|
||||||
|
</tr>
|
||||||
|
</tbody>
|
||||||
|
</table>
|
||||||
|
<p>NOTE: An Incrementable type should also be <a class="reference external" href="http://www.sgi.com/tech/stl/DefaultConstructible.html">DefaultConstructible</a>.</p>
|
||||||
|
</div>
|
||||||
|
<div class="section" id="synopsis">
|
||||||
|
<h2>Synopsis</h2>
|
||||||
|
<pre class="literal-block">
|
||||||
|
namespace {
|
||||||
|
template <class Function, class State>
|
||||||
|
class function_input_iterator;
|
||||||
|
|
||||||
|
template <class Function, class State>
|
||||||
|
typename function_input_iterator<Function, State>
|
||||||
|
make_function_input_iterator(Function & f);
|
||||||
|
|
||||||
|
struct infinite;
|
||||||
|
}
|
||||||
|
</pre>
|
||||||
|
</div>
|
||||||
|
<div class="section" id="function-input-iterator-class">
|
||||||
|
<h2>Function Input Iterator Class</h2>
|
||||||
|
<p>The class Function Input Iterator class takes two template parameters
|
||||||
|
<tt class="docutils literal"><span class="pre">Function</span></tt> and <tt class="docutils literal"><span class="pre">State</span></tt>. These two template parameters tell the
|
||||||
|
Function Input Iterator the type of the function to encapsulate and
|
||||||
|
the type of the internal state value to hold.</p>
|
||||||
|
<p>The <tt class="docutils literal"><span class="pre">State</span></tt> parameter is important in cases where you want to
|
||||||
|
control the type of the counter which determines whether two iterators
|
||||||
|
are at the same state. This allows for creating a pair of iterators which
|
||||||
|
bound the range of the invocations of the encapsulated functions.</p>
|
||||||
|
</div>
|
||||||
|
<div class="section" id="examples">
|
||||||
|
<h2>Examples</h2>
|
||||||
|
<p>The following example shows how we use the function input iterator class
|
||||||
|
in cases where we want to create bounded (lazy) generated ranges.</p>
|
||||||
|
<pre class="literal-block">
|
||||||
|
struct generator {
|
||||||
|
typedef int result_type;
|
||||||
|
generator() { srand(time(0)); }
|
||||||
|
result_type operator() () const {
|
||||||
|
return rand();
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
int main(int argc, char * argv[]) {
|
||||||
|
generator f;
|
||||||
|
copy(
|
||||||
|
make_function_input_iterator(f, 0),
|
||||||
|
make_function_input_iterator(f, 10),
|
||||||
|
ostream_iterator<int>(cout, " ")
|
||||||
|
);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
</pre>
|
||||||
|
<p>Here we can see that we've bounded the number of invocations using an <tt class="docutils literal"><span class="pre">int</span></tt>
|
||||||
|
that counts from <tt class="docutils literal"><span class="pre">0</span></tt> to <tt class="docutils literal"><span class="pre">10</span></tt>. Say we want to create an endless stream
|
||||||
|
of random numbers and encapsulate that in a pair of integers, we can do
|
||||||
|
it with the <tt class="docutils literal"><span class="pre">boost::infinite</span></tt> helper class.</p>
|
||||||
|
<pre class="literal-block">
|
||||||
|
copy(
|
||||||
|
make_function_input_iterator(f,infinite()),
|
||||||
|
make_function_input_iterator(f,infinite()),
|
||||||
|
ostream_iterator<int>(count, " ")
|
||||||
|
);
|
||||||
|
</pre>
|
||||||
|
<p>Above, instead of creating a huge vector we rely on the STL copy algorithm
|
||||||
|
to traverse the function input iterator and call the function object f
|
||||||
|
as it increments the iterator. The special property of <tt class="docutils literal"><span class="pre">boost::infinite</span></tt>
|
||||||
|
is that equating two instances always yield false -- and that incrementing
|
||||||
|
an instance of <tt class="docutils literal"><span class="pre">boost::infinite</span></tt> doesn't do anything. This is an efficient
|
||||||
|
way of stating that the iterator range provided by two iterators with an
|
||||||
|
encapsulated infinite state will definitely be infinite.</p>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="footer">
|
||||||
|
<hr class="footer" />
|
||||||
|
<a class="reference external" href="function_input_iterator.rst">View document source</a>.
|
||||||
|
Generated by <a class="reference external" href="http://docutils.sourceforge.net/">Docutils</a> from <a class="reference external" href="http://docutils.sourceforge.net/rst.html">reStructuredText</a> source.
|
||||||
|
|
||||||
|
</div>
|
||||||
|
</body>
|
||||||
|
</html>
|
132
doc/function_input_iterator.rst
Normal file
132
doc/function_input_iterator.rst
Normal file
@ -0,0 +1,132 @@
|
|||||||
|
:Author:
|
||||||
|
`Dean Michael Berris <mailto:me@deanberris.com>`_
|
||||||
|
|
||||||
|
:License:
|
||||||
|
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)
|
||||||
|
|
||||||
|
:Copyright:
|
||||||
|
Copyright 2012 Google, Inc.
|
||||||
|
|
||||||
|
Function Input Iterator
|
||||||
|
=======================
|
||||||
|
|
||||||
|
The Function Input Iterator allows for creating iterators that encapsulate
|
||||||
|
a nullary function object and a state object which tracks the number of times
|
||||||
|
the iterator has been incremented. A Function Input Iterator models the
|
||||||
|
`InputIterator`_ concept and is useful for creating bounded input iterators.
|
||||||
|
|
||||||
|
.. _InputIterator: http://www.sgi.com/tech/stl/InputIterator.html
|
||||||
|
|
||||||
|
The Function Input Iterator takes a function that models the Generator_ concept
|
||||||
|
(which is basically a nullary or 0-arity function object). The first dereference
|
||||||
|
of the iterator at a given position invokes the generator function and stores
|
||||||
|
and returns the result; subsequent dereferences at the same position simply
|
||||||
|
return the same stored result. Incrementing the iterator places it at a new
|
||||||
|
position, hence a subsequent dereference will generate a new value via another
|
||||||
|
invokation of the generator function. This ensures the generator function is
|
||||||
|
invoked precisely when the iterator is requested to return a (new) value.
|
||||||
|
|
||||||
|
.. _Generator: http://www.sgi.com/tech/stl/Generator.html
|
||||||
|
|
||||||
|
The Function Input Iterator encapsulates a state object which models the
|
||||||
|
`Incrementable Concept`_ and the EqualityComparable_ Concept. These concepts are
|
||||||
|
described below as:
|
||||||
|
|
||||||
|
.. _EqualityComparable: http://www.sgi.com/tech/stl/EqualityComparable.html
|
||||||
|
|
||||||
|
Incrementable Concept
|
||||||
|
---------------------
|
||||||
|
|
||||||
|
A type models the Incrementable Concept when it supports the pre- and post-
|
||||||
|
increment operators. For a given object ``i`` with type ``I``, the following
|
||||||
|
constructs should be valid:
|
||||||
|
|
||||||
|
========= ================= ===========
|
||||||
|
Construct Description Return Type
|
||||||
|
-----------------------------------------
|
||||||
|
i++ Post-increment i. I
|
||||||
|
++i Pre-increment i. I&
|
||||||
|
========= ================= ===========
|
||||||
|
|
||||||
|
NOTE: An Incrementable type should also be DefaultConstructible_.
|
||||||
|
|
||||||
|
.. _DefaultConstructible: http://www.sgi.com/tech/stl/DefaultConstructible.html
|
||||||
|
|
||||||
|
Synopsis
|
||||||
|
--------
|
||||||
|
|
||||||
|
::
|
||||||
|
|
||||||
|
namespace {
|
||||||
|
template <class Function, class State>
|
||||||
|
class function_input_iterator;
|
||||||
|
|
||||||
|
template <class Function, class State>
|
||||||
|
typename function_input_iterator<Function, State>
|
||||||
|
make_function_input_iterator(Function & f, State s);
|
||||||
|
|
||||||
|
struct infinite;
|
||||||
|
}
|
||||||
|
|
||||||
|
Function Input Iterator Class
|
||||||
|
-----------------------------
|
||||||
|
|
||||||
|
The class Function Input Iterator class takes two template parameters
|
||||||
|
``Function`` and ``State``. These two template parameters tell the
|
||||||
|
Function Input Iterator the type of the function to encapsulate and
|
||||||
|
the type of the internal state value to hold.
|
||||||
|
|
||||||
|
The ``State`` parameter is important in cases where you want to
|
||||||
|
control the type of the counter which determines whether two iterators
|
||||||
|
are at the same state. This allows for creating a pair of iterators which
|
||||||
|
bound the range of the invocations of the encapsulated functions.
|
||||||
|
|
||||||
|
Examples
|
||||||
|
--------
|
||||||
|
|
||||||
|
The following example shows how we use the function input iterator class
|
||||||
|
in cases where we want to create bounded (lazy) generated ranges.
|
||||||
|
|
||||||
|
::
|
||||||
|
|
||||||
|
struct generator {
|
||||||
|
typedef int result_type;
|
||||||
|
generator() { srand(time(0)); }
|
||||||
|
result_type operator() () const {
|
||||||
|
return rand();
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
int main(int argc, char * argv[]) {
|
||||||
|
generator f;
|
||||||
|
copy(
|
||||||
|
make_function_input_iterator(f, 0),
|
||||||
|
make_function_input_iterator(f, 10),
|
||||||
|
ostream_iterator<int>(cout, " ")
|
||||||
|
);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
Here we can see that we've bounded the number of invocations using an ``int``
|
||||||
|
that counts from ``0`` to ``10``. Say we want to create an endless stream
|
||||||
|
of random numbers and encapsulate that in a pair of integers, we can do
|
||||||
|
it with the ``boost::infinite`` helper class.
|
||||||
|
|
||||||
|
::
|
||||||
|
|
||||||
|
copy(
|
||||||
|
make_function_input_iterator(f,infinite()),
|
||||||
|
make_function_input_iterator(f,infinite()),
|
||||||
|
ostream_iterator<int>(cout, " ")
|
||||||
|
);
|
||||||
|
|
||||||
|
Above, instead of creating a huge vector we rely on the STL copy algorithm
|
||||||
|
to traverse the function input iterator and call the function object f
|
||||||
|
as it increments the iterator. The special property of ``boost::infinite``
|
||||||
|
is that equating two instances always yield false -- and that incrementing
|
||||||
|
an instance of ``boost::infinite`` doesn't do anything. This is an efficient
|
||||||
|
way of stating that the iterator range provided by two iterators with an
|
||||||
|
encapsulated infinite state will definitely be infinite.
|
||||||
|
|
||||||
|
|
@ -3,295 +3,13 @@
|
|||||||
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
|
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
|
||||||
<head>
|
<head>
|
||||||
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
|
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
|
||||||
<meta name="generator" content="Docutils 0.4: http://docutils.sourceforge.net/" />
|
<meta name="generator" content="Docutils 0.5: http://docutils.sourceforge.net/" />
|
||||||
<title>Function Output Iterator</title>
|
<title>Function Output Iterator</title>
|
||||||
<meta name="author" content="David Abrahams, Jeremy Siek, Thomas Witt" />
|
<meta name="author" content="David Abrahams, Jeremy Siek, Thomas Witt" />
|
||||||
<meta name="organization" content="Boost Consulting, Indiana University Open Systems Lab, University of Hanover Institute for Transport Railway Operation and Construction" />
|
<meta name="organization" content="Boost Consulting, Indiana University Open Systems Lab, University of Hanover Institute for Transport Railway Operation and Construction" />
|
||||||
<meta name="date" content="2004-11-01" />
|
<meta name="date" content="2006-09-11" />
|
||||||
<meta name="copyright" content="Copyright David Abrahams, Jeremy Siek, and Thomas Witt 2003." />
|
<meta name="copyright" content="Copyright David Abrahams, Jeremy Siek, and Thomas Witt 2003." />
|
||||||
<style type="text/css">
|
<link rel="stylesheet" href="../../../rst.css" type="text/css" />
|
||||||
|
|
||||||
/*
|
|
||||||
:Author: David Goodger
|
|
||||||
:Contact: goodger@users.sourceforge.net
|
|
||||||
:Date: $Date$
|
|
||||||
:Revision: $Revision$
|
|
||||||
:Copyright: This stylesheet has been placed in the public domain.
|
|
||||||
|
|
||||||
Default cascading style sheet for the HTML output of Docutils.
|
|
||||||
|
|
||||||
See http://docutils.sf.net/docs/howto/html-stylesheets.html for how to
|
|
||||||
customize this style sheet.
|
|
||||||
*/
|
|
||||||
|
|
||||||
/* used to remove borders from tables and images */
|
|
||||||
.borderless, table.borderless td, table.borderless th {
|
|
||||||
border: 0 }
|
|
||||||
|
|
||||||
table.borderless td, table.borderless th {
|
|
||||||
/* Override padding for "table.docutils td" with "! important".
|
|
||||||
The right padding separates the table cells. */
|
|
||||||
padding: 0 0.5em 0 0 ! important }
|
|
||||||
|
|
||||||
.first {
|
|
||||||
/* Override more specific margin styles with "! important". */
|
|
||||||
margin-top: 0 ! important }
|
|
||||||
|
|
||||||
.last, .with-subtitle {
|
|
||||||
margin-bottom: 0 ! important }
|
|
||||||
|
|
||||||
.hidden {
|
|
||||||
display: none }
|
|
||||||
|
|
||||||
a.toc-backref {
|
|
||||||
text-decoration: none ;
|
|
||||||
color: black }
|
|
||||||
|
|
||||||
blockquote.epigraph {
|
|
||||||
margin: 2em 5em ; }
|
|
||||||
|
|
||||||
dl.docutils dd {
|
|
||||||
margin-bottom: 0.5em }
|
|
||||||
|
|
||||||
/* Uncomment (and remove this text!) to get bold-faced definition list terms
|
|
||||||
dl.docutils dt {
|
|
||||||
font-weight: bold }
|
|
||||||
*/
|
|
||||||
|
|
||||||
div.abstract {
|
|
||||||
margin: 2em 5em }
|
|
||||||
|
|
||||||
div.abstract p.topic-title {
|
|
||||||
font-weight: bold ;
|
|
||||||
text-align: center }
|
|
||||||
|
|
||||||
div.admonition, div.attention, div.caution, div.danger, div.error,
|
|
||||||
div.hint, div.important, div.note, div.tip, div.warning {
|
|
||||||
margin: 2em ;
|
|
||||||
border: medium outset ;
|
|
||||||
padding: 1em }
|
|
||||||
|
|
||||||
div.admonition p.admonition-title, div.hint p.admonition-title,
|
|
||||||
div.important p.admonition-title, div.note p.admonition-title,
|
|
||||||
div.tip p.admonition-title {
|
|
||||||
font-weight: bold ;
|
|
||||||
font-family: sans-serif }
|
|
||||||
|
|
||||||
div.attention p.admonition-title, div.caution p.admonition-title,
|
|
||||||
div.danger p.admonition-title, div.error p.admonition-title,
|
|
||||||
div.warning p.admonition-title {
|
|
||||||
color: red ;
|
|
||||||
font-weight: bold ;
|
|
||||||
font-family: sans-serif }
|
|
||||||
|
|
||||||
/* Uncomment (and remove this text!) to get reduced vertical space in
|
|
||||||
compound paragraphs.
|
|
||||||
div.compound .compound-first, div.compound .compound-middle {
|
|
||||||
margin-bottom: 0.5em }
|
|
||||||
|
|
||||||
div.compound .compound-last, div.compound .compound-middle {
|
|
||||||
margin-top: 0.5em }
|
|
||||||
*/
|
|
||||||
|
|
||||||
div.dedication {
|
|
||||||
margin: 2em 5em ;
|
|
||||||
text-align: center ;
|
|
||||||
font-style: italic }
|
|
||||||
|
|
||||||
div.dedication p.topic-title {
|
|
||||||
font-weight: bold ;
|
|
||||||
font-style: normal }
|
|
||||||
|
|
||||||
div.figure {
|
|
||||||
margin-left: 2em ;
|
|
||||||
margin-right: 2em }
|
|
||||||
|
|
||||||
div.footer, div.header {
|
|
||||||
clear: both;
|
|
||||||
font-size: smaller }
|
|
||||||
|
|
||||||
div.line-block {
|
|
||||||
display: block ;
|
|
||||||
margin-top: 1em ;
|
|
||||||
margin-bottom: 1em }
|
|
||||||
|
|
||||||
div.line-block div.line-block {
|
|
||||||
margin-top: 0 ;
|
|
||||||
margin-bottom: 0 ;
|
|
||||||
margin-left: 1.5em }
|
|
||||||
|
|
||||||
div.sidebar {
|
|
||||||
margin-left: 1em ;
|
|
||||||
border: medium outset ;
|
|
||||||
padding: 1em ;
|
|
||||||
background-color: #ffffee ;
|
|
||||||
width: 40% ;
|
|
||||||
float: right ;
|
|
||||||
clear: right }
|
|
||||||
|
|
||||||
div.sidebar p.rubric {
|
|
||||||
font-family: sans-serif ;
|
|
||||||
font-size: medium }
|
|
||||||
|
|
||||||
div.system-messages {
|
|
||||||
margin: 5em }
|
|
||||||
|
|
||||||
div.system-messages h1 {
|
|
||||||
color: red }
|
|
||||||
|
|
||||||
div.system-message {
|
|
||||||
border: medium outset ;
|
|
||||||
padding: 1em }
|
|
||||||
|
|
||||||
div.system-message p.system-message-title {
|
|
||||||
color: red ;
|
|
||||||
font-weight: bold }
|
|
||||||
|
|
||||||
div.topic {
|
|
||||||
margin: 2em }
|
|
||||||
|
|
||||||
h1.section-subtitle, h2.section-subtitle, h3.section-subtitle,
|
|
||||||
h4.section-subtitle, h5.section-subtitle, h6.section-subtitle {
|
|
||||||
margin-top: 0.4em }
|
|
||||||
|
|
||||||
h1.title {
|
|
||||||
text-align: center }
|
|
||||||
|
|
||||||
h2.subtitle {
|
|
||||||
text-align: center }
|
|
||||||
|
|
||||||
hr.docutils {
|
|
||||||
width: 75% }
|
|
||||||
|
|
||||||
img.align-left {
|
|
||||||
clear: left }
|
|
||||||
|
|
||||||
img.align-right {
|
|
||||||
clear: right }
|
|
||||||
|
|
||||||
ol.simple, ul.simple {
|
|
||||||
margin-bottom: 1em }
|
|
||||||
|
|
||||||
ol.arabic {
|
|
||||||
list-style: decimal }
|
|
||||||
|
|
||||||
ol.loweralpha {
|
|
||||||
list-style: lower-alpha }
|
|
||||||
|
|
||||||
ol.upperalpha {
|
|
||||||
list-style: upper-alpha }
|
|
||||||
|
|
||||||
ol.lowerroman {
|
|
||||||
list-style: lower-roman }
|
|
||||||
|
|
||||||
ol.upperroman {
|
|
||||||
list-style: upper-roman }
|
|
||||||
|
|
||||||
p.attribution {
|
|
||||||
text-align: right ;
|
|
||||||
margin-left: 50% }
|
|
||||||
|
|
||||||
p.caption {
|
|
||||||
font-style: italic }
|
|
||||||
|
|
||||||
p.credits {
|
|
||||||
font-style: italic ;
|
|
||||||
font-size: smaller }
|
|
||||||
|
|
||||||
p.label {
|
|
||||||
white-space: nowrap }
|
|
||||||
|
|
||||||
p.rubric {
|
|
||||||
font-weight: bold ;
|
|
||||||
font-size: larger ;
|
|
||||||
color: maroon ;
|
|
||||||
text-align: center }
|
|
||||||
|
|
||||||
p.sidebar-title {
|
|
||||||
font-family: sans-serif ;
|
|
||||||
font-weight: bold ;
|
|
||||||
font-size: larger }
|
|
||||||
|
|
||||||
p.sidebar-subtitle {
|
|
||||||
font-family: sans-serif ;
|
|
||||||
font-weight: bold }
|
|
||||||
|
|
||||||
p.topic-title {
|
|
||||||
font-weight: bold }
|
|
||||||
|
|
||||||
pre.address {
|
|
||||||
margin-bottom: 0 ;
|
|
||||||
margin-top: 0 ;
|
|
||||||
font-family: serif ;
|
|
||||||
font-size: 100% }
|
|
||||||
|
|
||||||
pre.literal-block, pre.doctest-block {
|
|
||||||
margin-left: 2em ;
|
|
||||||
margin-right: 2em ;
|
|
||||||
background-color: #eeeeee }
|
|
||||||
|
|
||||||
span.classifier {
|
|
||||||
font-family: sans-serif ;
|
|
||||||
font-style: oblique }
|
|
||||||
|
|
||||||
span.classifier-delimiter {
|
|
||||||
font-family: sans-serif ;
|
|
||||||
font-weight: bold }
|
|
||||||
|
|
||||||
span.interpreted {
|
|
||||||
font-family: sans-serif }
|
|
||||||
|
|
||||||
span.option {
|
|
||||||
white-space: nowrap }
|
|
||||||
|
|
||||||
span.pre {
|
|
||||||
white-space: pre }
|
|
||||||
|
|
||||||
span.problematic {
|
|
||||||
color: red }
|
|
||||||
|
|
||||||
span.section-subtitle {
|
|
||||||
/* font-size relative to parent (h1..h6 element) */
|
|
||||||
font-size: 80% }
|
|
||||||
|
|
||||||
table.citation {
|
|
||||||
border-left: solid 1px gray;
|
|
||||||
margin-left: 1px }
|
|
||||||
|
|
||||||
table.docinfo {
|
|
||||||
margin: 2em 4em }
|
|
||||||
|
|
||||||
table.docutils {
|
|
||||||
margin-top: 0.5em ;
|
|
||||||
margin-bottom: 0.5em }
|
|
||||||
|
|
||||||
table.footnote {
|
|
||||||
border-left: solid 1px black;
|
|
||||||
margin-left: 1px }
|
|
||||||
|
|
||||||
table.docutils td, table.docutils th,
|
|
||||||
table.docinfo td, table.docinfo th {
|
|
||||||
padding-left: 0.5em ;
|
|
||||||
padding-right: 0.5em ;
|
|
||||||
vertical-align: top }
|
|
||||||
|
|
||||||
table.docutils th.field-name, table.docinfo th.docinfo-name {
|
|
||||||
font-weight: bold ;
|
|
||||||
text-align: left ;
|
|
||||||
white-space: nowrap ;
|
|
||||||
padding-left: 0 }
|
|
||||||
|
|
||||||
h1 tt.docutils, h2 tt.docutils, h3 tt.docutils,
|
|
||||||
h4 tt.docutils, h5 tt.docutils, h6 tt.docutils {
|
|
||||||
font-size: 100% }
|
|
||||||
|
|
||||||
tt.docutils {
|
|
||||||
background-color: #eeeeee }
|
|
||||||
|
|
||||||
ul.auto-toc {
|
|
||||||
list-style-type: none }
|
|
||||||
|
|
||||||
</style>
|
|
||||||
</head>
|
</head>
|
||||||
<body>
|
<body>
|
||||||
<div class="document" id="function-output-iterator">
|
<div class="document" id="function-output-iterator">
|
||||||
@ -303,13 +21,13 @@ ul.auto-toc {
|
|||||||
<tr><th class="docinfo-name">Author:</th>
|
<tr><th class="docinfo-name">Author:</th>
|
||||||
<td>David Abrahams, Jeremy Siek, Thomas Witt</td></tr>
|
<td>David Abrahams, Jeremy Siek, Thomas Witt</td></tr>
|
||||||
<tr><th class="docinfo-name">Contact:</th>
|
<tr><th class="docinfo-name">Contact:</th>
|
||||||
<td><a class="first reference" href="mailto:dave@boost-consulting.com">dave@boost-consulting.com</a>, <a class="reference" href="mailto:jsiek@osl.iu.edu">jsiek@osl.iu.edu</a>, <a class="last reference" href="mailto:witt@ive.uni-hannover.de">witt@ive.uni-hannover.de</a></td></tr>
|
<td><a class="first reference external" href="mailto:dave@boost-consulting.com">dave@boost-consulting.com</a>, <a class="reference external" href="mailto:jsiek@osl.iu.edu">jsiek@osl.iu.edu</a>, <a class="last reference external" href="mailto:witt@ive.uni-hannover.de">witt@ive.uni-hannover.de</a></td></tr>
|
||||||
<tr><th class="docinfo-name">Organization:</th>
|
<tr><th class="docinfo-name">Organization:</th>
|
||||||
<td><a class="first reference" href="http://www.boost-consulting.com">Boost Consulting</a>, Indiana University <a class="reference" href="http://www.osl.iu.edu">Open Systems
|
<td><a class="first reference external" href="http://www.boost-consulting.com">Boost Consulting</a>, Indiana University <a class="reference external" href="http://www.osl.iu.edu">Open Systems
|
||||||
Lab</a>, University of Hanover <a class="last reference" href="http://www.ive.uni-hannover.de">Institute for Transport
|
Lab</a>, University of Hanover <a class="last reference external" href="http://www.ive.uni-hannover.de">Institute for Transport
|
||||||
Railway Operation and Construction</a></td></tr>
|
Railway Operation and Construction</a></td></tr>
|
||||||
<tr><th class="docinfo-name">Date:</th>
|
<tr><th class="docinfo-name">Date:</th>
|
||||||
<td>2004-11-01</td></tr>
|
<td>2006-09-11</td></tr>
|
||||||
<tr><th class="docinfo-name">Copyright:</th>
|
<tr><th class="docinfo-name">Copyright:</th>
|
||||||
<td>Copyright David Abrahams, Jeremy Siek, and Thomas Witt 2003.</td></tr>
|
<td>Copyright David Abrahams, Jeremy Siek, and Thomas Witt 2003.</td></tr>
|
||||||
</tbody>
|
</tbody>
|
||||||
@ -334,21 +52,21 @@ proxy object.</td>
|
|||||||
</tr>
|
</tr>
|
||||||
</tbody>
|
</tbody>
|
||||||
</table>
|
</table>
|
||||||
<div class="contents topic">
|
<div class="contents topic" id="table-of-contents">
|
||||||
<p class="topic-title first"><a id="table-of-contents" name="table-of-contents">Table of Contents</a></p>
|
<p class="topic-title first">Table of Contents</p>
|
||||||
<ul class="simple">
|
<ul class="simple">
|
||||||
<li><a class="reference" href="#header" id="id1" name="id1">Header</a></li>
|
<li><a class="reference internal" href="#header" id="id1">Header</a></li>
|
||||||
<li><a class="reference" href="#function-output-iterator-requirements" id="id2" name="id2"><tt class="docutils literal"><span class="pre">function_output_iterator</span></tt> requirements</a></li>
|
<li><a class="reference internal" href="#function-output-iterator-requirements" id="id2"><tt class="docutils literal"><span class="pre">function_output_iterator</span></tt> requirements</a></li>
|
||||||
<li><a class="reference" href="#function-output-iterator-models" id="id3" name="id3"><tt class="docutils literal"><span class="pre">function_output_iterator</span></tt> models</a></li>
|
<li><a class="reference internal" href="#function-output-iterator-models" id="id3"><tt class="docutils literal"><span class="pre">function_output_iterator</span></tt> models</a></li>
|
||||||
<li><a class="reference" href="#function-output-iterator-operations" id="id4" name="id4"><tt class="docutils literal"><span class="pre">function_output_iterator</span></tt> operations</a></li>
|
<li><a class="reference internal" href="#function-output-iterator-operations" id="id4"><tt class="docutils literal"><span class="pre">function_output_iterator</span></tt> operations</a></li>
|
||||||
<li><a class="reference" href="#example" id="id5" name="id5">Example</a></li>
|
<li><a class="reference internal" href="#example" id="id5">Example</a></li>
|
||||||
</ul>
|
</ul>
|
||||||
</div>
|
</div>
|
||||||
<!-- Copyright David Abrahams 2006. Distributed under the Boost -->
|
<!-- Copyright David Abrahams 2006. Distributed under the Boost -->
|
||||||
<!-- Software License, Version 1.0. (See accompanying -->
|
<!-- Software License, Version 1.0. (See accompanying -->
|
||||||
<!-- file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) -->
|
<!-- file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) -->
|
||||||
<div class="section">
|
<div class="section" id="header">
|
||||||
<h1><a class="toc-backref" href="#id1" id="header" name="header">Header</a></h1>
|
<h1><a class="toc-backref" href="#id1">Header</a></h1>
|
||||||
<pre class="literal-block">
|
<pre class="literal-block">
|
||||||
#include <boost/function_output_iterator.hpp>
|
#include <boost/function_output_iterator.hpp>
|
||||||
</pre>
|
</pre>
|
||||||
@ -374,17 +92,17 @@ private:
|
|||||||
};
|
};
|
||||||
</pre>
|
</pre>
|
||||||
</div>
|
</div>
|
||||||
<div class="section">
|
<div class="section" id="function-output-iterator-requirements">
|
||||||
<h1><a class="toc-backref" href="#id2" id="function-output-iterator-requirements" name="function-output-iterator-requirements"><tt class="docutils literal"><span class="pre">function_output_iterator</span></tt> requirements</a></h1>
|
<h1><a class="toc-backref" href="#id2"><tt class="docutils literal"><span class="pre">function_output_iterator</span></tt> requirements</a></h1>
|
||||||
<p><tt class="docutils literal"><span class="pre">UnaryFunction</span></tt> must be Assignable and Copy Constructible.</p>
|
<p><tt class="docutils literal"><span class="pre">UnaryFunction</span></tt> must be Assignable and Copy Constructible.</p>
|
||||||
</div>
|
</div>
|
||||||
<div class="section">
|
<div class="section" id="function-output-iterator-models">
|
||||||
<h1><a class="toc-backref" href="#id3" id="function-output-iterator-models" name="function-output-iterator-models"><tt class="docutils literal"><span class="pre">function_output_iterator</span></tt> models</a></h1>
|
<h1><a class="toc-backref" href="#id3"><tt class="docutils literal"><span class="pre">function_output_iterator</span></tt> models</a></h1>
|
||||||
<p><tt class="docutils literal"><span class="pre">function_output_iterator</span></tt> is a model of the Writable and
|
<p><tt class="docutils literal"><span class="pre">function_output_iterator</span></tt> is a model of the Writable and
|
||||||
Incrementable Iterator concepts.</p>
|
Incrementable Iterator concepts.</p>
|
||||||
</div>
|
</div>
|
||||||
<div class="section">
|
<div class="section" id="function-output-iterator-operations">
|
||||||
<h1><a class="toc-backref" href="#id4" id="function-output-iterator-operations" name="function-output-iterator-operations"><tt class="docutils literal"><span class="pre">function_output_iterator</span></tt> operations</a></h1>
|
<h1><a class="toc-backref" href="#id4"><tt class="docutils literal"><span class="pre">function_output_iterator</span></tt> operations</a></h1>
|
||||||
<p><tt class="docutils literal"><span class="pre">explicit</span> <span class="pre">function_output_iterator(const</span> <span class="pre">UnaryFunction&</span> <span class="pre">f</span> <span class="pre">=</span> <span class="pre">UnaryFunction());</span></tt></p>
|
<p><tt class="docutils literal"><span class="pre">explicit</span> <span class="pre">function_output_iterator(const</span> <span class="pre">UnaryFunction&</span> <span class="pre">f</span> <span class="pre">=</span> <span class="pre">UnaryFunction());</span></tt></p>
|
||||||
<table class="docutils field-list" frame="void" rules="none">
|
<table class="docutils field-list" frame="void" rules="none">
|
||||||
<col class="field-name" />
|
<col class="field-name" />
|
||||||
@ -427,8 +145,8 @@ is equivalent to <tt class="docutils literal"><span class="pre">m_f(t)</span></t
|
|||||||
<!-- Software License, Version 1.0. (See accompanying -->
|
<!-- Software License, Version 1.0. (See accompanying -->
|
||||||
<!-- file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) -->
|
<!-- file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) -->
|
||||||
</div>
|
</div>
|
||||||
<div class="section">
|
<div class="section" id="example">
|
||||||
<h1><a class="toc-backref" href="#id5" id="example" name="example">Example</a></h1>
|
<h1><a class="toc-backref" href="#id5">Example</a></h1>
|
||||||
<pre class="literal-block">
|
<pre class="literal-block">
|
||||||
struct string_appender
|
struct string_appender
|
||||||
{
|
{
|
||||||
@ -462,6 +180,12 @@ int main(int, char*[])
|
|||||||
}
|
}
|
||||||
</pre>
|
</pre>
|
||||||
</div>
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="footer">
|
||||||
|
<hr class="footer" />
|
||||||
|
<a class="reference external" href="function_output_iterator.rst">View document source</a>.
|
||||||
|
Generated by <a class="reference external" href="http://docutils.sourceforge.net/">Docutils</a> from <a class="reference external" href="http://docutils.sourceforge.net/rst.html">reStructuredText</a> source.
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
</body>
|
</body>
|
||||||
</html>
|
</html>
|
||||||
|
0
doc/function_output_iterator.pdf
Executable file → Normal file
0
doc/function_output_iterator.pdf
Executable file → Normal file
163
doc/generator_iterator.htm
Normal file
163
doc/generator_iterator.htm
Normal file
@ -0,0 +1,163 @@
|
|||||||
|
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
|
||||||
|
|
||||||
|
<html>
|
||||||
|
<head>
|
||||||
|
<meta http-equiv="Content-Language" content="en-us">
|
||||||
|
<meta http-equiv="Content-Type" content="text/html; charset=us-ascii">
|
||||||
|
|
||||||
|
<title>Generator Iterator Adaptor Documentation</title>
|
||||||
|
</head>
|
||||||
|
|
||||||
|
<body bgcolor="#FFFFFF" text="#000000">
|
||||||
|
<img src="../../boost.png" alt="boost.png (6897 bytes)" align="middle"
|
||||||
|
width="277" height="86">
|
||||||
|
|
||||||
|
<h1>Generator Iterator Adaptor</h1>
|
||||||
|
|
||||||
|
<p>Defined in header <a href=
|
||||||
|
"../../boost/generator_iterator.hpp">boost/generator_iterator.hpp</a></p>
|
||||||
|
|
||||||
|
<p>The generator iterator adaptor makes it easier to create custom input
|
||||||
|
iterators from 0-ary functions and function objects. The adaptor takes a
|
||||||
|
<a href="http://www.sgi.com/tech/stl/Generator.html">Generator</a> and
|
||||||
|
creates a model of <a href=
|
||||||
|
"http://www.sgi.com/tech/stl/InputIterator.html">Input Iterator</a>. Each
|
||||||
|
increment retrieves an item from the generator and makes it available to be
|
||||||
|
retrieved by dereferencing. The motivation for this iterator is that some
|
||||||
|
concepts can be more naturally expressed as a generator, while most STL
|
||||||
|
algorithms expect an iterator. An example is the <a href=
|
||||||
|
"../random/index.html">Random Number</a> library.</p>
|
||||||
|
|
||||||
|
<h2>Synopsis</h2>
|
||||||
|
|
||||||
|
<blockquote>
|
||||||
|
<pre>
|
||||||
|
namespace boost {
|
||||||
|
template <class Generator>
|
||||||
|
class generator_iterator_policies;
|
||||||
|
|
||||||
|
template <class Generator>
|
||||||
|
class generator_iterator_generator;
|
||||||
|
|
||||||
|
template <class Generator>
|
||||||
|
typename generator_iterator_generator<Generator>::type
|
||||||
|
make_generator_iterator(Generator & gen);
|
||||||
|
}
|
||||||
|
</pre>
|
||||||
|
</blockquote>
|
||||||
|
<hr>
|
||||||
|
|
||||||
|
<h2>The Generator Iterator Generator Class</h2>
|
||||||
|
|
||||||
|
<p>The class generator_iterator_generator is a helper class whose purpose
|
||||||
|
is to construct a generator iterator type. The template parameter for this
|
||||||
|
class is the Generator function object type that is being wrapped. The
|
||||||
|
generator iterator adaptor only holds a reference (or pointer) to the
|
||||||
|
function object, therefore the function object must outlive the generator
|
||||||
|
iterator adaptor constructed from it.</p>
|
||||||
|
<pre>
|
||||||
|
template <class Generator>
|
||||||
|
class generator_iterator_generator
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
typedef <i>unspecified</i> type; // the resulting generator iterator type
|
||||||
|
}
|
||||||
|
</pre>
|
||||||
|
|
||||||
|
<h3>Template Parameters</h3>
|
||||||
|
|
||||||
|
<table border summary="">
|
||||||
|
<tr>
|
||||||
|
<th>Parameter</th>
|
||||||
|
|
||||||
|
<th>Description</th>
|
||||||
|
</tr>
|
||||||
|
|
||||||
|
<tr>
|
||||||
|
<td><tt><a href=
|
||||||
|
"http://www.sgi.com/tech/stl/Generator.html">Generator</a></tt></td>
|
||||||
|
|
||||||
|
<td>The generator (0-ary function object) type being wrapped. The
|
||||||
|
return type of the function must be defined as
|
||||||
|
<tt>Generator::result_type</tt>. The function object must be a model of
|
||||||
|
<a href=
|
||||||
|
"http://www.sgi.com/tech/stl/Generator.html">Generator</a>.</td>
|
||||||
|
</tr>
|
||||||
|
</table>
|
||||||
|
|
||||||
|
<h3>Concept Model</h3>
|
||||||
|
|
||||||
|
<p>The generator iterator class is a model of <a href=
|
||||||
|
"http://www.sgi.com/tech/stl/InputIterator.html">Input Iterator</a>.</p>
|
||||||
|
|
||||||
|
<h3>Members</h3>
|
||||||
|
|
||||||
|
<p>The generator iterator implements the member functions and operators
|
||||||
|
required of the <a href=
|
||||||
|
"http://www.sgi.com/tech/stl/InputIterator.html">Input Iterator</a>
|
||||||
|
concept.<br></p>
|
||||||
|
<hr>
|
||||||
|
|
||||||
|
<h2><a name="make_generator_iterator" id="make_generator_iterator">The
|
||||||
|
Generator Iterator Object Generator</a></h2>
|
||||||
|
|
||||||
|
<p>The <tt>make_generator_iterator()</tt> function provides a convenient
|
||||||
|
way to create generator iterator objects. The function saves the user the
|
||||||
|
trouble of explicitly writing out the iterator types.</p>
|
||||||
|
|
||||||
|
<blockquote>
|
||||||
|
<pre>
|
||||||
|
template <class Generator>
|
||||||
|
typename generator_iterator_generator<Generator>::type
|
||||||
|
make_generator_iterator(Generator & gen);
|
||||||
|
</pre>
|
||||||
|
</blockquote>
|
||||||
|
<hr>
|
||||||
|
|
||||||
|
<h3>Example</h3>
|
||||||
|
|
||||||
|
<p>The following program shows how <code>generator_iterator</code>
|
||||||
|
transforms a generator into an input iterator.</p>
|
||||||
|
|
||||||
|
<blockquote>
|
||||||
|
<pre>
|
||||||
|
#include <iostream>
|
||||||
|
#include <boost/generator_iterator.hpp>
|
||||||
|
|
||||||
|
class my_generator
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
typedef int result_type;
|
||||||
|
my_generator() : state(0) { }
|
||||||
|
int operator()() { return ++state; }
|
||||||
|
private:
|
||||||
|
int state;
|
||||||
|
};
|
||||||
|
|
||||||
|
int main()
|
||||||
|
{
|
||||||
|
my_generator gen;
|
||||||
|
boost::generator_iterator_generator<my_generator>::type it = boost::make_generator_iterator(gen);
|
||||||
|
for(int i = 0; i < 10; ++i, ++it)
|
||||||
|
std::cout << *it << std::endl;
|
||||||
|
}
|
||||||
|
</pre>
|
||||||
|
</blockquote>
|
||||||
|
<hr>
|
||||||
|
|
||||||
|
<p><a href="http://validator.w3.org/check?uri=referer"><img border="0" src=
|
||||||
|
"../../doc/images/valid-html401.png" alt="Valid HTML 4.01 Transitional"
|
||||||
|
height="31" width="88"></a></p>
|
||||||
|
|
||||||
|
<p>Revised
|
||||||
|
<!--webbot bot="Timestamp" s-type="EDITED" s-format="%d %B, %Y" startspan -->05 December, 2006<!--webbot bot="Timestamp" endspan i-checksum="38516" --></p>
|
||||||
|
|
||||||
|
<p><i>Copyright © 2001 <a href=
|
||||||
|
"http://www.boost.org/people/jens_maurer.htm">Jens Maurer</a></i></p>
|
||||||
|
|
||||||
|
<p><i>Distributed under the Boost Software License, Version 1.0. (See
|
||||||
|
accompanying file <a href="../../LICENSE_1_0.txt">LICENSE_1_0.txt</a> or
|
||||||
|
copy at <a href=
|
||||||
|
"http://www.boost.org/LICENSE_1_0.txt">http://www.boost.org/LICENSE_1_0.txt</a>)</i></p>
|
||||||
|
</body>
|
||||||
|
</html>
|
411
doc/index.html
Executable file → Normal file
411
doc/index.html
Executable file → Normal file
@ -3,295 +3,14 @@
|
|||||||
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
|
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
|
||||||
<head>
|
<head>
|
||||||
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
|
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
|
||||||
<meta name="generator" content="Docutils 0.4: http://docutils.sourceforge.net/" />
|
<meta name="generator" content="Docutils 0.6: http://docutils.sourceforge.net/" />
|
||||||
<title>The Boost.Iterator Library Boost</title>
|
<title>The Boost.Iterator Library Boost</title>
|
||||||
<style type="text/css">
|
<link rel="stylesheet" href="../../../rst.css" type="text/css" />
|
||||||
|
|
||||||
/*
|
|
||||||
:Author: David Goodger
|
|
||||||
:Contact: goodger@users.sourceforge.net
|
|
||||||
:Date: $Date$
|
|
||||||
:Revision: $Revision$
|
|
||||||
:Copyright: This stylesheet has been placed in the public domain.
|
|
||||||
|
|
||||||
Default cascading style sheet for the HTML output of Docutils.
|
|
||||||
|
|
||||||
See http://docutils.sf.net/docs/howto/html-stylesheets.html for how to
|
|
||||||
customize this style sheet.
|
|
||||||
*/
|
|
||||||
|
|
||||||
/* used to remove borders from tables and images */
|
|
||||||
.borderless, table.borderless td, table.borderless th {
|
|
||||||
border: 0 }
|
|
||||||
|
|
||||||
table.borderless td, table.borderless th {
|
|
||||||
/* Override padding for "table.docutils td" with "! important".
|
|
||||||
The right padding separates the table cells. */
|
|
||||||
padding: 0 0.5em 0 0 ! important }
|
|
||||||
|
|
||||||
.first {
|
|
||||||
/* Override more specific margin styles with "! important". */
|
|
||||||
margin-top: 0 ! important }
|
|
||||||
|
|
||||||
.last, .with-subtitle {
|
|
||||||
margin-bottom: 0 ! important }
|
|
||||||
|
|
||||||
.hidden {
|
|
||||||
display: none }
|
|
||||||
|
|
||||||
a.toc-backref {
|
|
||||||
text-decoration: none ;
|
|
||||||
color: black }
|
|
||||||
|
|
||||||
blockquote.epigraph {
|
|
||||||
margin: 2em 5em ; }
|
|
||||||
|
|
||||||
dl.docutils dd {
|
|
||||||
margin-bottom: 0.5em }
|
|
||||||
|
|
||||||
/* Uncomment (and remove this text!) to get bold-faced definition list terms
|
|
||||||
dl.docutils dt {
|
|
||||||
font-weight: bold }
|
|
||||||
*/
|
|
||||||
|
|
||||||
div.abstract {
|
|
||||||
margin: 2em 5em }
|
|
||||||
|
|
||||||
div.abstract p.topic-title {
|
|
||||||
font-weight: bold ;
|
|
||||||
text-align: center }
|
|
||||||
|
|
||||||
div.admonition, div.attention, div.caution, div.danger, div.error,
|
|
||||||
div.hint, div.important, div.note, div.tip, div.warning {
|
|
||||||
margin: 2em ;
|
|
||||||
border: medium outset ;
|
|
||||||
padding: 1em }
|
|
||||||
|
|
||||||
div.admonition p.admonition-title, div.hint p.admonition-title,
|
|
||||||
div.important p.admonition-title, div.note p.admonition-title,
|
|
||||||
div.tip p.admonition-title {
|
|
||||||
font-weight: bold ;
|
|
||||||
font-family: sans-serif }
|
|
||||||
|
|
||||||
div.attention p.admonition-title, div.caution p.admonition-title,
|
|
||||||
div.danger p.admonition-title, div.error p.admonition-title,
|
|
||||||
div.warning p.admonition-title {
|
|
||||||
color: red ;
|
|
||||||
font-weight: bold ;
|
|
||||||
font-family: sans-serif }
|
|
||||||
|
|
||||||
/* Uncomment (and remove this text!) to get reduced vertical space in
|
|
||||||
compound paragraphs.
|
|
||||||
div.compound .compound-first, div.compound .compound-middle {
|
|
||||||
margin-bottom: 0.5em }
|
|
||||||
|
|
||||||
div.compound .compound-last, div.compound .compound-middle {
|
|
||||||
margin-top: 0.5em }
|
|
||||||
*/
|
|
||||||
|
|
||||||
div.dedication {
|
|
||||||
margin: 2em 5em ;
|
|
||||||
text-align: center ;
|
|
||||||
font-style: italic }
|
|
||||||
|
|
||||||
div.dedication p.topic-title {
|
|
||||||
font-weight: bold ;
|
|
||||||
font-style: normal }
|
|
||||||
|
|
||||||
div.figure {
|
|
||||||
margin-left: 2em ;
|
|
||||||
margin-right: 2em }
|
|
||||||
|
|
||||||
div.footer, div.header {
|
|
||||||
clear: both;
|
|
||||||
font-size: smaller }
|
|
||||||
|
|
||||||
div.line-block {
|
|
||||||
display: block ;
|
|
||||||
margin-top: 1em ;
|
|
||||||
margin-bottom: 1em }
|
|
||||||
|
|
||||||
div.line-block div.line-block {
|
|
||||||
margin-top: 0 ;
|
|
||||||
margin-bottom: 0 ;
|
|
||||||
margin-left: 1.5em }
|
|
||||||
|
|
||||||
div.sidebar {
|
|
||||||
margin-left: 1em ;
|
|
||||||
border: medium outset ;
|
|
||||||
padding: 1em ;
|
|
||||||
background-color: #ffffee ;
|
|
||||||
width: 40% ;
|
|
||||||
float: right ;
|
|
||||||
clear: right }
|
|
||||||
|
|
||||||
div.sidebar p.rubric {
|
|
||||||
font-family: sans-serif ;
|
|
||||||
font-size: medium }
|
|
||||||
|
|
||||||
div.system-messages {
|
|
||||||
margin: 5em }
|
|
||||||
|
|
||||||
div.system-messages h1 {
|
|
||||||
color: red }
|
|
||||||
|
|
||||||
div.system-message {
|
|
||||||
border: medium outset ;
|
|
||||||
padding: 1em }
|
|
||||||
|
|
||||||
div.system-message p.system-message-title {
|
|
||||||
color: red ;
|
|
||||||
font-weight: bold }
|
|
||||||
|
|
||||||
div.topic {
|
|
||||||
margin: 2em }
|
|
||||||
|
|
||||||
h1.section-subtitle, h2.section-subtitle, h3.section-subtitle,
|
|
||||||
h4.section-subtitle, h5.section-subtitle, h6.section-subtitle {
|
|
||||||
margin-top: 0.4em }
|
|
||||||
|
|
||||||
h1.title {
|
|
||||||
text-align: center }
|
|
||||||
|
|
||||||
h2.subtitle {
|
|
||||||
text-align: center }
|
|
||||||
|
|
||||||
hr.docutils {
|
|
||||||
width: 75% }
|
|
||||||
|
|
||||||
img.align-left {
|
|
||||||
clear: left }
|
|
||||||
|
|
||||||
img.align-right {
|
|
||||||
clear: right }
|
|
||||||
|
|
||||||
ol.simple, ul.simple {
|
|
||||||
margin-bottom: 1em }
|
|
||||||
|
|
||||||
ol.arabic {
|
|
||||||
list-style: decimal }
|
|
||||||
|
|
||||||
ol.loweralpha {
|
|
||||||
list-style: lower-alpha }
|
|
||||||
|
|
||||||
ol.upperalpha {
|
|
||||||
list-style: upper-alpha }
|
|
||||||
|
|
||||||
ol.lowerroman {
|
|
||||||
list-style: lower-roman }
|
|
||||||
|
|
||||||
ol.upperroman {
|
|
||||||
list-style: upper-roman }
|
|
||||||
|
|
||||||
p.attribution {
|
|
||||||
text-align: right ;
|
|
||||||
margin-left: 50% }
|
|
||||||
|
|
||||||
p.caption {
|
|
||||||
font-style: italic }
|
|
||||||
|
|
||||||
p.credits {
|
|
||||||
font-style: italic ;
|
|
||||||
font-size: smaller }
|
|
||||||
|
|
||||||
p.label {
|
|
||||||
white-space: nowrap }
|
|
||||||
|
|
||||||
p.rubric {
|
|
||||||
font-weight: bold ;
|
|
||||||
font-size: larger ;
|
|
||||||
color: maroon ;
|
|
||||||
text-align: center }
|
|
||||||
|
|
||||||
p.sidebar-title {
|
|
||||||
font-family: sans-serif ;
|
|
||||||
font-weight: bold ;
|
|
||||||
font-size: larger }
|
|
||||||
|
|
||||||
p.sidebar-subtitle {
|
|
||||||
font-family: sans-serif ;
|
|
||||||
font-weight: bold }
|
|
||||||
|
|
||||||
p.topic-title {
|
|
||||||
font-weight: bold }
|
|
||||||
|
|
||||||
pre.address {
|
|
||||||
margin-bottom: 0 ;
|
|
||||||
margin-top: 0 ;
|
|
||||||
font-family: serif ;
|
|
||||||
font-size: 100% }
|
|
||||||
|
|
||||||
pre.literal-block, pre.doctest-block {
|
|
||||||
margin-left: 2em ;
|
|
||||||
margin-right: 2em ;
|
|
||||||
background-color: #eeeeee }
|
|
||||||
|
|
||||||
span.classifier {
|
|
||||||
font-family: sans-serif ;
|
|
||||||
font-style: oblique }
|
|
||||||
|
|
||||||
span.classifier-delimiter {
|
|
||||||
font-family: sans-serif ;
|
|
||||||
font-weight: bold }
|
|
||||||
|
|
||||||
span.interpreted {
|
|
||||||
font-family: sans-serif }
|
|
||||||
|
|
||||||
span.option {
|
|
||||||
white-space: nowrap }
|
|
||||||
|
|
||||||
span.pre {
|
|
||||||
white-space: pre }
|
|
||||||
|
|
||||||
span.problematic {
|
|
||||||
color: red }
|
|
||||||
|
|
||||||
span.section-subtitle {
|
|
||||||
/* font-size relative to parent (h1..h6 element) */
|
|
||||||
font-size: 80% }
|
|
||||||
|
|
||||||
table.citation {
|
|
||||||
border-left: solid 1px gray;
|
|
||||||
margin-left: 1px }
|
|
||||||
|
|
||||||
table.docinfo {
|
|
||||||
margin: 2em 4em }
|
|
||||||
|
|
||||||
table.docutils {
|
|
||||||
margin-top: 0.5em ;
|
|
||||||
margin-bottom: 0.5em }
|
|
||||||
|
|
||||||
table.footnote {
|
|
||||||
border-left: solid 1px black;
|
|
||||||
margin-left: 1px }
|
|
||||||
|
|
||||||
table.docutils td, table.docutils th,
|
|
||||||
table.docinfo td, table.docinfo th {
|
|
||||||
padding-left: 0.5em ;
|
|
||||||
padding-right: 0.5em ;
|
|
||||||
vertical-align: top }
|
|
||||||
|
|
||||||
table.docutils th.field-name, table.docinfo th.docinfo-name {
|
|
||||||
font-weight: bold ;
|
|
||||||
text-align: left ;
|
|
||||||
white-space: nowrap ;
|
|
||||||
padding-left: 0 }
|
|
||||||
|
|
||||||
h1 tt.docutils, h2 tt.docutils, h3 tt.docutils,
|
|
||||||
h4 tt.docutils, h5 tt.docutils, h6 tt.docutils {
|
|
||||||
font-size: 100% }
|
|
||||||
|
|
||||||
tt.docutils {
|
|
||||||
background-color: #eeeeee }
|
|
||||||
|
|
||||||
ul.auto-toc {
|
|
||||||
list-style-type: none }
|
|
||||||
|
|
||||||
</style>
|
|
||||||
</head>
|
</head>
|
||||||
<body>
|
<body>
|
||||||
<div class="document" id="the-boost-iterator-library-logo">
|
<div class="document" id="the-boost-iterator-library-logo">
|
||||||
<h1 class="title">The Boost.Iterator Library <a class="reference" href="../../../index.htm"><img alt="Boost" src="../../../boost.png" /></a></h1>
|
<h1 class="title">The Boost.Iterator Library <a class="reference external" href="../../../index.htm"><img alt="Boost" src="../../../boost.png" /></a></h1>
|
||||||
|
|
||||||
<!-- Distributed under the Boost -->
|
<!-- Distributed under the Boost -->
|
||||||
<!-- Software License, Version 1.0. (See accompanying -->
|
<!-- Software License, Version 1.0. (See accompanying -->
|
||||||
<!-- file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) -->
|
<!-- file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) -->
|
||||||
@ -302,10 +21,10 @@ ul.auto-toc {
|
|||||||
<tbody valign="top">
|
<tbody valign="top">
|
||||||
<tr class="field"><th class="field-name">Authors:</th><td class="field-body">David Abrahams, Jeremy Siek, Thomas Witt</td>
|
<tr class="field"><th class="field-name">Authors:</th><td class="field-body">David Abrahams, Jeremy Siek, Thomas Witt</td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr class="field"><th class="field-name">Contact:</th><td class="field-body"><a class="reference" href="mailto:dave@boost-consulting.com">dave@boost-consulting.com</a>, <a class="reference" href="mailto:jsiek@osl.iu.edu">jsiek@osl.iu.edu</a>, <a class="reference" href="mailto:witt@styleadvisor.com">witt@styleadvisor.com</a></td>
|
<tr class="field"><th class="field-name">Contact:</th><td class="field-body"><a class="reference external" href="mailto:dave@boost-consulting.com">dave@boost-consulting.com</a>, <a class="reference external" href="mailto:jsiek@osl.iu.edu">jsiek@osl.iu.edu</a>, <a class="reference external" href="mailto:witt@styleadvisor.com">witt@styleadvisor.com</a></td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr class="field"><th class="field-name">organizations:</th><td class="field-body"><a class="reference" href="http://www.boost-consulting.com">Boost Consulting</a>, Indiana University <a class="reference" href="http://www.osl.iu.edu">Open Systems
|
<tr class="field"><th class="field-name">organizations:</th><td class="field-body"><a class="reference external" href="http://www.boost-consulting.com">Boost Consulting</a>, Indiana University <a class="reference external" href="http://www.osl.iu.edu">Open Systems
|
||||||
Lab</a>, <a class="reference" href="http://www.styleadvisor.com">Zephyr Associates, Inc.</a></td>
|
Lab</a>, <a class="reference external" href="http://www.styleadvisor.com">Zephyr Associates, Inc.</a></td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr class="field"><th class="field-name">date:</th><td class="field-body">$Date$</td>
|
<tr class="field"><th class="field-name">date:</th><td class="field-body">$Date$</td>
|
||||||
</tr>
|
</tr>
|
||||||
@ -318,7 +37,7 @@ Lab</a>, <a class="reference" href="http://www.styleadvisor.com">Zephyr Associat
|
|||||||
<col class="field-body" />
|
<col class="field-body" />
|
||||||
<tbody valign="top">
|
<tbody valign="top">
|
||||||
<tr class="field"><th class="field-name">Abstract:</th><td class="field-body">The Boost Iterator Library contains two parts. The first
|
<tr class="field"><th class="field-name">Abstract:</th><td class="field-body">The Boost Iterator Library contains two parts. The first
|
||||||
is a system of <a class="reference" href="../../../more/generic_programming.html#concept">concepts</a> which extend the C++ standard
|
is a system of <a class="reference external" href="http://www.boost.org/more/generic_programming.html#concept">concepts</a> which extend the C++ standard
|
||||||
iterator requirements. The second is a framework of
|
iterator requirements. The second is a framework of
|
||||||
components for building iterators based on these
|
components for building iterators based on these
|
||||||
extended concepts and includes several useful iterator
|
extended concepts and includes several useful iterator
|
||||||
@ -335,24 +54,24 @@ older Boost Iterator Adaptor Library.</td>
|
|||||||
</tr>
|
</tr>
|
||||||
</tbody>
|
</tbody>
|
||||||
</table>
|
</table>
|
||||||
<div class="contents topic">
|
<div class="contents topic" id="table-of-contents">
|
||||||
<p class="topic-title first"><a id="table-of-contents" name="table-of-contents"><strong>Table of Contents</strong></a></p>
|
<p class="topic-title first"><strong>Table of Contents</strong></p>
|
||||||
<ul class="simple">
|
<ul class="simple">
|
||||||
<li><a class="reference" href="#new-style-iterators" id="id22" name="id22">New-Style Iterators</a></li>
|
<li><a class="reference internal" href="#new-style-iterators" id="id23">New-Style Iterators</a></li>
|
||||||
<li><a class="reference" href="#iterator-facade-and-adaptor" id="id23" name="id23">Iterator Facade and Adaptor</a></li>
|
<li><a class="reference internal" href="#iterator-facade-and-adaptor" id="id24">Iterator Facade and Adaptor</a></li>
|
||||||
<li><a class="reference" href="#specialized-adaptors" id="id24" name="id24">Specialized Adaptors</a></li>
|
<li><a class="reference internal" href="#specialized-adaptors" id="id25">Specialized Adaptors</a></li>
|
||||||
<li><a class="reference" href="#iterator-utilities" id="id25" name="id25">Iterator Utilities</a><ul>
|
<li><a class="reference internal" href="#iterator-utilities" id="id26">Iterator Utilities</a><ul>
|
||||||
<li><a class="reference" href="#traits" id="id26" name="id26">Traits</a></li>
|
<li><a class="reference internal" href="#traits" id="id27">Traits</a></li>
|
||||||
<li><a class="reference" href="#testing-and-concept-checking" id="id27" name="id27">Testing and Concept Checking</a></li>
|
<li><a class="reference internal" href="#testing-and-concept-checking" id="id28">Testing and Concept Checking</a></li>
|
||||||
</ul>
|
</ul>
|
||||||
</li>
|
</li>
|
||||||
<li><a class="reference" href="#upgrading-from-the-old-boost-iterator-adaptor-library" id="id28" name="id28">Upgrading from the old Boost Iterator Adaptor Library</a></li>
|
<li><a class="reference internal" href="#upgrading-from-the-old-boost-iterator-adaptor-library" id="id29">Upgrading from the old Boost Iterator Adaptor Library</a></li>
|
||||||
<li><a class="reference" href="#history" id="id29" name="id29">History</a></li>
|
<li><a class="reference internal" href="#history" id="id30">History</a></li>
|
||||||
</ul>
|
</ul>
|
||||||
</div>
|
</div>
|
||||||
<hr class="docutils" />
|
<hr class="docutils" />
|
||||||
<div class="section">
|
<div class="section" id="new-style-iterators">
|
||||||
<h1><a class="toc-backref" href="#id22" id="new-style-iterators" name="new-style-iterators">New-Style Iterators</a></h1>
|
<h1><a class="toc-backref" href="#id23">New-Style Iterators</a></h1>
|
||||||
<p>The iterator categories defined in C++98 are extremely limiting
|
<p>The iterator categories defined in C++98 are extremely limiting
|
||||||
because they bind together two orthogonal concepts: traversal and
|
because they bind together two orthogonal concepts: traversal and
|
||||||
element access. For example, because a random access iterator is
|
element access. For example, because a random access iterator is
|
||||||
@ -361,17 +80,17 @@ it is impossible to capture the capabilities of
|
|||||||
<tt class="docutils literal"><span class="pre">vector<bool>::iterator</span></tt> using the C++98 categories. This is the
|
<tt class="docutils literal"><span class="pre">vector<bool>::iterator</span></tt> using the C++98 categories. This is the
|
||||||
infamous "<tt class="docutils literal"><span class="pre">vector<bool></span></tt> is not a container, and its iterators
|
infamous "<tt class="docutils literal"><span class="pre">vector<bool></span></tt> is not a container, and its iterators
|
||||||
aren't random access iterators", debacle about which Herb Sutter
|
aren't random access iterators", debacle about which Herb Sutter
|
||||||
wrote two papers for the standards comittee (<a class="reference" href="http://www.gotw.ca/publications/N1185.pdf">n1185</a> and <a class="reference" href="http://www.gotw.ca/publications/N1211.pdf">n1211</a>),
|
wrote two papers for the standards comittee (<a class="reference external" href="http://www.gotw.ca/publications/N1185.pdf">n1185</a> and <a class="reference external" href="http://www.gotw.ca/publications/N1211.pdf">n1211</a>),
|
||||||
and a <a class="reference" href="http://www.gotw.ca/gotw/050.htm">Guru of the Week</a>. New-style iterators go well beyond
|
and a <a class="reference external" href="http://www.gotw.ca/gotw/050.htm">Guru of the Week</a>. New-style iterators go well beyond
|
||||||
patching up <tt class="docutils literal"><span class="pre">vector<bool></span></tt>, though: there are lots of other
|
patching up <tt class="docutils literal"><span class="pre">vector<bool></span></tt>, though: there are lots of other
|
||||||
iterators already in use which can't be adequately represented by
|
iterators already in use which can't be adequately represented by
|
||||||
the existing concepts. For details about the new iterator
|
the existing concepts. For details about the new iterator
|
||||||
concepts, see our</p>
|
concepts, see our</p>
|
||||||
<blockquote>
|
<blockquote>
|
||||||
<a class="reference" href="new-iter-concepts.html">Standard Proposal For New-Style Iterators</a> (<a class="reference" href="new-iter-concepts.pdf">PDF</a>)</blockquote>
|
<a class="reference external" href="new-iter-concepts.html">Standard Proposal For New-Style Iterators</a> (<a class="reference external" href="new-iter-concepts.pdf">PDF</a>)</blockquote>
|
||||||
</div>
|
</div>
|
||||||
<div class="section">
|
<div class="section" id="iterator-facade-and-adaptor">
|
||||||
<h1><a class="toc-backref" href="#id23" id="iterator-facade-and-adaptor" name="iterator-facade-and-adaptor">Iterator Facade and Adaptor</a></h1>
|
<h1><a class="toc-backref" href="#id24">Iterator Facade and Adaptor</a></h1>
|
||||||
<p>Writing standard-conforming iterators is tricky, but the need comes
|
<p>Writing standard-conforming iterators is tricky, but the need comes
|
||||||
up often. In order to ease the implementation of new iterators,
|
up often. In order to ease the implementation of new iterators,
|
||||||
the Boost.Iterator library provides the <tt class="docutils literal"><span class="pre">iterator_facade</span></tt> class template,
|
the Boost.Iterator library provides the <tt class="docutils literal"><span class="pre">iterator_facade</span></tt> class template,
|
||||||
@ -387,54 +106,60 @@ behavior as possible.</p>
|
|||||||
<p>The documentation for these two classes can be found at the following
|
<p>The documentation for these two classes can be found at the following
|
||||||
web pages:</p>
|
web pages:</p>
|
||||||
<ul class="simple">
|
<ul class="simple">
|
||||||
<li><a class="reference" href="iterator_facade.html"><tt class="docutils literal"><span class="pre">iterator_facade</span></tt></a> (<a class="reference" href="iterator_facade.pdf">PDF</a>)</li>
|
<li><a class="reference external" href="iterator_facade.html"><tt class="docutils literal"><span class="pre">iterator_facade</span></tt></a> (<a class="reference external" href="iterator_facade.pdf">PDF</a>)</li>
|
||||||
<li><a class="reference" href="iterator_adaptor.html"><tt class="docutils literal"><span class="pre">iterator_adaptor</span></tt></a> (<a class="reference" href="iterator_adaptor.pdf">PDF</a>)</li>
|
<li><a class="reference external" href="iterator_adaptor.html"><tt class="docutils literal"><span class="pre">iterator_adaptor</span></tt></a> (<a class="reference external" href="iterator_adaptor.pdf">PDF</a>)</li>
|
||||||
</ul>
|
</ul>
|
||||||
<p>Both <tt class="docutils literal"><span class="pre">iterator_facade</span></tt> and <tt class="docutils literal"><span class="pre">iterator_adaptor</span></tt> as well as many of the <a class="reference" href="#specialized-adaptors">specialized
|
<p>Both <tt class="docutils literal"><span class="pre">iterator_facade</span></tt> and <tt class="docutils literal"><span class="pre">iterator_adaptor</span></tt> as well as many of the <a class="reference internal" href="#specialized-adaptors">specialized
|
||||||
adaptors</a> mentioned below have been proposed for standardization,
|
adaptors</a> mentioned below have been proposed for standardization,
|
||||||
and accepted into the first C++ technical report; see our</p>
|
and accepted into the first C++ technical report; see our</p>
|
||||||
<blockquote>
|
<blockquote>
|
||||||
<a class="reference" href="facade-and-adaptor.html">Standard Proposal For Iterator Facade and Adaptor</a> (<a class="reference" href="facade-and-adaptor.pdf">PDF</a>)</blockquote>
|
<a class="reference external" href="facade-and-adaptor.html">Standard Proposal For Iterator Facade and Adaptor</a> (<a class="reference external" href="facade-and-adaptor.pdf">PDF</a>)</blockquote>
|
||||||
<p>for more details.</p>
|
<p>for more details.</p>
|
||||||
</div>
|
</div>
|
||||||
<div class="section">
|
<div class="section" id="specialized-adaptors">
|
||||||
<h1><a class="toc-backref" href="#id24" id="specialized-adaptors" name="specialized-adaptors">Specialized Adaptors</a></h1>
|
<h1><a class="toc-backref" href="#id25">Specialized Adaptors</a></h1>
|
||||||
<p>The iterator library supplies a useful suite of standard-conforming
|
<p>The iterator library supplies a useful suite of standard-conforming
|
||||||
iterator templates based on the Boost <a class="reference" href="#iterator-facade-and-adaptor">iterator facade and adaptor</a>.</p>
|
iterator templates based on the Boost <a class="reference internal" href="#iterator-facade-and-adaptor">iterator facade and adaptor</a>.</p>
|
||||||
<ul class="simple">
|
<ul class="simple">
|
||||||
<li><a class="reference" href="counting_iterator.html"><tt class="docutils literal"><span class="pre">counting_iterator</span></tt></a> (<a class="reference" href="counting_iterator.pdf">PDF</a>): an iterator over a sequence of consecutive values.
|
<li><a class="reference external" href="counting_iterator.html"><tt class="docutils literal"><span class="pre">counting_iterator</span></tt></a> (<a class="reference external" href="counting_iterator.pdf">PDF</a>): an iterator over a sequence of consecutive values.
|
||||||
Implements a "lazy sequence"</li>
|
Implements a "lazy sequence"</li>
|
||||||
<li><a class="reference" href="filter_iterator.html"><tt class="docutils literal"><span class="pre">filter_iterator</span></tt></a> (<a class="reference" href="filter_iterator.pdf">PDF</a>): an iterator over the subset of elements of some
|
<li><a class="reference external" href="filter_iterator.html"><tt class="docutils literal"><span class="pre">filter_iterator</span></tt></a> (<a class="reference external" href="filter_iterator.pdf">PDF</a>): an iterator over the subset of elements of some
|
||||||
sequence which satisfy a given predicate</li>
|
sequence which satisfy a given predicate</li>
|
||||||
<li><a class="reference" href="function_output_iterator.html"><tt class="docutils literal"><span class="pre">function_output_iterator</span></tt></a> (<a class="reference" href="function_output_iterator.pdf">PDF</a>): an output iterator wrapping a unary function
|
<li><a class="reference external" href="function_input_iterator.html"><tt class="docutils literal"><span class="pre">function_input_iterator</span></tt></a> (<a class="reference external" href="function_input_iterator.pdf">PDF</a>): an input iterator wrapping a generator (nullary
|
||||||
|
function object); each time the iterator is dereferenced, the function object
|
||||||
|
is called to get the value to return.</li>
|
||||||
|
<li><a class="reference external" href="function_output_iterator.html"><tt class="docutils literal"><span class="pre">function_output_iterator</span></tt></a> (<a class="reference external" href="function_output_iterator.pdf">PDF</a>): an output iterator wrapping a unary function
|
||||||
object; each time an element is written into the dereferenced
|
object; each time an element is written into the dereferenced
|
||||||
iterator, it is passed as a parameter to the function object.</li>
|
iterator, it is passed as a parameter to the function object.</li>
|
||||||
<li><a class="reference" href="indirect_iterator.html"><tt class="docutils literal"><span class="pre">indirect_iterator</span></tt></a> (<a class="reference" href="indirect_iterator.pdf">PDF</a>): an iterator over the objects <em>pointed-to</em> by the
|
<li><a class="reference external" href="generator_iterator.htm"><tt class="docutils literal"><span class="pre">generator_iterator</span></tt></a>: an input iterator wrapping a reference to a generator (nullary function object);
|
||||||
|
each time the iterator is dereferenced, the function object
|
||||||
|
is called to get the value to return. This is a more outdated analogue of <tt class="docutils literal"><span class="pre">function_input_iterator</span></tt>.</li>
|
||||||
|
<li><a class="reference external" href="indirect_iterator.html"><tt class="docutils literal"><span class="pre">indirect_iterator</span></tt></a> (<a class="reference external" href="indirect_iterator.pdf">PDF</a>): an iterator over the objects <em>pointed-to</em> by the
|
||||||
elements of some sequence.</li>
|
elements of some sequence.</li>
|
||||||
<li><a class="reference" href="permutation_iterator.html"><tt class="docutils literal"><span class="pre">permutation_iterator</span></tt></a> (<a class="reference" href="permutation_iterator.pdf">PDF</a>): an iterator over the elements of some random-access
|
<li><a class="reference external" href="permutation_iterator.html"><tt class="docutils literal"><span class="pre">permutation_iterator</span></tt></a> (<a class="reference external" href="permutation_iterator.pdf">PDF</a>): an iterator over the elements of some random-access
|
||||||
sequence, rearranged according to some sequence of integer indices.</li>
|
sequence, rearranged according to some sequence of integer indices.</li>
|
||||||
<li><a class="reference" href="reverse_iterator.html"><tt class="docutils literal"><span class="pre">reverse_iterator</span></tt></a> (<a class="reference" href="reverse_iterator.pdf">PDF</a>): an iterator which traverses the elements of some
|
<li><a class="reference external" href="reverse_iterator.html"><tt class="docutils literal"><span class="pre">reverse_iterator</span></tt></a> (<a class="reference external" href="reverse_iterator.pdf">PDF</a>): an iterator which traverses the elements of some
|
||||||
bidirectional sequence in reverse. Corrects many of the
|
bidirectional sequence in reverse. Corrects many of the
|
||||||
shortcomings of C++98's <tt class="docutils literal"><span class="pre">std::reverse_iterator</span></tt>.</li>
|
shortcomings of C++98's <tt class="docutils literal"><span class="pre">std::reverse_iterator</span></tt>.</li>
|
||||||
<li><a class="reference" href="../../utility/shared_container_iterator.html"><tt class="docutils literal"><span class="pre">shared_container_iterator</span></tt></a>: an iterator over elements of a container whose
|
<li><a class="reference external" href="../../utility/shared_container_iterator.html"><tt class="docutils literal"><span class="pre">shared_container_iterator</span></tt></a>: an iterator over elements of a container whose
|
||||||
lifetime is maintained by a <a class="reference" href="../../smart_ptr/shared_ptr.htm"><tt class="docutils literal"><span class="pre">shared_ptr</span></tt></a> stored in the iterator.</li>
|
lifetime is maintained by a <a class="reference external" href="../../smart_ptr/shared_ptr.htm"><tt class="docutils literal"><span class="pre">shared_ptr</span></tt></a> stored in the iterator.</li>
|
||||||
<li><a class="reference" href="transform_iterator.html"><tt class="docutils literal"><span class="pre">transform_iterator</span></tt></a> (<a class="reference" href="transform_iterator.pdf">PDF</a>): an iterator over elements which are the result of
|
<li><a class="reference external" href="transform_iterator.html"><tt class="docutils literal"><span class="pre">transform_iterator</span></tt></a> (<a class="reference external" href="transform_iterator.pdf">PDF</a>): an iterator over elements which are the result of
|
||||||
applying some functional transformation to the elements of an
|
applying some functional transformation to the elements of an
|
||||||
underlying sequence. This component also replaces the old
|
underlying sequence. This component also replaces the old
|
||||||
<tt class="docutils literal"><span class="pre">projection_iterator_adaptor</span></tt>.</li>
|
<tt class="docutils literal"><span class="pre">projection_iterator_adaptor</span></tt>.</li>
|
||||||
<li><a class="reference" href="zip_iterator.html"><tt class="docutils literal"><span class="pre">zip_iterator</span></tt></a> (<a class="reference" href="zip_iterator.pdf">PDF</a>): an iterator over tuples of the elements at corresponding
|
<li><a class="reference external" href="zip_iterator.html"><tt class="docutils literal"><span class="pre">zip_iterator</span></tt></a> (<a class="reference external" href="zip_iterator.pdf">PDF</a>): an iterator over tuples of the elements at corresponding
|
||||||
positions of heterogeneous underlying iterators.</li>
|
positions of heterogeneous underlying iterators.</li>
|
||||||
</ul>
|
</ul>
|
||||||
</div>
|
</div>
|
||||||
<div class="section">
|
<div class="section" id="iterator-utilities">
|
||||||
<h1><a class="toc-backref" href="#id25" id="iterator-utilities" name="iterator-utilities">Iterator Utilities</a></h1>
|
<h1><a class="toc-backref" href="#id26">Iterator Utilities</a></h1>
|
||||||
<div class="section">
|
<div class="section" id="traits">
|
||||||
<h2><a class="toc-backref" href="#id26" id="traits" name="traits">Traits</a></h2>
|
<h2><a class="toc-backref" href="#id27">Traits</a></h2>
|
||||||
<ul class="simple">
|
<ul class="simple">
|
||||||
<li><a class="reference" href="pointee.html"><tt class="docutils literal"><span class="pre">pointee.hpp</span></tt></a> (<a class="reference" href="pointee.pdf">PDF</a>): Provides the capability to deduce the referent types
|
<li><a class="reference external" href="pointee.html"><tt class="docutils literal"><span class="pre">pointee.hpp</span></tt></a> (<a class="reference external" href="pointee.pdf">PDF</a>): Provides the capability to deduce the referent types
|
||||||
of pointers, smart pointers and iterators in generic code. Used
|
of pointers, smart pointers and iterators in generic code. Used
|
||||||
in <tt class="docutils literal"><span class="pre">indirect_iterator</span></tt>.</li>
|
in <tt class="docutils literal"><span class="pre">indirect_iterator</span></tt>.</li>
|
||||||
<li><a class="reference" href="iterator_traits.html"><tt class="docutils literal"><span class="pre">iterator_traits.hpp</span></tt></a> (<a class="reference" href="iterator_traits.pdf">PDF</a>): Provides <a class="reference" href="../../mpl/doc/index.html">MPL</a>-compatible metafunctions which
|
<li><a class="reference external" href="iterator_traits.html"><tt class="docutils literal"><span class="pre">iterator_traits.hpp</span></tt></a> (<a class="reference external" href="iterator_traits.pdf">PDF</a>): Provides <a class="reference external" href="../../mpl/doc/index.html">MPL</a>-compatible metafunctions which
|
||||||
retrieve an iterator's traits. Also corrects for the deficiencies
|
retrieve an iterator's traits. Also corrects for the deficiencies
|
||||||
of broken implementations of <tt class="docutils literal"><span class="pre">std::iterator_traits</span></tt>.</li>
|
of broken implementations of <tt class="docutils literal"><span class="pre">std::iterator_traits</span></tt>.</li>
|
||||||
</ul>
|
</ul>
|
||||||
@ -442,26 +167,26 @@ of broken implementations of <tt class="docutils literal"><span class="pre">std:
|
|||||||
testing iterator interoperability -->
|
testing iterator interoperability -->
|
||||||
<!-- comment! __ interoperable.pdf -->
|
<!-- comment! __ interoperable.pdf -->
|
||||||
</div>
|
</div>
|
||||||
<div class="section">
|
<div class="section" id="testing-and-concept-checking">
|
||||||
<h2><a class="toc-backref" href="#id27" id="testing-and-concept-checking" name="testing-and-concept-checking">Testing and Concept Checking</a></h2>
|
<h2><a class="toc-backref" href="#id28">Testing and Concept Checking</a></h2>
|
||||||
<ul class="simple">
|
<ul class="simple">
|
||||||
<li><a class="reference" href="iterator_concepts.html"><tt class="docutils literal"><span class="pre">iterator_concepts.hpp</span></tt></a> (<a class="reference" href="iterator_concepts.pdf">PDF</a>): Concept checking classes for the new iterator concepts.</li>
|
<li><a class="reference external" href="iterator_concepts.html"><tt class="docutils literal"><span class="pre">iterator_concepts.hpp</span></tt></a> (<a class="reference external" href="iterator_concepts.pdf">PDF</a>): Concept checking classes for the new iterator concepts.</li>
|
||||||
<li><a class="reference" href="iterator_archetypes.html"><tt class="docutils literal"><span class="pre">iterator_archetypes.hpp</span></tt></a> (<a class="reference" href="iterator_archetypes.pdf">PDF</a>): Concept archetype classes for the new iterators concepts.</li>
|
<li><a class="reference external" href="iterator_archetypes.html"><tt class="docutils literal"><span class="pre">iterator_archetypes.hpp</span></tt></a> (<a class="reference external" href="iterator_archetypes.pdf">PDF</a>): Concept archetype classes for the new iterators concepts.</li>
|
||||||
</ul>
|
</ul>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="section">
|
<div class="section" id="upgrading-from-the-old-boost-iterator-adaptor-library">
|
||||||
<h1><a class="toc-backref" href="#id28" id="upgrading-from-the-old-boost-iterator-adaptor-library" name="upgrading-from-the-old-boost-iterator-adaptor-library">Upgrading from the old Boost Iterator Adaptor Library</a></h1>
|
<h1><a class="toc-backref" href="#id29">Upgrading from the old Boost Iterator Adaptor Library</a></h1>
|
||||||
<p id="upgrading">If you have been using the old Boost Iterator Adaptor library to
|
<p id="upgrading">If you have been using the old Boost Iterator Adaptor library to
|
||||||
implement iterators, you probably wrote a <tt class="docutils literal"><span class="pre">Policies</span></tt> class which
|
implement iterators, you probably wrote a <tt class="docutils literal"><span class="pre">Policies</span></tt> class which
|
||||||
captures the core operations of your iterator. In the new library
|
captures the core operations of your iterator. In the new library
|
||||||
design, you'll move those same core operations into the body of the
|
design, you'll move those same core operations into the body of the
|
||||||
iterator class itself. If you were writing a family of iterators,
|
iterator class itself. If you were writing a family of iterators,
|
||||||
you probably wrote a <a class="reference" href="../../../more/generic_programming.html#type_generator">type generator</a> to build the
|
you probably wrote a <a class="reference external" href="http://www.boost.org/more/generic_programming.html#type_generator">type generator</a> to build the
|
||||||
<tt class="docutils literal"><span class="pre">iterator_adaptor</span></tt> specialization you needed; in the new library
|
<tt class="docutils literal"><span class="pre">iterator_adaptor</span></tt> specialization you needed; in the new library
|
||||||
design you don't need a type generator (though may want to keep it
|
design you don't need a type generator (though may want to keep it
|
||||||
around as a compatibility aid for older code) because, due to the
|
around as a compatibility aid for older code) because, due to the
|
||||||
use of the Curiously Recurring Template Pattern (CRTP) <a class="citation-reference" href="#cop95" id="id21" name="id21">[Cop95]</a>,
|
use of the Curiously Recurring Template Pattern (CRTP) <a class="citation-reference" href="#cop95" id="id22">[Cop95]</a>,
|
||||||
you can now define the iterator class yourself and acquire
|
you can now define the iterator class yourself and acquire
|
||||||
functionality through inheritance from <tt class="docutils literal"><span class="pre">iterator_facade</span></tt> or
|
functionality through inheritance from <tt class="docutils literal"><span class="pre">iterator_facade</span></tt> or
|
||||||
<tt class="docutils literal"><span class="pre">iterator_adaptor</span></tt>. As a result, you also get much finer control
|
<tt class="docutils literal"><span class="pre">iterator_adaptor</span></tt>. As a result, you also get much finer control
|
||||||
@ -475,8 +200,8 @@ template argument, if explicitly specified) is a true reference
|
|||||||
type, <tt class="docutils literal"><span class="pre">transform_iterator</span></tt> will behave like
|
type, <tt class="docutils literal"><span class="pre">transform_iterator</span></tt> will behave like
|
||||||
<tt class="docutils literal"><span class="pre">projection_iterator</span></tt> used to.</p>
|
<tt class="docutils literal"><span class="pre">projection_iterator</span></tt> used to.</p>
|
||||||
</div>
|
</div>
|
||||||
<div class="section">
|
<div class="section" id="history">
|
||||||
<h1><a class="toc-backref" href="#id29" id="history" name="history">History</a></h1>
|
<h1><a class="toc-backref" href="#id30">History</a></h1>
|
||||||
<p>In 2000 Dave Abrahams was writing an iterator for a container of
|
<p>In 2000 Dave Abrahams was writing an iterator for a container of
|
||||||
pointers, which would access the pointed-to elements when
|
pointers, which would access the pointed-to elements when
|
||||||
dereferenced. Naturally, being a library writer, he decided to
|
dereferenced. Naturally, being a library writer, he decided to
|
||||||
@ -504,7 +229,7 @@ library you see today.</p>
|
|||||||
<table class="docutils citation" frame="void" id="cop95" rules="none">
|
<table class="docutils citation" frame="void" id="cop95" rules="none">
|
||||||
<colgroup><col class="label" /><col /></colgroup>
|
<colgroup><col class="label" /><col /></colgroup>
|
||||||
<tbody valign="top">
|
<tbody valign="top">
|
||||||
<tr><td class="label"><a class="fn-backref" href="#id21" name="cop95">[Cop95]</a></td><td>[Coplien, 1995] Coplien, J., Curiously Recurring Template
|
<tr><td class="label"><a class="fn-backref" href="#id22">[Cop95]</a></td><td>[Coplien, 1995] Coplien, J., Curiously Recurring Template
|
||||||
Patterns, C++ Report, February 1995, pp. 24-27.</td></tr>
|
Patterns, C++ Report, February 1995, pp. 24-27.</td></tr>
|
||||||
</tbody>
|
</tbody>
|
||||||
</table>
|
</table>
|
||||||
@ -516,6 +241,12 @@ LocalWords: RandomAccessTraversalIterator dereferenceable Incrementable tmp
|
|||||||
LocalWords: incrementable xxx min prev inplace png oldeqnew AccessTag struct
|
LocalWords: incrementable xxx min prev inplace png oldeqnew AccessTag struct
|
||||||
LocalWords: TraversalTag typename lvalues DWA Hmm JGS -->
|
LocalWords: TraversalTag typename lvalues DWA Hmm JGS -->
|
||||||
</div>
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="footer">
|
||||||
|
<hr class="footer" />
|
||||||
|
<a class="reference external" href="index.rst">View document source</a>.
|
||||||
|
Generated by <a class="reference external" href="http://docutils.sourceforge.net/">Docutils</a> from <a class="reference external" href="http://docutils.sourceforge.net/rst.html">reStructuredText</a> source.
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
</body>
|
</body>
|
||||||
</html>
|
</html>
|
||||||
|
46
doc/index.rst
Executable file → Normal file
46
doc/index.rst
Executable file → Normal file
@ -43,7 +43,7 @@ __ ../../../index.htm
|
|||||||
The components of the Boost Iterator Library replace the
|
The components of the Boost Iterator Library replace the
|
||||||
older Boost Iterator Adaptor Library.
|
older Boost Iterator Adaptor Library.
|
||||||
|
|
||||||
.. _concepts: ../../../more/generic_programming.html#concept
|
.. _concepts: http://www.boost.org/more/generic_programming.html#concept
|
||||||
|
|
||||||
.. contents:: **Table of Contents**
|
.. contents:: **Table of Contents**
|
||||||
|
|
||||||
@ -115,8 +115,8 @@ __ iterator_facade.pdf
|
|||||||
__ iterator_adaptor.pdf
|
__ iterator_adaptor.pdf
|
||||||
|
|
||||||
Both |facade| and |adaptor| as well as many of the `specialized
|
Both |facade| and |adaptor| as well as many of the `specialized
|
||||||
adaptors`_ mentioned below have been proposed for standardization,
|
adaptors`_ mentioned below have been proposed for standardization;
|
||||||
and accepted into the first C++ technical report; see our
|
see our
|
||||||
|
|
||||||
`Standard Proposal For Iterator Facade and Adaptor`__ (PDF__)
|
`Standard Proposal For Iterator Facade and Adaptor`__ (PDF__)
|
||||||
|
|
||||||
@ -138,10 +138,18 @@ iterator templates based on the Boost `iterator facade and adaptor`_.
|
|||||||
* |filter|_ (PDF__): an iterator over the subset of elements of some
|
* |filter|_ (PDF__): an iterator over the subset of elements of some
|
||||||
sequence which satisfy a given predicate
|
sequence which satisfy a given predicate
|
||||||
|
|
||||||
* |function|_ (PDF__): an output iterator wrapping a unary function
|
* |function_input|_ (PDF__): an input iterator wrapping a generator (nullary
|
||||||
|
function object); each time the iterator is dereferenced, the function object
|
||||||
|
is called to get the value to return.
|
||||||
|
|
||||||
|
* |function_output|_ (PDF__): an output iterator wrapping a unary function
|
||||||
object; each time an element is written into the dereferenced
|
object; each time an element is written into the dereferenced
|
||||||
iterator, it is passed as a parameter to the function object.
|
iterator, it is passed as a parameter to the function object.
|
||||||
|
|
||||||
|
* |generator|_: an input iterator wrapping a generator (nullary
|
||||||
|
function object); each time the iterator is dereferenced, the function object
|
||||||
|
is called to get the value to return. This is an outdated analogue of |function_input|_.
|
||||||
|
|
||||||
* |indirect|_ (PDF__): an iterator over the objects *pointed-to* by the
|
* |indirect|_ (PDF__): an iterator over the objects *pointed-to* by the
|
||||||
elements of some sequence.
|
elements of some sequence.
|
||||||
|
|
||||||
@ -171,10 +179,17 @@ __ counting_iterator.pdf
|
|||||||
.. _filter: filter_iterator.html
|
.. _filter: filter_iterator.html
|
||||||
__ filter_iterator.pdf
|
__ filter_iterator.pdf
|
||||||
|
|
||||||
.. |function| replace:: ``function_output_iterator``
|
.. |function_input| replace:: ``function_input_iterator``
|
||||||
.. _function: function_output_iterator.html
|
.. _function_input: function_input_iterator.html
|
||||||
|
__ function_input_iterator.pdf
|
||||||
|
|
||||||
|
.. |function_output| replace:: ``function_output_iterator``
|
||||||
|
.. _function_output: function_output_iterator.html
|
||||||
__ function_output_iterator.pdf
|
__ function_output_iterator.pdf
|
||||||
|
|
||||||
|
.. |generator| replace:: ``generator_iterator``
|
||||||
|
.. _generator: generator_iterator.htm
|
||||||
|
|
||||||
.. |indirect| replace:: ``indirect_iterator``
|
.. |indirect| replace:: ``indirect_iterator``
|
||||||
.. _indirect: indirect_iterator.html
|
.. _indirect: indirect_iterator.html
|
||||||
__ indirect_iterator.pdf
|
__ indirect_iterator.pdf
|
||||||
@ -205,6 +220,23 @@ __ zip_iterator.pdf
|
|||||||
Iterator Utilities
|
Iterator Utilities
|
||||||
====================
|
====================
|
||||||
|
|
||||||
|
Operations
|
||||||
|
----------
|
||||||
|
|
||||||
|
The standard library does not handle new-style iterators properly,
|
||||||
|
because it knows nothing about the iterator traversal concepts.
|
||||||
|
The Boost.Iterator library provides implementations that fully understand
|
||||||
|
the new concepts for the two basic operations:
|
||||||
|
|
||||||
|
- |advance|_
|
||||||
|
- |distance|_
|
||||||
|
|
||||||
|
.. |advance| replace:: ``advance``
|
||||||
|
.. _advance: advance.html
|
||||||
|
|
||||||
|
.. |distance| replace:: ``distance``
|
||||||
|
.. _distance: distance.html
|
||||||
|
|
||||||
Traits
|
Traits
|
||||||
------
|
------
|
||||||
|
|
||||||
@ -271,7 +303,7 @@ over how your iterator works: you can add additional constructors,
|
|||||||
or even override the iterator functionality provided by the
|
or even override the iterator functionality provided by the
|
||||||
library.
|
library.
|
||||||
|
|
||||||
.. _`type generator`: ../../../more/generic_programming.html#type_generator
|
.. _`type generator`: http://www.boost.org/more/generic_programming.html#type_generator
|
||||||
|
|
||||||
If you're looking for the old ``projection_iterator`` component,
|
If you're looking for the old ``projection_iterator`` component,
|
||||||
its functionality has been merged into ``transform_iterator``: as
|
its functionality has been merged into ``transform_iterator``: as
|
||||||
|
@ -3,295 +3,13 @@
|
|||||||
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
|
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
|
||||||
<head>
|
<head>
|
||||||
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
|
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
|
||||||
<meta name="generator" content="Docutils 0.4: http://docutils.sourceforge.net/" />
|
<meta name="generator" content="Docutils 0.5: http://docutils.sourceforge.net/" />
|
||||||
<title>Indirect Iterator</title>
|
<title>Indirect Iterator</title>
|
||||||
<meta name="author" content="David Abrahams, Jeremy Siek, Thomas Witt" />
|
<meta name="author" content="David Abrahams, Jeremy Siek, Thomas Witt" />
|
||||||
<meta name="organization" content="Boost Consulting, Indiana University Open Systems Lab, University of Hanover Institute for Transport Railway Operation and Construction" />
|
<meta name="organization" content="Boost Consulting, Indiana University Open Systems Lab, University of Hanover Institute for Transport Railway Operation and Construction" />
|
||||||
<meta name="date" content="2004-11-01" />
|
<meta name="date" content="2006-09-11" />
|
||||||
<meta name="copyright" content="Copyright David Abrahams, Jeremy Siek, and Thomas Witt 2003." />
|
<meta name="copyright" content="Copyright David Abrahams, Jeremy Siek, and Thomas Witt 2003." />
|
||||||
<style type="text/css">
|
<link rel="stylesheet" href="../../../rst.css" type="text/css" />
|
||||||
|
|
||||||
/*
|
|
||||||
:Author: David Goodger
|
|
||||||
:Contact: goodger@users.sourceforge.net
|
|
||||||
:Date: $Date$
|
|
||||||
:Revision: $Revision$
|
|
||||||
:Copyright: This stylesheet has been placed in the public domain.
|
|
||||||
|
|
||||||
Default cascading style sheet for the HTML output of Docutils.
|
|
||||||
|
|
||||||
See http://docutils.sf.net/docs/howto/html-stylesheets.html for how to
|
|
||||||
customize this style sheet.
|
|
||||||
*/
|
|
||||||
|
|
||||||
/* used to remove borders from tables and images */
|
|
||||||
.borderless, table.borderless td, table.borderless th {
|
|
||||||
border: 0 }
|
|
||||||
|
|
||||||
table.borderless td, table.borderless th {
|
|
||||||
/* Override padding for "table.docutils td" with "! important".
|
|
||||||
The right padding separates the table cells. */
|
|
||||||
padding: 0 0.5em 0 0 ! important }
|
|
||||||
|
|
||||||
.first {
|
|
||||||
/* Override more specific margin styles with "! important". */
|
|
||||||
margin-top: 0 ! important }
|
|
||||||
|
|
||||||
.last, .with-subtitle {
|
|
||||||
margin-bottom: 0 ! important }
|
|
||||||
|
|
||||||
.hidden {
|
|
||||||
display: none }
|
|
||||||
|
|
||||||
a.toc-backref {
|
|
||||||
text-decoration: none ;
|
|
||||||
color: black }
|
|
||||||
|
|
||||||
blockquote.epigraph {
|
|
||||||
margin: 2em 5em ; }
|
|
||||||
|
|
||||||
dl.docutils dd {
|
|
||||||
margin-bottom: 0.5em }
|
|
||||||
|
|
||||||
/* Uncomment (and remove this text!) to get bold-faced definition list terms
|
|
||||||
dl.docutils dt {
|
|
||||||
font-weight: bold }
|
|
||||||
*/
|
|
||||||
|
|
||||||
div.abstract {
|
|
||||||
margin: 2em 5em }
|
|
||||||
|
|
||||||
div.abstract p.topic-title {
|
|
||||||
font-weight: bold ;
|
|
||||||
text-align: center }
|
|
||||||
|
|
||||||
div.admonition, div.attention, div.caution, div.danger, div.error,
|
|
||||||
div.hint, div.important, div.note, div.tip, div.warning {
|
|
||||||
margin: 2em ;
|
|
||||||
border: medium outset ;
|
|
||||||
padding: 1em }
|
|
||||||
|
|
||||||
div.admonition p.admonition-title, div.hint p.admonition-title,
|
|
||||||
div.important p.admonition-title, div.note p.admonition-title,
|
|
||||||
div.tip p.admonition-title {
|
|
||||||
font-weight: bold ;
|
|
||||||
font-family: sans-serif }
|
|
||||||
|
|
||||||
div.attention p.admonition-title, div.caution p.admonition-title,
|
|
||||||
div.danger p.admonition-title, div.error p.admonition-title,
|
|
||||||
div.warning p.admonition-title {
|
|
||||||
color: red ;
|
|
||||||
font-weight: bold ;
|
|
||||||
font-family: sans-serif }
|
|
||||||
|
|
||||||
/* Uncomment (and remove this text!) to get reduced vertical space in
|
|
||||||
compound paragraphs.
|
|
||||||
div.compound .compound-first, div.compound .compound-middle {
|
|
||||||
margin-bottom: 0.5em }
|
|
||||||
|
|
||||||
div.compound .compound-last, div.compound .compound-middle {
|
|
||||||
margin-top: 0.5em }
|
|
||||||
*/
|
|
||||||
|
|
||||||
div.dedication {
|
|
||||||
margin: 2em 5em ;
|
|
||||||
text-align: center ;
|
|
||||||
font-style: italic }
|
|
||||||
|
|
||||||
div.dedication p.topic-title {
|
|
||||||
font-weight: bold ;
|
|
||||||
font-style: normal }
|
|
||||||
|
|
||||||
div.figure {
|
|
||||||
margin-left: 2em ;
|
|
||||||
margin-right: 2em }
|
|
||||||
|
|
||||||
div.footer, div.header {
|
|
||||||
clear: both;
|
|
||||||
font-size: smaller }
|
|
||||||
|
|
||||||
div.line-block {
|
|
||||||
display: block ;
|
|
||||||
margin-top: 1em ;
|
|
||||||
margin-bottom: 1em }
|
|
||||||
|
|
||||||
div.line-block div.line-block {
|
|
||||||
margin-top: 0 ;
|
|
||||||
margin-bottom: 0 ;
|
|
||||||
margin-left: 1.5em }
|
|
||||||
|
|
||||||
div.sidebar {
|
|
||||||
margin-left: 1em ;
|
|
||||||
border: medium outset ;
|
|
||||||
padding: 1em ;
|
|
||||||
background-color: #ffffee ;
|
|
||||||
width: 40% ;
|
|
||||||
float: right ;
|
|
||||||
clear: right }
|
|
||||||
|
|
||||||
div.sidebar p.rubric {
|
|
||||||
font-family: sans-serif ;
|
|
||||||
font-size: medium }
|
|
||||||
|
|
||||||
div.system-messages {
|
|
||||||
margin: 5em }
|
|
||||||
|
|
||||||
div.system-messages h1 {
|
|
||||||
color: red }
|
|
||||||
|
|
||||||
div.system-message {
|
|
||||||
border: medium outset ;
|
|
||||||
padding: 1em }
|
|
||||||
|
|
||||||
div.system-message p.system-message-title {
|
|
||||||
color: red ;
|
|
||||||
font-weight: bold }
|
|
||||||
|
|
||||||
div.topic {
|
|
||||||
margin: 2em }
|
|
||||||
|
|
||||||
h1.section-subtitle, h2.section-subtitle, h3.section-subtitle,
|
|
||||||
h4.section-subtitle, h5.section-subtitle, h6.section-subtitle {
|
|
||||||
margin-top: 0.4em }
|
|
||||||
|
|
||||||
h1.title {
|
|
||||||
text-align: center }
|
|
||||||
|
|
||||||
h2.subtitle {
|
|
||||||
text-align: center }
|
|
||||||
|
|
||||||
hr.docutils {
|
|
||||||
width: 75% }
|
|
||||||
|
|
||||||
img.align-left {
|
|
||||||
clear: left }
|
|
||||||
|
|
||||||
img.align-right {
|
|
||||||
clear: right }
|
|
||||||
|
|
||||||
ol.simple, ul.simple {
|
|
||||||
margin-bottom: 1em }
|
|
||||||
|
|
||||||
ol.arabic {
|
|
||||||
list-style: decimal }
|
|
||||||
|
|
||||||
ol.loweralpha {
|
|
||||||
list-style: lower-alpha }
|
|
||||||
|
|
||||||
ol.upperalpha {
|
|
||||||
list-style: upper-alpha }
|
|
||||||
|
|
||||||
ol.lowerroman {
|
|
||||||
list-style: lower-roman }
|
|
||||||
|
|
||||||
ol.upperroman {
|
|
||||||
list-style: upper-roman }
|
|
||||||
|
|
||||||
p.attribution {
|
|
||||||
text-align: right ;
|
|
||||||
margin-left: 50% }
|
|
||||||
|
|
||||||
p.caption {
|
|
||||||
font-style: italic }
|
|
||||||
|
|
||||||
p.credits {
|
|
||||||
font-style: italic ;
|
|
||||||
font-size: smaller }
|
|
||||||
|
|
||||||
p.label {
|
|
||||||
white-space: nowrap }
|
|
||||||
|
|
||||||
p.rubric {
|
|
||||||
font-weight: bold ;
|
|
||||||
font-size: larger ;
|
|
||||||
color: maroon ;
|
|
||||||
text-align: center }
|
|
||||||
|
|
||||||
p.sidebar-title {
|
|
||||||
font-family: sans-serif ;
|
|
||||||
font-weight: bold ;
|
|
||||||
font-size: larger }
|
|
||||||
|
|
||||||
p.sidebar-subtitle {
|
|
||||||
font-family: sans-serif ;
|
|
||||||
font-weight: bold }
|
|
||||||
|
|
||||||
p.topic-title {
|
|
||||||
font-weight: bold }
|
|
||||||
|
|
||||||
pre.address {
|
|
||||||
margin-bottom: 0 ;
|
|
||||||
margin-top: 0 ;
|
|
||||||
font-family: serif ;
|
|
||||||
font-size: 100% }
|
|
||||||
|
|
||||||
pre.literal-block, pre.doctest-block {
|
|
||||||
margin-left: 2em ;
|
|
||||||
margin-right: 2em ;
|
|
||||||
background-color: #eeeeee }
|
|
||||||
|
|
||||||
span.classifier {
|
|
||||||
font-family: sans-serif ;
|
|
||||||
font-style: oblique }
|
|
||||||
|
|
||||||
span.classifier-delimiter {
|
|
||||||
font-family: sans-serif ;
|
|
||||||
font-weight: bold }
|
|
||||||
|
|
||||||
span.interpreted {
|
|
||||||
font-family: sans-serif }
|
|
||||||
|
|
||||||
span.option {
|
|
||||||
white-space: nowrap }
|
|
||||||
|
|
||||||
span.pre {
|
|
||||||
white-space: pre }
|
|
||||||
|
|
||||||
span.problematic {
|
|
||||||
color: red }
|
|
||||||
|
|
||||||
span.section-subtitle {
|
|
||||||
/* font-size relative to parent (h1..h6 element) */
|
|
||||||
font-size: 80% }
|
|
||||||
|
|
||||||
table.citation {
|
|
||||||
border-left: solid 1px gray;
|
|
||||||
margin-left: 1px }
|
|
||||||
|
|
||||||
table.docinfo {
|
|
||||||
margin: 2em 4em }
|
|
||||||
|
|
||||||
table.docutils {
|
|
||||||
margin-top: 0.5em ;
|
|
||||||
margin-bottom: 0.5em }
|
|
||||||
|
|
||||||
table.footnote {
|
|
||||||
border-left: solid 1px black;
|
|
||||||
margin-left: 1px }
|
|
||||||
|
|
||||||
table.docutils td, table.docutils th,
|
|
||||||
table.docinfo td, table.docinfo th {
|
|
||||||
padding-left: 0.5em ;
|
|
||||||
padding-right: 0.5em ;
|
|
||||||
vertical-align: top }
|
|
||||||
|
|
||||||
table.docutils th.field-name, table.docinfo th.docinfo-name {
|
|
||||||
font-weight: bold ;
|
|
||||||
text-align: left ;
|
|
||||||
white-space: nowrap ;
|
|
||||||
padding-left: 0 }
|
|
||||||
|
|
||||||
h1 tt.docutils, h2 tt.docutils, h3 tt.docutils,
|
|
||||||
h4 tt.docutils, h5 tt.docutils, h6 tt.docutils {
|
|
||||||
font-size: 100% }
|
|
||||||
|
|
||||||
tt.docutils {
|
|
||||||
background-color: #eeeeee }
|
|
||||||
|
|
||||||
ul.auto-toc {
|
|
||||||
list-style-type: none }
|
|
||||||
|
|
||||||
</style>
|
|
||||||
</head>
|
</head>
|
||||||
<body>
|
<body>
|
||||||
<div class="document" id="indirect-iterator">
|
<div class="document" id="indirect-iterator">
|
||||||
@ -303,13 +21,13 @@ ul.auto-toc {
|
|||||||
<tr><th class="docinfo-name">Author:</th>
|
<tr><th class="docinfo-name">Author:</th>
|
||||||
<td>David Abrahams, Jeremy Siek, Thomas Witt</td></tr>
|
<td>David Abrahams, Jeremy Siek, Thomas Witt</td></tr>
|
||||||
<tr><th class="docinfo-name">Contact:</th>
|
<tr><th class="docinfo-name">Contact:</th>
|
||||||
<td><a class="first reference" href="mailto:dave@boost-consulting.com">dave@boost-consulting.com</a>, <a class="reference" href="mailto:jsiek@osl.iu.edu">jsiek@osl.iu.edu</a>, <a class="last reference" href="mailto:witt@ive.uni-hannover.de">witt@ive.uni-hannover.de</a></td></tr>
|
<td><a class="first reference external" href="mailto:dave@boost-consulting.com">dave@boost-consulting.com</a>, <a class="reference external" href="mailto:jsiek@osl.iu.edu">jsiek@osl.iu.edu</a>, <a class="last reference external" href="mailto:witt@ive.uni-hannover.de">witt@ive.uni-hannover.de</a></td></tr>
|
||||||
<tr><th class="docinfo-name">Organization:</th>
|
<tr><th class="docinfo-name">Organization:</th>
|
||||||
<td><a class="first reference" href="http://www.boost-consulting.com">Boost Consulting</a>, Indiana University <a class="reference" href="http://www.osl.iu.edu">Open Systems
|
<td><a class="first reference external" href="http://www.boost-consulting.com">Boost Consulting</a>, Indiana University <a class="reference external" href="http://www.osl.iu.edu">Open Systems
|
||||||
Lab</a>, University of Hanover <a class="last reference" href="http://www.ive.uni-hannover.de">Institute for Transport
|
Lab</a>, University of Hanover <a class="last reference external" href="http://www.ive.uni-hannover.de">Institute for Transport
|
||||||
Railway Operation and Construction</a></td></tr>
|
Railway Operation and Construction</a></td></tr>
|
||||||
<tr><th class="docinfo-name">Date:</th>
|
<tr><th class="docinfo-name">Date:</th>
|
||||||
<td>2004-11-01</td></tr>
|
<td>2006-09-11</td></tr>
|
||||||
<tr><th class="docinfo-name">Copyright:</th>
|
<tr><th class="docinfo-name">Copyright:</th>
|
||||||
<td>Copyright David Abrahams, Jeremy Siek, and Thomas Witt 2003.</td></tr>
|
<td>Copyright David Abrahams, Jeremy Siek, and Thomas Witt 2003.</td></tr>
|
||||||
</tbody>
|
</tbody>
|
||||||
@ -335,18 +53,18 @@ not an iterator.</td>
|
|||||||
</tr>
|
</tr>
|
||||||
</tbody>
|
</tbody>
|
||||||
</table>
|
</table>
|
||||||
<div class="contents topic">
|
<div class="contents topic" id="table-of-contents">
|
||||||
<p class="topic-title first"><a id="table-of-contents" name="table-of-contents">Table of Contents</a></p>
|
<p class="topic-title first">Table of Contents</p>
|
||||||
<ul class="simple">
|
<ul class="simple">
|
||||||
<li><a class="reference" href="#indirect-iterator-synopsis" id="id2" name="id2"><tt class="docutils literal"><span class="pre">indirect_iterator</span></tt> synopsis</a></li>
|
<li><a class="reference internal" href="#indirect-iterator-synopsis" id="id2"><tt class="docutils literal"><span class="pre">indirect_iterator</span></tt> synopsis</a></li>
|
||||||
<li><a class="reference" href="#indirect-iterator-requirements" id="id3" name="id3"><tt class="docutils literal"><span class="pre">indirect_iterator</span></tt> requirements</a></li>
|
<li><a class="reference internal" href="#indirect-iterator-requirements" id="id3"><tt class="docutils literal"><span class="pre">indirect_iterator</span></tt> requirements</a></li>
|
||||||
<li><a class="reference" href="#indirect-iterator-models" id="id4" name="id4"><tt class="docutils literal"><span class="pre">indirect_iterator</span></tt> models</a></li>
|
<li><a class="reference internal" href="#indirect-iterator-models" id="id4"><tt class="docutils literal"><span class="pre">indirect_iterator</span></tt> models</a></li>
|
||||||
<li><a class="reference" href="#indirect-iterator-operations" id="id5" name="id5"><tt class="docutils literal"><span class="pre">indirect_iterator</span></tt> operations</a></li>
|
<li><a class="reference internal" href="#indirect-iterator-operations" id="id5"><tt class="docutils literal"><span class="pre">indirect_iterator</span></tt> operations</a></li>
|
||||||
<li><a class="reference" href="#example" id="id6" name="id6">Example</a></li>
|
<li><a class="reference internal" href="#example" id="id6">Example</a></li>
|
||||||
</ul>
|
</ul>
|
||||||
</div>
|
</div>
|
||||||
<div class="section">
|
<div class="section" id="indirect-iterator-synopsis">
|
||||||
<h1><a class="toc-backref" href="#id2" id="indirect-iterator-synopsis" name="indirect-iterator-synopsis"><tt class="docutils literal"><span class="pre">indirect_iterator</span></tt> synopsis</a></h1>
|
<h1><a class="toc-backref" href="#id2"><tt class="docutils literal"><span class="pre">indirect_iterator</span></tt> synopsis</a></h1>
|
||||||
<!-- Copyright David Abrahams 2006. Distributed under the Boost -->
|
<!-- Copyright David Abrahams 2006. Distributed under the Boost -->
|
||||||
<!-- Software License, Version 1.0. (See accompanying -->
|
<!-- Software License, Version 1.0. (See accompanying -->
|
||||||
<!-- file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) -->
|
<!-- file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) -->
|
||||||
@ -426,8 +144,8 @@ else
|
|||||||
) iterator_category;
|
) iterator_category;
|
||||||
</pre>
|
</pre>
|
||||||
</div>
|
</div>
|
||||||
<div class="section">
|
<div class="section" id="indirect-iterator-requirements">
|
||||||
<h1><a class="toc-backref" href="#id3" id="indirect-iterator-requirements" name="indirect-iterator-requirements"><tt class="docutils literal"><span class="pre">indirect_iterator</span></tt> requirements</a></h1>
|
<h1><a class="toc-backref" href="#id3"><tt class="docutils literal"><span class="pre">indirect_iterator</span></tt> requirements</a></h1>
|
||||||
<p>The expression <tt class="docutils literal"><span class="pre">*v</span></tt>, where <tt class="docutils literal"><span class="pre">v</span></tt> is an object of
|
<p>The expression <tt class="docutils literal"><span class="pre">*v</span></tt>, where <tt class="docutils literal"><span class="pre">v</span></tt> is an object of
|
||||||
<tt class="docutils literal"><span class="pre">iterator_traits<Iterator>::value_type</span></tt>, shall be valid
|
<tt class="docutils literal"><span class="pre">iterator_traits<Iterator>::value_type</span></tt>, shall be valid
|
||||||
expression and convertible to <tt class="docutils literal"><span class="pre">reference</span></tt>. <tt class="docutils literal"><span class="pre">Iterator</span></tt> shall
|
expression and convertible to <tt class="docutils literal"><span class="pre">reference</span></tt>. <tt class="docutils literal"><span class="pre">Iterator</span></tt> shall
|
||||||
@ -440,8 +158,8 @@ the requirements indicated by <tt class="docutils literal"><span class="pre">ite
|
|||||||
parameter is not <tt class="docutils literal"><span class="pre">use_default</span></tt>, as implied by the algorithm for
|
parameter is not <tt class="docutils literal"><span class="pre">use_default</span></tt>, as implied by the algorithm for
|
||||||
deducing the default for the <tt class="docutils literal"><span class="pre">value_type</span></tt> member.]</p>
|
deducing the default for the <tt class="docutils literal"><span class="pre">value_type</span></tt> member.]</p>
|
||||||
</div>
|
</div>
|
||||||
<div class="section">
|
<div class="section" id="indirect-iterator-models">
|
||||||
<h1><a class="toc-backref" href="#id4" id="indirect-iterator-models" name="indirect-iterator-models"><tt class="docutils literal"><span class="pre">indirect_iterator</span></tt> models</a></h1>
|
<h1><a class="toc-backref" href="#id4"><tt class="docutils literal"><span class="pre">indirect_iterator</span></tt> models</a></h1>
|
||||||
<p>In addition to the concepts indicated by <tt class="docutils literal"><span class="pre">iterator_category</span></tt>
|
<p>In addition to the concepts indicated by <tt class="docutils literal"><span class="pre">iterator_category</span></tt>
|
||||||
and by <tt class="docutils literal"><span class="pre">iterator_traversal<indirect_iterator>::type</span></tt>, a
|
and by <tt class="docutils literal"><span class="pre">iterator_traversal<indirect_iterator>::type</span></tt>, a
|
||||||
specialization of <tt class="docutils literal"><span class="pre">indirect_iterator</span></tt> models the following
|
specialization of <tt class="docutils literal"><span class="pre">indirect_iterator</span></tt> models the following
|
||||||
@ -461,8 +179,8 @@ expression (where <tt class="docutils literal"><span class="pre">t</span></tt> i
|
|||||||
<tt class="docutils literal"><span class="pre">indirect_iterator<Y,V2,C2,R2,D2></span></tt> if and only if <tt class="docutils literal"><span class="pre">X</span></tt> is
|
<tt class="docutils literal"><span class="pre">indirect_iterator<Y,V2,C2,R2,D2></span></tt> if and only if <tt class="docutils literal"><span class="pre">X</span></tt> is
|
||||||
interoperable with <tt class="docutils literal"><span class="pre">Y</span></tt>.</p>
|
interoperable with <tt class="docutils literal"><span class="pre">Y</span></tt>.</p>
|
||||||
</div>
|
</div>
|
||||||
<div class="section">
|
<div class="section" id="indirect-iterator-operations">
|
||||||
<h1><a class="toc-backref" href="#id5" id="indirect-iterator-operations" name="indirect-iterator-operations"><tt class="docutils literal"><span class="pre">indirect_iterator</span></tt> operations</a></h1>
|
<h1><a class="toc-backref" href="#id5"><tt class="docutils literal"><span class="pre">indirect_iterator</span></tt> operations</a></h1>
|
||||||
<p>In addition to the operations required by the concepts described
|
<p>In addition to the operations required by the concepts described
|
||||||
above, specializations of <tt class="docutils literal"><span class="pre">indirect_iterator</span></tt> provide the
|
above, specializations of <tt class="docutils literal"><span class="pre">indirect_iterator</span></tt> provide the
|
||||||
following operations.</p>
|
following operations.</p>
|
||||||
@ -555,8 +273,8 @@ indirect_iterator(
|
|||||||
<!-- Software License, Version 1.0. (See accompanying -->
|
<!-- Software License, Version 1.0. (See accompanying -->
|
||||||
<!-- file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) -->
|
<!-- file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) -->
|
||||||
</div>
|
</div>
|
||||||
<div class="section">
|
<div class="section" id="example">
|
||||||
<h1><a class="toc-backref" href="#id6" id="example" name="example">Example</a></h1>
|
<h1><a class="toc-backref" href="#id6">Example</a></h1>
|
||||||
<p>This example prints an array of characters, using
|
<p>This example prints an array of characters, using
|
||||||
<tt class="docutils literal"><span class="pre">indirect_iterator</span></tt> to access the array of characters through an
|
<tt class="docutils literal"><span class="pre">indirect_iterator</span></tt> to access the array of characters through an
|
||||||
array of pointers. Next <tt class="docutils literal"><span class="pre">indirect_iterator</span></tt> is used with the
|
array of pointers. Next <tt class="docutils literal"><span class="pre">indirect_iterator</span></tt> is used with the
|
||||||
@ -614,8 +332,14 @@ a,b,c,d,e,f,g,
|
|||||||
b,c,d,e,f,g,h,
|
b,c,d,e,f,g,h,
|
||||||
a,b,c,d,e,f,g,
|
a,b,c,d,e,f,g,
|
||||||
</pre>
|
</pre>
|
||||||
<p>The source code for this example can be found <a class="reference" href="../example/indirect_iterator_example.cpp">here</a>.</p>
|
<p>The source code for this example can be found <a class="reference external" href="../example/indirect_iterator_example.cpp">here</a>.</p>
|
||||||
</div>
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="footer">
|
||||||
|
<hr class="footer" />
|
||||||
|
<a class="reference external" href="indirect_iterator.rst">View document source</a>.
|
||||||
|
Generated by <a class="reference external" href="http://docutils.sourceforge.net/">Docutils</a> from <a class="reference external" href="http://docutils.sourceforge.net/rst.html">reStructuredText</a> source.
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
</body>
|
</body>
|
||||||
</html>
|
</html>
|
||||||
|
0
doc/indirect_iterator.pdf
Executable file → Normal file
0
doc/indirect_iterator.pdf
Executable file → Normal file
0
doc/indirect_reference_ref.rst
Executable file → Normal file
0
doc/indirect_reference_ref.rst
Executable file → Normal file
283
doc/interoperability-revisited.rst
Executable file → Normal file
283
doc/interoperability-revisited.rst
Executable file → Normal file
@ -18,86 +18,87 @@ implement interoperable iterators.
|
|||||||
In the following text a simplified example of the current iterator_facade specification is used to
|
In the following text a simplified example of the current iterator_facade specification is used to
|
||||||
illustrate the problem.
|
illustrate the problem.
|
||||||
|
|
||||||
In the current specification binary operators are implemented in the following way:
|
In the current specification binary operators are implemented in the following way::
|
||||||
|
|
||||||
template <class Derived>
|
template <class Derived>
|
||||||
struct Facade
|
struct Facade
|
||||||
{
|
{
|
||||||
};
|
};
|
||||||
|
|
||||||
template <class T1, T2>
|
template <class T1, T2>
|
||||||
struct is_interoperable :
|
struct is_interoperable :
|
||||||
or_<
|
or_<
|
||||||
is_convertible<T1, T2>
|
is_convertible<T1, T2>
|
||||||
, is_convertible<T2, T1>
|
, is_convertible<T2, T1>
|
||||||
>
|
>
|
||||||
{};
|
{};
|
||||||
|
|
||||||
template<
|
template<
|
||||||
class Derived1
|
class Derived1
|
||||||
, class Derived2
|
, class Derived2
|
||||||
>
|
>
|
||||||
enable_if<is_interoperable<Derived1, Derived2>, bool> operator==(
|
enable_if<is_interoperable<Derived1, Derived2>, bool> operator==(
|
||||||
Derived1 const& lhs
|
Derived1 const& lhs
|
||||||
, Derived2 const& rhs
|
, Derived2 const& rhs
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
return static_cast<Derived1 const&>(lhs).equal_to(static_cast<Derived2 const&(rhs));
|
return static_cast<Derived1 const&>(lhs).equal_to(static_cast<Derived2 const&(rhs));
|
||||||
}
|
}
|
||||||
|
|
||||||
The problem with this is that operator== always forwards to Derived1::equal_to. The net effect is that the
|
The problem with this is that operator== always forwards to Derived1::equal_to. The net effect is that the
|
||||||
following "obvious" implementation of to interoperable types does not quite work.
|
following "obvious" implementation of to interoperable types does
|
||||||
|
not quite work. ::
|
||||||
|
|
||||||
struct Mutable : Facade<Mutable>
|
struct Mutable : Facade<Mutable>
|
||||||
{
|
{
|
||||||
bool equal_to(Mutable const&);
|
bool equal_to(Mutable const&);
|
||||||
};
|
};
|
||||||
|
|
||||||
struct Constant : Facade<Constant>
|
struct Constant : Facade<Constant>
|
||||||
{
|
{
|
||||||
Constant();
|
Constant();
|
||||||
Constant(Constant const&);
|
Constant(Constant const&);
|
||||||
Constant(Mutable const&);
|
Constant(Mutable const&);
|
||||||
|
|
||||||
...
|
|
||||||
|
|
||||||
bool equal_to(Constant const&);
|
...
|
||||||
};
|
|
||||||
|
|
||||||
Constant c;
|
bool equal_to(Constant const&);
|
||||||
Mutable m;
|
};
|
||||||
|
|
||||||
c == m; // ok, dispatched to Constant::equal_to
|
Constant c;
|
||||||
m == c; // !! error, dispatched to Mutable::equal_to
|
Mutable m;
|
||||||
|
|
||||||
Instead the following "slightly" more complicated implementation is necessary
|
c == m; // ok, dispatched to Constant::equal_to
|
||||||
|
m == c; // !! error, dispatched to Mutable::equal_to
|
||||||
|
|
||||||
struct Mutable : Facade<Mutable>
|
Instead the following "slightly" more complicated implementation is necessary
|
||||||
{
|
|
||||||
template <class T>
|
|
||||||
enable_if<is_convertible<Mutable, T> || is_convertible<T, Mutable>, bool>::type equal_to(T const&);
|
|
||||||
};
|
|
||||||
|
|
||||||
struct Constant : Tag<Constant>
|
struct Mutable : Facade<Mutable>
|
||||||
{
|
{
|
||||||
Constant();
|
template <class T>
|
||||||
Constant(Constant const&);
|
enable_if<is_convertible<Mutable, T> || is_convertible<T, Mutable>, bool>::type equal_to(T const&);
|
||||||
Constant(Mutable const&);
|
};
|
||||||
|
|
||||||
template <class T>
|
struct Constant : Tag<Constant>
|
||||||
enable_if<is_convertible<Constant, T> || is_convertible<T, Constant>, bool>::type equal_to(T const&);
|
{
|
||||||
};
|
Constant();
|
||||||
|
Constant(Constant const&);
|
||||||
|
Constant(Mutable const&);
|
||||||
|
|
||||||
|
template <class T>
|
||||||
|
enable_if<is_convertible<Constant, T> || is_convertible<T, Constant>, bool>::type equal_to(T const&);
|
||||||
|
};
|
||||||
|
|
||||||
Beside the fact that the code is significantly more complex to understand and to teach there is
|
Beside the fact that the code is significantly more complex to understand and to teach there is
|
||||||
a major design problem lurking here. Note that in both types equal_to is a function template with
|
a major design problem lurking here. Note that in both types equal_to is a function template with
|
||||||
an unconstrained argument T. This is necessary so that further types can be made interoperable with
|
an unconstrained argument T. This is necessary so that further types can be made interoperable with
|
||||||
Mutable or Constant. Would Mutable be defined as
|
Mutable or Constant. Would Mutable be defined as ::
|
||||||
|
|
||||||
struct Mutable : Facade<Mutable>
|
struct Mutable : Facade<Mutable>
|
||||||
{
|
{
|
||||||
bool equal_to(Mutable const&);
|
bool equal_to(Mutable const&);
|
||||||
bool equal_to(Constant const&);
|
bool equal_to(Constant const&);
|
||||||
};
|
};
|
||||||
|
|
||||||
Constant and Mutable would still be interoperable but no further interoperable could be added
|
Constant and Mutable would still be interoperable but no further interoperable could be added
|
||||||
without changing Mutable. Even if this would be considered acceptable the current specification forces
|
without changing Mutable. Even if this would be considered acceptable the current specification forces
|
||||||
@ -111,44 +112,45 @@ The two way dependency can be avoided by enabling type conversion in the binary
|
|||||||
implementation. Note that this is the usual way interoperability betwween types is achieved
|
implementation. Note that this is the usual way interoperability betwween types is achieved
|
||||||
for binary operators and one reason why binary operators are usually implemented as non-members.
|
for binary operators and one reason why binary operators are usually implemented as non-members.
|
||||||
|
|
||||||
A simple implementation of this strategy would look like this
|
A simple implementation of this strategy would look like this ::
|
||||||
|
|
||||||
template<
|
template<
|
||||||
class T1
|
class T1
|
||||||
, class T2
|
, class T2
|
||||||
>
|
>
|
||||||
struct interoperable_base :
|
struct interoperable_base :
|
||||||
if_<
|
if_<
|
||||||
is_convertible<
|
is_convertible<
|
||||||
T2
|
T2
|
||||||
, T1
|
, T1
|
||||||
>
|
>
|
||||||
, T1
|
, T1
|
||||||
, T2>
|
, T2>
|
||||||
{};
|
{};
|
||||||
|
|
||||||
|
|
||||||
template<
|
template<
|
||||||
class Derived1
|
class Derived1
|
||||||
, class Derived2
|
, class Derived2
|
||||||
>
|
>
|
||||||
enable_if<is_interoperable<Derived1, Derived2>, bool> operator==(
|
enable_if<is_interoperable<Derived1, Derived2>, bool> operator==(
|
||||||
Derived1 const& lhs
|
Derived1 const& lhs
|
||||||
, Derived2 const& rhs
|
, Derived2 const& rhs
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
typedef interoperable_base<
|
typedef interoperable_base<
|
||||||
Derived1
|
Derived1
|
||||||
, Derived2
|
, Derived2
|
||||||
>::type Base;
|
>::type Base;
|
||||||
|
|
||||||
return static_cast<Base const&>(lhs).equal_to(static_cast<Derived2 const&(rhs));
|
return static_cast<Base const&>(lhs).equal_to(static_cast<Derived2 const&(rhs));
|
||||||
}
|
}
|
||||||
|
|
||||||
This way our original simple and "obvious" implementation would work again.
|
This way our original simple and "obvious" implementation would
|
||||||
|
work again. ::
|
||||||
|
|
||||||
c == m; // ok, dispatched to Constant::equal_to
|
c == m; // ok, dispatched to Constant::equal_to
|
||||||
m == c; // ok, dispatched to Constant::equal_to, m converted to Constant
|
m == c; // ok, dispatched to Constant::equal_to, m converted to Constant
|
||||||
|
|
||||||
The backdraw of this approach is that a possibly costly conversion of iterator objects
|
The backdraw of this approach is that a possibly costly conversion of iterator objects
|
||||||
is forced on the user even in cases where direct comparison could be implemented
|
is forced on the user even in cases where direct comparison could be implemented
|
||||||
@ -158,70 +160,71 @@ that iteration is a very basic operation this possible performance degradation i
|
|||||||
acceptable.
|
acceptable.
|
||||||
|
|
||||||
Luckily whe can have our cake and eat it by a slightly more clever implementation of the binary
|
Luckily whe can have our cake and eat it by a slightly more clever implementation of the binary
|
||||||
operators.
|
operators. ::
|
||||||
|
|
||||||
template<
|
template<
|
||||||
class Derived1
|
class Derived1
|
||||||
, class Derived2
|
, class Derived2
|
||||||
>
|
>
|
||||||
enable_if<is_convertible<Derived2, Derived1>, bool> operator==(
|
enable_if<is_convertible<Derived2, Derived1>, bool> operator==(
|
||||||
Derived1 const& lhs
|
Derived1 const& lhs
|
||||||
, Derived2 const& rhs
|
, Derived2 const& rhs
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
return static_cast<Derived1 const&>(lhs).equal_to(static_cast<Derived2 const&(rhs));
|
return static_cast<Derived1 const&>(lhs).equal_to(static_cast<Derived2 const&(rhs));
|
||||||
}
|
}
|
||||||
|
|
||||||
template<
|
template<
|
||||||
class Derived1
|
class Derived1
|
||||||
, class Derived2
|
, class Derived2
|
||||||
>
|
>
|
||||||
enable_if<is_convertible<Derived1, Derived2>, bool> operator==(
|
enable_if<is_convertible<Derived1, Derived2>, bool> operator==(
|
||||||
Derived1 const& lhs
|
Derived1 const& lhs
|
||||||
, Derived2 const& rhs
|
, Derived2 const& rhs
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
return static_cast<Derived2 const&>(rhs).equal_to(static_cast<Derived1 const&(lhs));
|
return static_cast<Derived2 const&>(rhs).equal_to(static_cast<Derived1 const&(lhs));
|
||||||
}
|
}
|
||||||
|
|
||||||
Given our simple and obvious definition of Mutable and Constant nothing has changed yet.
|
Given our simple and obvious definition of Mutable and Constant nothing has changed yet. ::
|
||||||
|
|
||||||
c == m; // ok, dispatched to Constant::equal_to, m converted to Constant
|
c == m; // ok, dispatched to Constant::equal_to, m converted to Constant
|
||||||
m == c; // ok, dispatched to Constant::equal_to, m converted to Constant
|
m == c; // ok, dispatched to Constant::equal_to, m converted to Constant
|
||||||
|
|
||||||
But now the user can avoid the type conversion by supplying the appropriate overload in Constant
|
But now the user can avoid the type conversion by supplying the
|
||||||
|
appropriate overload in Constant ::
|
||||||
|
|
||||||
struct Constant : Facade<Constant>
|
struct Constant : Facade<Constant>
|
||||||
{
|
{
|
||||||
Constant();
|
Constant();
|
||||||
Constant(Constant const&);
|
Constant(Constant const&);
|
||||||
Constant(Mutable const&);
|
Constant(Mutable const&);
|
||||||
|
|
||||||
...
|
|
||||||
|
|
||||||
bool equal_to(Constant const&);
|
...
|
||||||
bool equal_to(Mutable const&);
|
|
||||||
};
|
|
||||||
|
|
||||||
c == m; // ok, dispatched to Constant::equal_to(Mutable const&), no conversion
|
bool equal_to(Constant const&);
|
||||||
m == c; // ok, dispatched to Constant::equal_to(Mutable const&), no conversion
|
bool equal_to(Mutable const&);
|
||||||
|
};
|
||||||
|
|
||||||
|
c == m; // ok, dispatched to Constant::equal_to(Mutable const&), no conversion
|
||||||
|
m == c; // ok, dispatched to Constant::equal_to(Mutable const&), no conversion
|
||||||
|
|
||||||
This definition of operator== introduces a possible ambiguity when both types are convertible
|
This definition of operator== introduces a possible ambiguity when both types are convertible
|
||||||
to each other. I don't think this is a problem as this behaviour is the same with concrete types.
|
to each other. I don't think this is a problem as this behaviour is the same with concrete types.
|
||||||
I.e.
|
I.e. ::
|
||||||
|
|
||||||
struct A {};
|
struct A {};
|
||||||
|
|
||||||
bool operator==(A, A);
|
bool operator==(A, A);
|
||||||
|
|
||||||
struct B { B(A); };
|
struct B { B(A); };
|
||||||
|
|
||||||
bool operator==(B, B);
|
bool operator==(B, B);
|
||||||
|
|
||||||
A a;
|
A a;
|
||||||
B b(a);
|
B b(a);
|
||||||
|
|
||||||
a == b; // error, ambiguous overload
|
a == b; // error, ambiguous overload
|
||||||
|
|
||||||
Effect
|
Effect
|
||||||
======
|
======
|
||||||
|
451
doc/issues.html
451
doc/issues.html
@ -1,451 +0,0 @@
|
|||||||
<?xml version="1.0" encoding="utf-8" ?>
|
|
||||||
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
|
||||||
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
|
|
||||||
<head>
|
|
||||||
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
|
|
||||||
<meta name="generator" content="Docutils 0.4: http://docutils.sourceforge.net/" />
|
|
||||||
<title>Problem with is_writable and is_swappable in N1550</title>
|
|
||||||
<meta name="author" content="David Abrahams and Jeremy Siek" />
|
|
||||||
<meta name="organization" content="Boost Consulting, Indiana University Bloomington" />
|
|
||||||
<meta name="date" content="2003-11-19" />
|
|
||||||
<meta name="copyright" content="Copyright David Abrahams, Jeremy Siek 2003. Use, modification and distribution is subject to 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)" />
|
|
||||||
<style type="text/css">
|
|
||||||
|
|
||||||
/*
|
|
||||||
:Author: David Goodger
|
|
||||||
:Contact: goodger@users.sourceforge.net
|
|
||||||
:Date: $Date$
|
|
||||||
:Revision: $Revision$
|
|
||||||
:Copyright: This stylesheet has been placed in the public domain.
|
|
||||||
|
|
||||||
Default cascading style sheet for the HTML output of Docutils.
|
|
||||||
|
|
||||||
See http://docutils.sf.net/docs/howto/html-stylesheets.html for how to
|
|
||||||
customize this style sheet.
|
|
||||||
*/
|
|
||||||
|
|
||||||
/* used to remove borders from tables and images */
|
|
||||||
.borderless, table.borderless td, table.borderless th {
|
|
||||||
border: 0 }
|
|
||||||
|
|
||||||
table.borderless td, table.borderless th {
|
|
||||||
/* Override padding for "table.docutils td" with "! important".
|
|
||||||
The right padding separates the table cells. */
|
|
||||||
padding: 0 0.5em 0 0 ! important }
|
|
||||||
|
|
||||||
.first {
|
|
||||||
/* Override more specific margin styles with "! important". */
|
|
||||||
margin-top: 0 ! important }
|
|
||||||
|
|
||||||
.last, .with-subtitle {
|
|
||||||
margin-bottom: 0 ! important }
|
|
||||||
|
|
||||||
.hidden {
|
|
||||||
display: none }
|
|
||||||
|
|
||||||
a.toc-backref {
|
|
||||||
text-decoration: none ;
|
|
||||||
color: black }
|
|
||||||
|
|
||||||
blockquote.epigraph {
|
|
||||||
margin: 2em 5em ; }
|
|
||||||
|
|
||||||
dl.docutils dd {
|
|
||||||
margin-bottom: 0.5em }
|
|
||||||
|
|
||||||
/* Uncomment (and remove this text!) to get bold-faced definition list terms
|
|
||||||
dl.docutils dt {
|
|
||||||
font-weight: bold }
|
|
||||||
*/
|
|
||||||
|
|
||||||
div.abstract {
|
|
||||||
margin: 2em 5em }
|
|
||||||
|
|
||||||
div.abstract p.topic-title {
|
|
||||||
font-weight: bold ;
|
|
||||||
text-align: center }
|
|
||||||
|
|
||||||
div.admonition, div.attention, div.caution, div.danger, div.error,
|
|
||||||
div.hint, div.important, div.note, div.tip, div.warning {
|
|
||||||
margin: 2em ;
|
|
||||||
border: medium outset ;
|
|
||||||
padding: 1em }
|
|
||||||
|
|
||||||
div.admonition p.admonition-title, div.hint p.admonition-title,
|
|
||||||
div.important p.admonition-title, div.note p.admonition-title,
|
|
||||||
div.tip p.admonition-title {
|
|
||||||
font-weight: bold ;
|
|
||||||
font-family: sans-serif }
|
|
||||||
|
|
||||||
div.attention p.admonition-title, div.caution p.admonition-title,
|
|
||||||
div.danger p.admonition-title, div.error p.admonition-title,
|
|
||||||
div.warning p.admonition-title {
|
|
||||||
color: red ;
|
|
||||||
font-weight: bold ;
|
|
||||||
font-family: sans-serif }
|
|
||||||
|
|
||||||
/* Uncomment (and remove this text!) to get reduced vertical space in
|
|
||||||
compound paragraphs.
|
|
||||||
div.compound .compound-first, div.compound .compound-middle {
|
|
||||||
margin-bottom: 0.5em }
|
|
||||||
|
|
||||||
div.compound .compound-last, div.compound .compound-middle {
|
|
||||||
margin-top: 0.5em }
|
|
||||||
*/
|
|
||||||
|
|
||||||
div.dedication {
|
|
||||||
margin: 2em 5em ;
|
|
||||||
text-align: center ;
|
|
||||||
font-style: italic }
|
|
||||||
|
|
||||||
div.dedication p.topic-title {
|
|
||||||
font-weight: bold ;
|
|
||||||
font-style: normal }
|
|
||||||
|
|
||||||
div.figure {
|
|
||||||
margin-left: 2em ;
|
|
||||||
margin-right: 2em }
|
|
||||||
|
|
||||||
div.footer, div.header {
|
|
||||||
clear: both;
|
|
||||||
font-size: smaller }
|
|
||||||
|
|
||||||
div.line-block {
|
|
||||||
display: block ;
|
|
||||||
margin-top: 1em ;
|
|
||||||
margin-bottom: 1em }
|
|
||||||
|
|
||||||
div.line-block div.line-block {
|
|
||||||
margin-top: 0 ;
|
|
||||||
margin-bottom: 0 ;
|
|
||||||
margin-left: 1.5em }
|
|
||||||
|
|
||||||
div.sidebar {
|
|
||||||
margin-left: 1em ;
|
|
||||||
border: medium outset ;
|
|
||||||
padding: 1em ;
|
|
||||||
background-color: #ffffee ;
|
|
||||||
width: 40% ;
|
|
||||||
float: right ;
|
|
||||||
clear: right }
|
|
||||||
|
|
||||||
div.sidebar p.rubric {
|
|
||||||
font-family: sans-serif ;
|
|
||||||
font-size: medium }
|
|
||||||
|
|
||||||
div.system-messages {
|
|
||||||
margin: 5em }
|
|
||||||
|
|
||||||
div.system-messages h1 {
|
|
||||||
color: red }
|
|
||||||
|
|
||||||
div.system-message {
|
|
||||||
border: medium outset ;
|
|
||||||
padding: 1em }
|
|
||||||
|
|
||||||
div.system-message p.system-message-title {
|
|
||||||
color: red ;
|
|
||||||
font-weight: bold }
|
|
||||||
|
|
||||||
div.topic {
|
|
||||||
margin: 2em }
|
|
||||||
|
|
||||||
h1.section-subtitle, h2.section-subtitle, h3.section-subtitle,
|
|
||||||
h4.section-subtitle, h5.section-subtitle, h6.section-subtitle {
|
|
||||||
margin-top: 0.4em }
|
|
||||||
|
|
||||||
h1.title {
|
|
||||||
text-align: center }
|
|
||||||
|
|
||||||
h2.subtitle {
|
|
||||||
text-align: center }
|
|
||||||
|
|
||||||
hr.docutils {
|
|
||||||
width: 75% }
|
|
||||||
|
|
||||||
img.align-left {
|
|
||||||
clear: left }
|
|
||||||
|
|
||||||
img.align-right {
|
|
||||||
clear: right }
|
|
||||||
|
|
||||||
ol.simple, ul.simple {
|
|
||||||
margin-bottom: 1em }
|
|
||||||
|
|
||||||
ol.arabic {
|
|
||||||
list-style: decimal }
|
|
||||||
|
|
||||||
ol.loweralpha {
|
|
||||||
list-style: lower-alpha }
|
|
||||||
|
|
||||||
ol.upperalpha {
|
|
||||||
list-style: upper-alpha }
|
|
||||||
|
|
||||||
ol.lowerroman {
|
|
||||||
list-style: lower-roman }
|
|
||||||
|
|
||||||
ol.upperroman {
|
|
||||||
list-style: upper-roman }
|
|
||||||
|
|
||||||
p.attribution {
|
|
||||||
text-align: right ;
|
|
||||||
margin-left: 50% }
|
|
||||||
|
|
||||||
p.caption {
|
|
||||||
font-style: italic }
|
|
||||||
|
|
||||||
p.credits {
|
|
||||||
font-style: italic ;
|
|
||||||
font-size: smaller }
|
|
||||||
|
|
||||||
p.label {
|
|
||||||
white-space: nowrap }
|
|
||||||
|
|
||||||
p.rubric {
|
|
||||||
font-weight: bold ;
|
|
||||||
font-size: larger ;
|
|
||||||
color: maroon ;
|
|
||||||
text-align: center }
|
|
||||||
|
|
||||||
p.sidebar-title {
|
|
||||||
font-family: sans-serif ;
|
|
||||||
font-weight: bold ;
|
|
||||||
font-size: larger }
|
|
||||||
|
|
||||||
p.sidebar-subtitle {
|
|
||||||
font-family: sans-serif ;
|
|
||||||
font-weight: bold }
|
|
||||||
|
|
||||||
p.topic-title {
|
|
||||||
font-weight: bold }
|
|
||||||
|
|
||||||
pre.address {
|
|
||||||
margin-bottom: 0 ;
|
|
||||||
margin-top: 0 ;
|
|
||||||
font-family: serif ;
|
|
||||||
font-size: 100% }
|
|
||||||
|
|
||||||
pre.literal-block, pre.doctest-block {
|
|
||||||
margin-left: 2em ;
|
|
||||||
margin-right: 2em ;
|
|
||||||
background-color: #eeeeee }
|
|
||||||
|
|
||||||
span.classifier {
|
|
||||||
font-family: sans-serif ;
|
|
||||||
font-style: oblique }
|
|
||||||
|
|
||||||
span.classifier-delimiter {
|
|
||||||
font-family: sans-serif ;
|
|
||||||
font-weight: bold }
|
|
||||||
|
|
||||||
span.interpreted {
|
|
||||||
font-family: sans-serif }
|
|
||||||
|
|
||||||
span.option {
|
|
||||||
white-space: nowrap }
|
|
||||||
|
|
||||||
span.pre {
|
|
||||||
white-space: pre }
|
|
||||||
|
|
||||||
span.problematic {
|
|
||||||
color: red }
|
|
||||||
|
|
||||||
span.section-subtitle {
|
|
||||||
/* font-size relative to parent (h1..h6 element) */
|
|
||||||
font-size: 80% }
|
|
||||||
|
|
||||||
table.citation {
|
|
||||||
border-left: solid 1px gray;
|
|
||||||
margin-left: 1px }
|
|
||||||
|
|
||||||
table.docinfo {
|
|
||||||
margin: 2em 4em }
|
|
||||||
|
|
||||||
table.docutils {
|
|
||||||
margin-top: 0.5em ;
|
|
||||||
margin-bottom: 0.5em }
|
|
||||||
|
|
||||||
table.footnote {
|
|
||||||
border-left: solid 1px black;
|
|
||||||
margin-left: 1px }
|
|
||||||
|
|
||||||
table.docutils td, table.docutils th,
|
|
||||||
table.docinfo td, table.docinfo th {
|
|
||||||
padding-left: 0.5em ;
|
|
||||||
padding-right: 0.5em ;
|
|
||||||
vertical-align: top }
|
|
||||||
|
|
||||||
table.docutils th.field-name, table.docinfo th.docinfo-name {
|
|
||||||
font-weight: bold ;
|
|
||||||
text-align: left ;
|
|
||||||
white-space: nowrap ;
|
|
||||||
padding-left: 0 }
|
|
||||||
|
|
||||||
h1 tt.docutils, h2 tt.docutils, h3 tt.docutils,
|
|
||||||
h4 tt.docutils, h5 tt.docutils, h6 tt.docutils {
|
|
||||||
font-size: 100% }
|
|
||||||
|
|
||||||
tt.docutils {
|
|
||||||
background-color: #eeeeee }
|
|
||||||
|
|
||||||
ul.auto-toc {
|
|
||||||
list-style-type: none }
|
|
||||||
|
|
||||||
</style>
|
|
||||||
</head>
|
|
||||||
<body>
|
|
||||||
<div class="document" id="problem-with-is-writable-and-is-swappable-in-n1550">
|
|
||||||
<h1 class="title">Problem with <tt class="docutils literal"><span class="pre">is_writable</span></tt> and <tt class="docutils literal"><span class="pre">is_swappable</span></tt> in <a class="reference" href="http://www.boost-consulting.com/writing/n1550.html">N1550</a></h1>
|
|
||||||
<table class="docinfo" frame="void" rules="none">
|
|
||||||
<col class="docinfo-name" />
|
|
||||||
<col class="docinfo-content" />
|
|
||||||
<tbody valign="top">
|
|
||||||
<tr><th class="docinfo-name">Author:</th>
|
|
||||||
<td>David Abrahams and Jeremy Siek</td></tr>
|
|
||||||
<tr><th class="docinfo-name">Contact:</th>
|
|
||||||
<td><a class="first reference" href="mailto:dave@boost-consulting.com">dave@boost-consulting.com</a>, <a class="last reference" href="mailto:jsiek@osl.iu.edu">jsiek@osl.iu.edu</a></td></tr>
|
|
||||||
<tr><th class="docinfo-name">Organization:</th>
|
|
||||||
<td><a class="first reference" href="http://www.boost-consulting.com">Boost Consulting</a>, Indiana University Bloomington</td></tr>
|
|
||||||
<tr><th class="docinfo-name">Date:</th>
|
|
||||||
<td>2003-11-19</td></tr>
|
|
||||||
<tr><th class="docinfo-name">Copyright:</th>
|
|
||||||
<td>Copyright David Abrahams, Jeremy Siek 2003. Use, modification and
|
|
||||||
distribution is subject to the Boost Software License,
|
|
||||||
Version 1.0. (See accompanying file LICENSE_1_0.txt or copy
|
|
||||||
at <a class="reference" href="http://www.boost.org/LICENSE_1_0.txt">http://www.boost.org/LICENSE_1_0.txt</a>)</td></tr>
|
|
||||||
</tbody>
|
|
||||||
</table>
|
|
||||||
<div class="contents topic">
|
|
||||||
<p class="topic-title first"><a id="table-of-contents" name="table-of-contents">Table of Contents</a></p>
|
|
||||||
<ul class="simple">
|
|
||||||
<li><a class="reference" href="#introduction" id="id1" name="id1">Introduction</a></li>
|
|
||||||
<li><a class="reference" href="#proposed-resolution" id="id2" name="id2">Proposed Resolution</a></li>
|
|
||||||
<li><a class="reference" href="#rationale" id="id3" name="id3">Rationale</a></li>
|
|
||||||
</ul>
|
|
||||||
</div>
|
|
||||||
<div class="section">
|
|
||||||
<h1><a class="toc-backref" href="#id1" id="introduction" name="introduction">Introduction</a></h1>
|
|
||||||
<p>The <tt class="docutils literal"><span class="pre">is_writable</span></tt> and <tt class="docutils literal"><span class="pre">is_swappable</span></tt> traits classes in <a class="reference" href="http://www.boost-consulting.com/writing/n1550.html">N1550</a>
|
|
||||||
provide a mechanism for determining at compile time if an iterator
|
|
||||||
type is a model of the new Writable Iterator and Swappable Iterator
|
|
||||||
concepts, analogous to <tt class="docutils literal"><span class="pre">iterator_traits<X>::iterator_category</span></tt>
|
|
||||||
for the old iterator concepts. For backward compatibility,
|
|
||||||
<tt class="docutils literal"><span class="pre">is_writable</span></tt> and <tt class="docutils literal"><span class="pre">is_swappable</span></tt> not only work with new
|
|
||||||
iterators, but they also are intended to work for old
|
|
||||||
iterators (iterators that meet the requirements for one of the
|
|
||||||
iterator concepts in the current standard). In the case of old
|
|
||||||
iterators, the writability and swapability is deduced based on the
|
|
||||||
<tt class="docutils literal"><span class="pre">iterator_category</span></tt> and also the <tt class="docutils literal"><span class="pre">reference</span></tt> type. The
|
|
||||||
specification for this deduction gives false positives for forward
|
|
||||||
iterators that have non-assignable value types.</p>
|
|
||||||
<p>To review, the part of the <tt class="docutils literal"><span class="pre">is_writable</span></tt> trait definition which
|
|
||||||
applies to old iterators is:</p>
|
|
||||||
<pre class="literal-block">
|
|
||||||
if (cat is convertible to output_iterator_tag)
|
|
||||||
return true;
|
|
||||||
else if (cat is convertible to forward_iterator_tag
|
|
||||||
and iterator_traits<Iterator>::reference is a
|
|
||||||
mutable reference)
|
|
||||||
return true;
|
|
||||||
else
|
|
||||||
return false;
|
|
||||||
</pre>
|
|
||||||
<p>Suppose the <tt class="docutils literal"><span class="pre">value_type</span></tt> of the iterator <tt class="docutils literal"><span class="pre">It</span></tt> has a private
|
|
||||||
assignment operator:</p>
|
|
||||||
<pre class="literal-block">
|
|
||||||
class B {
|
|
||||||
public:
|
|
||||||
...
|
|
||||||
private:
|
|
||||||
B& operator=(const B&);
|
|
||||||
};
|
|
||||||
</pre>
|
|
||||||
<p>and suppose the <tt class="docutils literal"><span class="pre">reference</span></tt> type of the iterator is <tt class="docutils literal"><span class="pre">B&</span></tt>. In
|
|
||||||
that case, <tt class="docutils literal"><span class="pre">is_writable<It>::value</span></tt> will be true when in fact
|
|
||||||
attempting to write into <tt class="docutils literal"><span class="pre">B</span></tt> will cause an error.</p>
|
|
||||||
<p>The same problem applies to <tt class="docutils literal"><span class="pre">is_swappable</span></tt>.</p>
|
|
||||||
</div>
|
|
||||||
<div class="section">
|
|
||||||
<h1><a class="toc-backref" href="#id2" id="proposed-resolution" name="proposed-resolution">Proposed Resolution</a></h1>
|
|
||||||
<ol class="arabic">
|
|
||||||
<li><p class="first">Remove the <tt class="docutils literal"><span class="pre">is_writable</span></tt> and <tt class="docutils literal"><span class="pre">is_swappable</span></tt> traits, and remove the
|
|
||||||
requirements in the Writable Iterator and Swappable Iterator concepts
|
|
||||||
that require their models to support these traits.</p>
|
|
||||||
</li>
|
|
||||||
<li><p class="first">Change the <tt class="docutils literal"><span class="pre">is_readable</span></tt> specification to be:
|
|
||||||
<tt class="docutils literal"><span class="pre">is_readable<X>::type</span></tt> is <tt class="docutils literal"><span class="pre">true_type</span></tt> if the
|
|
||||||
result type of <tt class="docutils literal"><span class="pre">X::operator*</span></tt> is convertible to
|
|
||||||
<tt class="docutils literal"><span class="pre">iterator_traits<X>::value_type</span></tt> and is <tt class="docutils literal"><span class="pre">false_type</span></tt>
|
|
||||||
otherwise. Also, <tt class="docutils literal"><span class="pre">is_readable</span></tt> is required to satisfy
|
|
||||||
the requirements for the UnaryTypeTrait concept
|
|
||||||
(defined in the type traits proposal).</p>
|
|
||||||
<p>Remove the requirement for support of the <tt class="docutils literal"><span class="pre">is_readable</span></tt> trait from
|
|
||||||
the Readable Iterator concept.</p>
|
|
||||||
</li>
|
|
||||||
<li><p class="first">Remove the <tt class="docutils literal"><span class="pre">iterator_tag</span></tt> class.</p>
|
|
||||||
</li>
|
|
||||||
<li><p class="first">Change the specification of <tt class="docutils literal"><span class="pre">traversal_category</span></tt> to:</p>
|
|
||||||
<pre class="literal-block">
|
|
||||||
traversal-category(Iterator) =
|
|
||||||
let cat = iterator_traits<Iterator>::iterator_category
|
|
||||||
if (cat is convertible to incrementable_iterator_tag)
|
|
||||||
return cat; // Iterator is a new iterator
|
|
||||||
else if (cat is convertible to random_access_iterator_tag)
|
|
||||||
return random_access_traversal_tag;
|
|
||||||
else if (cat is convertible to bidirectional_iterator_tag)
|
|
||||||
return bidirectional_traversal_tag;
|
|
||||||
else if (cat is convertible to forward_iterator_tag)
|
|
||||||
return forward_traversal_tag;
|
|
||||||
else if (cat is convertible to input_iterator_tag)
|
|
||||||
return single_pass_iterator_tag;
|
|
||||||
else if (cat is convertible to output_iterator_tag)
|
|
||||||
return incrementable_iterator_tag;
|
|
||||||
else
|
|
||||||
return null_category_tag;
|
|
||||||
</pre>
|
|
||||||
</li>
|
|
||||||
</ol>
|
|
||||||
</div>
|
|
||||||
<div class="section">
|
|
||||||
<h1><a class="toc-backref" href="#id3" id="rationale" name="rationale">Rationale</a></h1>
|
|
||||||
<ol class="arabic simple">
|
|
||||||
<li>There are two reasons for removing <tt class="docutils literal"><span class="pre">is_writable</span></tt>
|
|
||||||
and <tt class="docutils literal"><span class="pre">is_swappable</span></tt>. The first is that we do not know of
|
|
||||||
a way to fix the specification so that it gives the correct
|
|
||||||
answer for all iterators. Second, there was only a weak
|
|
||||||
motivation for having <tt class="docutils literal"><span class="pre">is_writable</span></tt> and <tt class="docutils literal"><span class="pre">is_swappable</span></tt>
|
|
||||||
there in the first place. The main motivation was simply
|
|
||||||
uniformity: we have tags for the old iterator categories
|
|
||||||
so we should have tags for the new iterator categories.
|
|
||||||
While having tags and the capability to dispatch based
|
|
||||||
on the traversal categories is often used, we see
|
|
||||||
less of a need for dispatching based on writability
|
|
||||||
and swappability, since typically algorithms
|
|
||||||
that need these capabilities have no alternative if
|
|
||||||
they are not provided.</li>
|
|
||||||
<li>We discovered that the <tt class="docutils literal"><span class="pre">is_readable</span></tt> trait can be implemented
|
|
||||||
using only the iterator type itself and its <tt class="docutils literal"><span class="pre">value_type</span></tt>.
|
|
||||||
Therefore we remove the requirement for <tt class="docutils literal"><span class="pre">is_readable</span></tt> from the
|
|
||||||
Readable Iterator concept, and change the definition of
|
|
||||||
<tt class="docutils literal"><span class="pre">is_readable</span></tt> so that it works for any iterator type.</li>
|
|
||||||
<li>The purpose of the <tt class="docutils literal"><span class="pre">iterator_tag</span></tt> class was to
|
|
||||||
bundle the traversal and access category tags
|
|
||||||
into the <tt class="docutils literal"><span class="pre">iterator_category</span></tt> typedef.
|
|
||||||
With <tt class="docutils literal"><span class="pre">is_writable</span></tt> and <tt class="docutils literal"><span class="pre">is_swappable</span></tt> gone, and
|
|
||||||
<tt class="docutils literal"><span class="pre">is_readable</span></tt> no longer in need of special hints,
|
|
||||||
there is no reason for iterators to provide
|
|
||||||
information about the access capabilities of an iterator.
|
|
||||||
Thus there is no need for the <tt class="docutils literal"><span class="pre">iterator_tag</span></tt>. The
|
|
||||||
traversal tag can be directly used for the
|
|
||||||
<tt class="docutils literal"><span class="pre">iterator_category</span></tt>. If a new iterator is intended to be backward
|
|
||||||
compatible with old iterator concepts, a tag type
|
|
||||||
that is convertible to both one of the new traversal tags
|
|
||||||
and also to an old iterator tag can be created and use
|
|
||||||
for the <tt class="docutils literal"><span class="pre">iterator_category</span></tt>.</li>
|
|
||||||
<li>The changes to the specification of <tt class="docutils literal"><span class="pre">traversal_category</span></tt> are a
|
|
||||||
direct result of the removal of <tt class="docutils literal"><span class="pre">iterator_tag</span></tt>.</li>
|
|
||||||
</ol>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</body>
|
|
||||||
</html>
|
|
2
doc/issues.rst
Executable file → Normal file
2
doc/issues.rst
Executable file → Normal file
@ -3,7 +3,7 @@
|
|||||||
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
|
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
|
||||||
|
|
||||||
.. _N1550: http://www.boost-consulting.com/writing/n1550.html
|
.. _N1550: http://www.boost-consulting.com/writing/n1550.html
|
||||||
.. _N1530: http://anubis.dkuug.dk/jtc1/sc22/wg21/docs/papers/2003/n1530.html
|
.. _N1530: http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2003/n1530.html
|
||||||
|
|
||||||
:Author: David Abrahams and Jeremy Siek
|
:Author: David Abrahams and Jeremy Siek
|
||||||
:Contact: dave@boost-consulting.com, jsiek@osl.iu.edu
|
:Contact: dave@boost-consulting.com, jsiek@osl.iu.edu
|
||||||
|
@ -3,295 +3,13 @@
|
|||||||
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
|
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
|
||||||
<head>
|
<head>
|
||||||
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
|
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
|
||||||
<meta name="generator" content="Docutils 0.4: http://docutils.sourceforge.net/" />
|
<meta name="generator" content="Docutils 0.5: http://docutils.sourceforge.net/" />
|
||||||
<title>Iterator Adaptor</title>
|
<title>Iterator Adaptor</title>
|
||||||
<meta name="author" content="David Abrahams, Jeremy Siek, Thomas Witt" />
|
<meta name="author" content="David Abrahams, Jeremy Siek, Thomas Witt" />
|
||||||
<meta name="organization" content="Boost Consulting, Indiana University Open Systems Lab, University of Hanover Institute for Transport Railway Operation and Construction" />
|
<meta name="organization" content="Boost Consulting, Indiana University Open Systems Lab, University of Hanover Institute for Transport Railway Operation and Construction" />
|
||||||
<meta name="date" content="2004-11-01" />
|
<meta name="date" content="2006-09-11" />
|
||||||
<meta name="copyright" content="Copyright David Abrahams, Jeremy Siek, and Thomas Witt 2003." />
|
<meta name="copyright" content="Copyright David Abrahams, Jeremy Siek, and Thomas Witt 2003." />
|
||||||
<style type="text/css">
|
<link rel="stylesheet" href="../../../rst.css" type="text/css" />
|
||||||
|
|
||||||
/*
|
|
||||||
:Author: David Goodger
|
|
||||||
:Contact: goodger@users.sourceforge.net
|
|
||||||
:Date: $Date$
|
|
||||||
:Revision: $Revision$
|
|
||||||
:Copyright: This stylesheet has been placed in the public domain.
|
|
||||||
|
|
||||||
Default cascading style sheet for the HTML output of Docutils.
|
|
||||||
|
|
||||||
See http://docutils.sf.net/docs/howto/html-stylesheets.html for how to
|
|
||||||
customize this style sheet.
|
|
||||||
*/
|
|
||||||
|
|
||||||
/* used to remove borders from tables and images */
|
|
||||||
.borderless, table.borderless td, table.borderless th {
|
|
||||||
border: 0 }
|
|
||||||
|
|
||||||
table.borderless td, table.borderless th {
|
|
||||||
/* Override padding for "table.docutils td" with "! important".
|
|
||||||
The right padding separates the table cells. */
|
|
||||||
padding: 0 0.5em 0 0 ! important }
|
|
||||||
|
|
||||||
.first {
|
|
||||||
/* Override more specific margin styles with "! important". */
|
|
||||||
margin-top: 0 ! important }
|
|
||||||
|
|
||||||
.last, .with-subtitle {
|
|
||||||
margin-bottom: 0 ! important }
|
|
||||||
|
|
||||||
.hidden {
|
|
||||||
display: none }
|
|
||||||
|
|
||||||
a.toc-backref {
|
|
||||||
text-decoration: none ;
|
|
||||||
color: black }
|
|
||||||
|
|
||||||
blockquote.epigraph {
|
|
||||||
margin: 2em 5em ; }
|
|
||||||
|
|
||||||
dl.docutils dd {
|
|
||||||
margin-bottom: 0.5em }
|
|
||||||
|
|
||||||
/* Uncomment (and remove this text!) to get bold-faced definition list terms
|
|
||||||
dl.docutils dt {
|
|
||||||
font-weight: bold }
|
|
||||||
*/
|
|
||||||
|
|
||||||
div.abstract {
|
|
||||||
margin: 2em 5em }
|
|
||||||
|
|
||||||
div.abstract p.topic-title {
|
|
||||||
font-weight: bold ;
|
|
||||||
text-align: center }
|
|
||||||
|
|
||||||
div.admonition, div.attention, div.caution, div.danger, div.error,
|
|
||||||
div.hint, div.important, div.note, div.tip, div.warning {
|
|
||||||
margin: 2em ;
|
|
||||||
border: medium outset ;
|
|
||||||
padding: 1em }
|
|
||||||
|
|
||||||
div.admonition p.admonition-title, div.hint p.admonition-title,
|
|
||||||
div.important p.admonition-title, div.note p.admonition-title,
|
|
||||||
div.tip p.admonition-title {
|
|
||||||
font-weight: bold ;
|
|
||||||
font-family: sans-serif }
|
|
||||||
|
|
||||||
div.attention p.admonition-title, div.caution p.admonition-title,
|
|
||||||
div.danger p.admonition-title, div.error p.admonition-title,
|
|
||||||
div.warning p.admonition-title {
|
|
||||||
color: red ;
|
|
||||||
font-weight: bold ;
|
|
||||||
font-family: sans-serif }
|
|
||||||
|
|
||||||
/* Uncomment (and remove this text!) to get reduced vertical space in
|
|
||||||
compound paragraphs.
|
|
||||||
div.compound .compound-first, div.compound .compound-middle {
|
|
||||||
margin-bottom: 0.5em }
|
|
||||||
|
|
||||||
div.compound .compound-last, div.compound .compound-middle {
|
|
||||||
margin-top: 0.5em }
|
|
||||||
*/
|
|
||||||
|
|
||||||
div.dedication {
|
|
||||||
margin: 2em 5em ;
|
|
||||||
text-align: center ;
|
|
||||||
font-style: italic }
|
|
||||||
|
|
||||||
div.dedication p.topic-title {
|
|
||||||
font-weight: bold ;
|
|
||||||
font-style: normal }
|
|
||||||
|
|
||||||
div.figure {
|
|
||||||
margin-left: 2em ;
|
|
||||||
margin-right: 2em }
|
|
||||||
|
|
||||||
div.footer, div.header {
|
|
||||||
clear: both;
|
|
||||||
font-size: smaller }
|
|
||||||
|
|
||||||
div.line-block {
|
|
||||||
display: block ;
|
|
||||||
margin-top: 1em ;
|
|
||||||
margin-bottom: 1em }
|
|
||||||
|
|
||||||
div.line-block div.line-block {
|
|
||||||
margin-top: 0 ;
|
|
||||||
margin-bottom: 0 ;
|
|
||||||
margin-left: 1.5em }
|
|
||||||
|
|
||||||
div.sidebar {
|
|
||||||
margin-left: 1em ;
|
|
||||||
border: medium outset ;
|
|
||||||
padding: 1em ;
|
|
||||||
background-color: #ffffee ;
|
|
||||||
width: 40% ;
|
|
||||||
float: right ;
|
|
||||||
clear: right }
|
|
||||||
|
|
||||||
div.sidebar p.rubric {
|
|
||||||
font-family: sans-serif ;
|
|
||||||
font-size: medium }
|
|
||||||
|
|
||||||
div.system-messages {
|
|
||||||
margin: 5em }
|
|
||||||
|
|
||||||
div.system-messages h1 {
|
|
||||||
color: red }
|
|
||||||
|
|
||||||
div.system-message {
|
|
||||||
border: medium outset ;
|
|
||||||
padding: 1em }
|
|
||||||
|
|
||||||
div.system-message p.system-message-title {
|
|
||||||
color: red ;
|
|
||||||
font-weight: bold }
|
|
||||||
|
|
||||||
div.topic {
|
|
||||||
margin: 2em }
|
|
||||||
|
|
||||||
h1.section-subtitle, h2.section-subtitle, h3.section-subtitle,
|
|
||||||
h4.section-subtitle, h5.section-subtitle, h6.section-subtitle {
|
|
||||||
margin-top: 0.4em }
|
|
||||||
|
|
||||||
h1.title {
|
|
||||||
text-align: center }
|
|
||||||
|
|
||||||
h2.subtitle {
|
|
||||||
text-align: center }
|
|
||||||
|
|
||||||
hr.docutils {
|
|
||||||
width: 75% }
|
|
||||||
|
|
||||||
img.align-left {
|
|
||||||
clear: left }
|
|
||||||
|
|
||||||
img.align-right {
|
|
||||||
clear: right }
|
|
||||||
|
|
||||||
ol.simple, ul.simple {
|
|
||||||
margin-bottom: 1em }
|
|
||||||
|
|
||||||
ol.arabic {
|
|
||||||
list-style: decimal }
|
|
||||||
|
|
||||||
ol.loweralpha {
|
|
||||||
list-style: lower-alpha }
|
|
||||||
|
|
||||||
ol.upperalpha {
|
|
||||||
list-style: upper-alpha }
|
|
||||||
|
|
||||||
ol.lowerroman {
|
|
||||||
list-style: lower-roman }
|
|
||||||
|
|
||||||
ol.upperroman {
|
|
||||||
list-style: upper-roman }
|
|
||||||
|
|
||||||
p.attribution {
|
|
||||||
text-align: right ;
|
|
||||||
margin-left: 50% }
|
|
||||||
|
|
||||||
p.caption {
|
|
||||||
font-style: italic }
|
|
||||||
|
|
||||||
p.credits {
|
|
||||||
font-style: italic ;
|
|
||||||
font-size: smaller }
|
|
||||||
|
|
||||||
p.label {
|
|
||||||
white-space: nowrap }
|
|
||||||
|
|
||||||
p.rubric {
|
|
||||||
font-weight: bold ;
|
|
||||||
font-size: larger ;
|
|
||||||
color: maroon ;
|
|
||||||
text-align: center }
|
|
||||||
|
|
||||||
p.sidebar-title {
|
|
||||||
font-family: sans-serif ;
|
|
||||||
font-weight: bold ;
|
|
||||||
font-size: larger }
|
|
||||||
|
|
||||||
p.sidebar-subtitle {
|
|
||||||
font-family: sans-serif ;
|
|
||||||
font-weight: bold }
|
|
||||||
|
|
||||||
p.topic-title {
|
|
||||||
font-weight: bold }
|
|
||||||
|
|
||||||
pre.address {
|
|
||||||
margin-bottom: 0 ;
|
|
||||||
margin-top: 0 ;
|
|
||||||
font-family: serif ;
|
|
||||||
font-size: 100% }
|
|
||||||
|
|
||||||
pre.literal-block, pre.doctest-block {
|
|
||||||
margin-left: 2em ;
|
|
||||||
margin-right: 2em ;
|
|
||||||
background-color: #eeeeee }
|
|
||||||
|
|
||||||
span.classifier {
|
|
||||||
font-family: sans-serif ;
|
|
||||||
font-style: oblique }
|
|
||||||
|
|
||||||
span.classifier-delimiter {
|
|
||||||
font-family: sans-serif ;
|
|
||||||
font-weight: bold }
|
|
||||||
|
|
||||||
span.interpreted {
|
|
||||||
font-family: sans-serif }
|
|
||||||
|
|
||||||
span.option {
|
|
||||||
white-space: nowrap }
|
|
||||||
|
|
||||||
span.pre {
|
|
||||||
white-space: pre }
|
|
||||||
|
|
||||||
span.problematic {
|
|
||||||
color: red }
|
|
||||||
|
|
||||||
span.section-subtitle {
|
|
||||||
/* font-size relative to parent (h1..h6 element) */
|
|
||||||
font-size: 80% }
|
|
||||||
|
|
||||||
table.citation {
|
|
||||||
border-left: solid 1px gray;
|
|
||||||
margin-left: 1px }
|
|
||||||
|
|
||||||
table.docinfo {
|
|
||||||
margin: 2em 4em }
|
|
||||||
|
|
||||||
table.docutils {
|
|
||||||
margin-top: 0.5em ;
|
|
||||||
margin-bottom: 0.5em }
|
|
||||||
|
|
||||||
table.footnote {
|
|
||||||
border-left: solid 1px black;
|
|
||||||
margin-left: 1px }
|
|
||||||
|
|
||||||
table.docutils td, table.docutils th,
|
|
||||||
table.docinfo td, table.docinfo th {
|
|
||||||
padding-left: 0.5em ;
|
|
||||||
padding-right: 0.5em ;
|
|
||||||
vertical-align: top }
|
|
||||||
|
|
||||||
table.docutils th.field-name, table.docinfo th.docinfo-name {
|
|
||||||
font-weight: bold ;
|
|
||||||
text-align: left ;
|
|
||||||
white-space: nowrap ;
|
|
||||||
padding-left: 0 }
|
|
||||||
|
|
||||||
h1 tt.docutils, h2 tt.docutils, h3 tt.docutils,
|
|
||||||
h4 tt.docutils, h5 tt.docutils, h6 tt.docutils {
|
|
||||||
font-size: 100% }
|
|
||||||
|
|
||||||
tt.docutils {
|
|
||||||
background-color: #eeeeee }
|
|
||||||
|
|
||||||
ul.auto-toc {
|
|
||||||
list-style-type: none }
|
|
||||||
|
|
||||||
</style>
|
|
||||||
</head>
|
</head>
|
||||||
<body>
|
<body>
|
||||||
<div class="document" id="iterator-adaptor">
|
<div class="document" id="iterator-adaptor">
|
||||||
@ -303,13 +21,13 @@ ul.auto-toc {
|
|||||||
<tr><th class="docinfo-name">Author:</th>
|
<tr><th class="docinfo-name">Author:</th>
|
||||||
<td>David Abrahams, Jeremy Siek, Thomas Witt</td></tr>
|
<td>David Abrahams, Jeremy Siek, Thomas Witt</td></tr>
|
||||||
<tr><th class="docinfo-name">Contact:</th>
|
<tr><th class="docinfo-name">Contact:</th>
|
||||||
<td><a class="first reference" href="mailto:dave@boost-consulting.com">dave@boost-consulting.com</a>, <a class="reference" href="mailto:jsiek@osl.iu.edu">jsiek@osl.iu.edu</a>, <a class="last reference" href="mailto:witt@ive.uni-hannover.de">witt@ive.uni-hannover.de</a></td></tr>
|
<td><a class="first reference external" href="mailto:dave@boost-consulting.com">dave@boost-consulting.com</a>, <a class="reference external" href="mailto:jsiek@osl.iu.edu">jsiek@osl.iu.edu</a>, <a class="last reference external" href="mailto:witt@ive.uni-hannover.de">witt@ive.uni-hannover.de</a></td></tr>
|
||||||
<tr><th class="docinfo-name">Organization:</th>
|
<tr><th class="docinfo-name">Organization:</th>
|
||||||
<td><a class="first reference" href="http://www.boost-consulting.com">Boost Consulting</a>, Indiana University <a class="reference" href="http://www.osl.iu.edu">Open Systems
|
<td><a class="first reference external" href="http://www.boost-consulting.com">Boost Consulting</a>, Indiana University <a class="reference external" href="http://www.osl.iu.edu">Open Systems
|
||||||
Lab</a>, University of Hanover <a class="last reference" href="http://www.ive.uni-hannover.de">Institute for Transport
|
Lab</a>, University of Hanover <a class="last reference external" href="http://www.ive.uni-hannover.de">Institute for Transport
|
||||||
Railway Operation and Construction</a></td></tr>
|
Railway Operation and Construction</a></td></tr>
|
||||||
<tr><th class="docinfo-name">Date:</th>
|
<tr><th class="docinfo-name">Date:</th>
|
||||||
<td>2004-11-01</td></tr>
|
<td>2006-09-11</td></tr>
|
||||||
<tr><th class="docinfo-name">Copyright:</th>
|
<tr><th class="docinfo-name">Copyright:</th>
|
||||||
<td>Copyright David Abrahams, Jeremy Siek, and Thomas Witt 2003.</td></tr>
|
<td>Copyright David Abrahams, Jeremy Siek, and Thomas Witt 2003.</td></tr>
|
||||||
</tbody>
|
</tbody>
|
||||||
@ -341,30 +59,30 @@ Whether the derived class models any of the standard iterator concepts
|
|||||||
depends on the operations supported by the <tt class="docutils literal"><span class="pre">Base</span></tt> type and which
|
depends on the operations supported by the <tt class="docutils literal"><span class="pre">Base</span></tt> type and which
|
||||||
core interface functions of <tt class="docutils literal"><span class="pre">iterator_facade</span></tt> are redefined in the
|
core interface functions of <tt class="docutils literal"><span class="pre">iterator_facade</span></tt> are redefined in the
|
||||||
<tt class="docutils literal"><span class="pre">Derived</span></tt> class.</p>
|
<tt class="docutils literal"><span class="pre">Derived</span></tt> class.</p>
|
||||||
<div class="contents topic">
|
<div class="contents topic" id="table-of-contents">
|
||||||
<p class="topic-title first"><a id="table-of-contents" name="table-of-contents">Table of Contents</a></p>
|
<p class="topic-title first">Table of Contents</p>
|
||||||
<ul class="simple">
|
<ul class="simple">
|
||||||
<li><a class="reference" href="#overview" id="id6" name="id6">Overview</a></li>
|
<li><a class="reference internal" href="#overview" id="id6">Overview</a></li>
|
||||||
<li><a class="reference" href="#reference" id="id7" name="id7">Reference</a><ul>
|
<li><a class="reference internal" href="#reference" id="id7">Reference</a><ul>
|
||||||
<li><a class="reference" href="#iterator-adaptor-requirements" id="id8" name="id8"><tt class="docutils literal"><span class="pre">iterator_adaptor</span></tt> requirements</a></li>
|
<li><a class="reference internal" href="#iterator-adaptor-requirements" id="id8"><tt class="docutils literal"><span class="pre">iterator_adaptor</span></tt> requirements</a></li>
|
||||||
<li><a class="reference" href="#iterator-adaptor-base-class-parameters" id="id9" name="id9"><tt class="docutils literal"><span class="pre">iterator_adaptor</span></tt> base class parameters</a></li>
|
<li><a class="reference internal" href="#iterator-adaptor-base-class-parameters" id="id9"><tt class="docutils literal"><span class="pre">iterator_adaptor</span></tt> base class parameters</a></li>
|
||||||
<li><a class="reference" href="#iterator-adaptor-public-operations" id="id10" name="id10"><tt class="docutils literal"><span class="pre">iterator_adaptor</span></tt> public operations</a></li>
|
<li><a class="reference internal" href="#iterator-adaptor-public-operations" id="id10"><tt class="docutils literal"><span class="pre">iterator_adaptor</span></tt> public operations</a></li>
|
||||||
<li><a class="reference" href="#iterator-adaptor-protected-member-functions" id="id11" name="id11"><tt class="docutils literal"><span class="pre">iterator_adaptor</span></tt> protected member functions</a></li>
|
<li><a class="reference internal" href="#iterator-adaptor-protected-member-functions" id="id11"><tt class="docutils literal"><span class="pre">iterator_adaptor</span></tt> protected member functions</a></li>
|
||||||
<li><a class="reference" href="#iterator-adaptor-private-member-functions" id="id12" name="id12"><tt class="docutils literal"><span class="pre">iterator_adaptor</span></tt> private member functions</a></li>
|
<li><a class="reference internal" href="#iterator-adaptor-private-member-functions" id="id12"><tt class="docutils literal"><span class="pre">iterator_adaptor</span></tt> private member functions</a></li>
|
||||||
</ul>
|
</ul>
|
||||||
</li>
|
</li>
|
||||||
<li><a class="reference" href="#tutorial-example" id="id13" name="id13">Tutorial Example</a></li>
|
<li><a class="reference internal" href="#tutorial-example" id="id13">Tutorial Example</a></li>
|
||||||
</ul>
|
</ul>
|
||||||
</div>
|
</div>
|
||||||
<div class="section">
|
<div class="section" id="overview">
|
||||||
<h1><a class="toc-backref" href="#id6" id="overview" name="overview">Overview</a></h1>
|
<h1><a class="toc-backref" href="#id6">Overview</a></h1>
|
||||||
<!-- Distributed under the Boost -->
|
<!-- Distributed under the Boost -->
|
||||||
<!-- Software License, Version 1.0. (See accompanying -->
|
<!-- Software License, Version 1.0. (See accompanying -->
|
||||||
<!-- file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) -->
|
<!-- file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) -->
|
||||||
<!-- Version 1.2 of this ReStructuredText document corresponds to
|
<!-- Version 1.2 of this ReStructuredText document corresponds to
|
||||||
n1530_, the paper accepted by the LWG for TR1. -->
|
n1530_, the paper accepted by the LWG for TR1. -->
|
||||||
<!-- Copyright David Abrahams, Jeremy Siek, and Thomas Witt 2003. -->
|
<!-- Copyright David Abrahams, Jeremy Siek, and Thomas Witt 2003. -->
|
||||||
<p>The <tt class="docutils literal"><span class="pre">iterator_adaptor</span></tt> class template adapts some <tt class="docutils literal"><span class="pre">Base</span></tt> <a class="footnote-reference" href="#base" id="id1" name="id1">[1]</a>
|
<p>The <tt class="docutils literal"><span class="pre">iterator_adaptor</span></tt> class template adapts some <tt class="docutils literal"><span class="pre">Base</span></tt><a class="footnote-reference" href="#base" id="id1"><sup>1</sup></a>
|
||||||
type to create a new iterator. Instantiations of <tt class="docutils literal"><span class="pre">iterator_adaptor</span></tt>
|
type to create a new iterator. Instantiations of <tt class="docutils literal"><span class="pre">iterator_adaptor</span></tt>
|
||||||
are derived from a corresponding instantiation of <tt class="docutils literal"><span class="pre">iterator_facade</span></tt>
|
are derived from a corresponding instantiation of <tt class="docutils literal"><span class="pre">iterator_facade</span></tt>
|
||||||
and implement the core behaviors in terms of the <tt class="docutils literal"><span class="pre">Base</span></tt> type. In
|
and implement the core behaviors in terms of the <tt class="docutils literal"><span class="pre">Base</span></tt> type. In
|
||||||
@ -373,7 +91,7 @@ instance of the <tt class="docutils literal"><span class="pre">Base</span></tt>
|
|||||||
<table class="docutils footnote" frame="void" id="base" rules="none">
|
<table class="docutils footnote" frame="void" id="base" rules="none">
|
||||||
<colgroup><col class="label" /><col /></colgroup>
|
<colgroup><col class="label" /><col /></colgroup>
|
||||||
<tbody valign="top">
|
<tbody valign="top">
|
||||||
<tr><td class="label"><a name="base">[1]</a></td><td><em>(<a class="fn-backref" href="#id1">1</a>, <a class="fn-backref" href="#id3">2</a>)</em> The term "Base" here does not refer to a base class and is
|
<tr><td class="label">[1]</td><td><em>(<a class="fn-backref" href="#id1">1</a>, <a class="fn-backref" href="#id3">2</a>)</em> The term "Base" here does not refer to a base class and is
|
||||||
not meant to imply the use of derivation. We have followed the lead
|
not meant to imply the use of derivation. We have followed the lead
|
||||||
of the standard library, which provides a base() function to access
|
of the standard library, which provides a base() function to access
|
||||||
the underlying iterator object of a <tt class="docutils literal"><span class="pre">reverse_iterator</span></tt> adaptor.</td></tr>
|
the underlying iterator object of a <tt class="docutils literal"><span class="pre">reverse_iterator</span></tt> adaptor.</td></tr>
|
||||||
@ -400,8 +118,8 @@ template parameter may not always be identical to the iterator's
|
|||||||
<tt class="docutils literal"><span class="pre">reference</span></tt> type, and will keep users from making mistakes based on
|
<tt class="docutils literal"><span class="pre">reference</span></tt> type, and will keep users from making mistakes based on
|
||||||
that assumption.</p>
|
that assumption.</p>
|
||||||
</div>
|
</div>
|
||||||
<div class="section">
|
<div class="section" id="reference">
|
||||||
<h1><a class="toc-backref" href="#id7" id="reference" name="reference">Reference</a></h1>
|
<h1><a class="toc-backref" href="#id7">Reference</a></h1>
|
||||||
<!-- Distributed under the Boost -->
|
<!-- Distributed under the Boost -->
|
||||||
<!-- Software License, Version 1.0. (See accompanying -->
|
<!-- Software License, Version 1.0. (See accompanying -->
|
||||||
<!-- file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) -->
|
<!-- file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) -->
|
||||||
@ -418,7 +136,7 @@ template <
|
|||||||
, class Difference = use_default
|
, class Difference = use_default
|
||||||
>
|
>
|
||||||
class iterator_adaptor
|
class iterator_adaptor
|
||||||
: public iterator_facade<Derived, <em>V'</em>, <em>C'</em>, <em>R'</em>, <em>D'</em>> // see <a class="reference" href="#base-parameters">details</a>
|
: public iterator_facade<Derived, <em>V'</em>, <em>C'</em>, <em>R'</em>, <em>D'</em>> // see <a class="reference internal" href="#base-parameters">details</a>
|
||||||
{
|
{
|
||||||
friend class iterator_core_access;
|
friend class iterator_core_access;
|
||||||
public:
|
public:
|
||||||
@ -452,13 +170,13 @@ class iterator_adaptor
|
|||||||
Base m_iterator; // exposition only
|
Base m_iterator; // exposition only
|
||||||
};
|
};
|
||||||
</pre>
|
</pre>
|
||||||
<div class="section">
|
<div class="section" id="iterator-adaptor-requirements">
|
||||||
<h2><a class="toc-backref" href="#id8" id="iterator-adaptor-requirements" name="iterator-adaptor-requirements"><span id="requirements"></span><tt class="docutils literal"><span class="pre">iterator_adaptor</span></tt> requirements</a></h2>
|
<span id="requirements"></span><h2><a class="toc-backref" href="#id8"><tt class="docutils literal"><span class="pre">iterator_adaptor</span></tt> requirements</a></h2>
|
||||||
<p><tt class="docutils literal"><span class="pre">static_cast<Derived*>(iterator_adaptor*)</span></tt> shall be well-formed.
|
<p><tt class="docutils literal"><span class="pre">static_cast<Derived*>(iterator_adaptor*)</span></tt> shall be well-formed.
|
||||||
The <tt class="docutils literal"><span class="pre">Base</span></tt> argument shall be Assignable and Copy Constructible.</p>
|
The <tt class="docutils literal"><span class="pre">Base</span></tt> argument shall be Assignable and Copy Constructible.</p>
|
||||||
</div>
|
</div>
|
||||||
<div class="section">
|
<div class="section" id="iterator-adaptor-base-class-parameters">
|
||||||
<h2><a class="toc-backref" href="#id9" id="iterator-adaptor-base-class-parameters" name="iterator-adaptor-base-class-parameters"><span id="base-parameters"></span><tt class="docutils literal"><span class="pre">iterator_adaptor</span></tt> base class parameters</a></h2>
|
<span id="base-parameters"></span><h2><a class="toc-backref" href="#id9"><tt class="docutils literal"><span class="pre">iterator_adaptor</span></tt> base class parameters</a></h2>
|
||||||
<p>The <em>V'</em>, <em>C'</em>, <em>R'</em>, and <em>D'</em> parameters of the <tt class="docutils literal"><span class="pre">iterator_facade</span></tt>
|
<p>The <em>V'</em>, <em>C'</em>, <em>R'</em>, and <em>D'</em> parameters of the <tt class="docutils literal"><span class="pre">iterator_facade</span></tt>
|
||||||
used as a base class in the summary of <tt class="docutils literal"><span class="pre">iterator_adaptor</span></tt>
|
used as a base class in the summary of <tt class="docutils literal"><span class="pre">iterator_adaptor</span></tt>
|
||||||
above are defined as follows:</p>
|
above are defined as follows:</p>
|
||||||
@ -498,8 +216,8 @@ expression involving ``Derived`` in those concepts' requirements. -->
|
|||||||
<!-- The above is confusing and needs a rewrite. -JGS -->
|
<!-- The above is confusing and needs a rewrite. -JGS -->
|
||||||
<!-- That's why it's removed. We're embracing inheritance, remember? -->
|
<!-- That's why it's removed. We're embracing inheritance, remember? -->
|
||||||
</div>
|
</div>
|
||||||
<div class="section">
|
<div class="section" id="iterator-adaptor-public-operations">
|
||||||
<h2><a class="toc-backref" href="#id10" id="iterator-adaptor-public-operations" name="iterator-adaptor-public-operations"><tt class="docutils literal"><span class="pre">iterator_adaptor</span></tt> public operations</a></h2>
|
<h2><a class="toc-backref" href="#id10"><tt class="docutils literal"><span class="pre">iterator_adaptor</span></tt> public operations</a></h2>
|
||||||
<p><tt class="docutils literal"><span class="pre">iterator_adaptor();</span></tt></p>
|
<p><tt class="docutils literal"><span class="pre">iterator_adaptor();</span></tt></p>
|
||||||
<table class="docutils field-list" frame="void" rules="none">
|
<table class="docutils field-list" frame="void" rules="none">
|
||||||
<col class="field-name" />
|
<col class="field-name" />
|
||||||
@ -532,8 +250,8 @@ expression involving ``Derived`` in those concepts' requirements. -->
|
|||||||
</tbody>
|
</tbody>
|
||||||
</table>
|
</table>
|
||||||
</div>
|
</div>
|
||||||
<div class="section">
|
<div class="section" id="iterator-adaptor-protected-member-functions">
|
||||||
<h2><a class="toc-backref" href="#id11" id="iterator-adaptor-protected-member-functions" name="iterator-adaptor-protected-member-functions"><tt class="docutils literal"><span class="pre">iterator_adaptor</span></tt> protected member functions</a></h2>
|
<h2><a class="toc-backref" href="#id11"><tt class="docutils literal"><span class="pre">iterator_adaptor</span></tt> protected member functions</a></h2>
|
||||||
<p><tt class="docutils literal"><span class="pre">Base</span> <span class="pre">const&</span> <span class="pre">base_reference()</span> <span class="pre">const;</span></tt></p>
|
<p><tt class="docutils literal"><span class="pre">Base</span> <span class="pre">const&</span> <span class="pre">base_reference()</span> <span class="pre">const;</span></tt></p>
|
||||||
<table class="docutils field-list" frame="void" rules="none">
|
<table class="docutils field-list" frame="void" rules="none">
|
||||||
<col class="field-name" />
|
<col class="field-name" />
|
||||||
@ -553,8 +271,8 @@ expression involving ``Derived`` in those concepts' requirements. -->
|
|||||||
</tbody>
|
</tbody>
|
||||||
</table>
|
</table>
|
||||||
</div>
|
</div>
|
||||||
<div class="section">
|
<div class="section" id="iterator-adaptor-private-member-functions">
|
||||||
<h2><a class="toc-backref" href="#id12" id="iterator-adaptor-private-member-functions" name="iterator-adaptor-private-member-functions"><tt class="docutils literal"><span class="pre">iterator_adaptor</span></tt> private member functions</a></h2>
|
<h2><a class="toc-backref" href="#id12"><tt class="docutils literal"><span class="pre">iterator_adaptor</span></tt> private member functions</a></h2>
|
||||||
<p><tt class="docutils literal"><span class="pre">typename</span> <span class="pre">iterator_adaptor::reference</span> <span class="pre">dereference()</span> <span class="pre">const;</span></tt></p>
|
<p><tt class="docutils literal"><span class="pre">typename</span> <span class="pre">iterator_adaptor::reference</span> <span class="pre">dereference()</span> <span class="pre">const;</span></tt></p>
|
||||||
<table class="docutils field-list" frame="void" rules="none">
|
<table class="docutils field-list" frame="void" rules="none">
|
||||||
<col class="field-name" />
|
<col class="field-name" />
|
||||||
@ -622,13 +340,13 @@ typename iterator_adaptor::difference_type distance_to(
|
|||||||
</table>
|
</table>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="section">
|
<div class="section" id="tutorial-example">
|
||||||
<h1><a class="toc-backref" href="#id13" id="tutorial-example" name="tutorial-example">Tutorial Example</a></h1>
|
<h1><a class="toc-backref" href="#id13">Tutorial Example</a></h1>
|
||||||
<!-- Copyright David Abrahams 2004. Use, modification and distribution is -->
|
<!-- Copyright David Abrahams 2004. Use, modification and distribution is -->
|
||||||
<!-- subject to the Boost Software License, Version 1.0. (See accompanying -->
|
<!-- subject to 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) -->
|
<!-- file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) -->
|
||||||
<p>In this section we'll further refine the <tt class="docutils literal"><span class="pre">node_iter</span></tt> class
|
<p>In this section we'll further refine the <tt class="docutils literal"><span class="pre">node_iter</span></tt> class
|
||||||
template we developed in the <a class="reference" href="iterator_facade.html#tutorial-example"><tt class="docutils literal"><span class="pre">iterator_facade</span></tt> tutorial</a>. If you haven't already
|
template we developed in the <a class="reference external" href="iterator_facade.html#tutorial-example"><tt class="docutils literal"><span class="pre">iterator_facade</span></tt> tutorial</a>. If you haven't already
|
||||||
read that material, you should go back now and check it out because
|
read that material, you should go back now and check it out because
|
||||||
we're going to pick up right where it left off.</p>
|
we're going to pick up right where it left off.</p>
|
||||||
<div class="sidebar">
|
<div class="sidebar">
|
||||||
@ -651,12 +369,12 @@ of the same associated types (<tt class="docutils literal"><span class="pre">val
|
|||||||
core functionality is the same: <tt class="docutils literal"><span class="pre">operator*</span></tt> and <tt class="docutils literal"><span class="pre">operator==</span></tt> on
|
core functionality is the same: <tt class="docutils literal"><span class="pre">operator*</span></tt> and <tt class="docutils literal"><span class="pre">operator==</span></tt> on
|
||||||
the <tt class="docutils literal"><span class="pre">node_iterator</span></tt> return the result of invoking the same
|
the <tt class="docutils literal"><span class="pre">node_iterator</span></tt> return the result of invoking the same
|
||||||
operations on the underlying pointer, via the <tt class="docutils literal"><span class="pre">node_iterator</span></tt>'s
|
operations on the underlying pointer, via the <tt class="docutils literal"><span class="pre">node_iterator</span></tt>'s
|
||||||
<a class="reference" href="iterator_facade.html#implementing-the-core-operations"><tt class="docutils literal"><span class="pre">dereference</span></tt> and <tt class="docutils literal"><span class="pre">equal</span></tt> member functions</a>). The only real behavioral difference
|
<a class="reference external" href="iterator_facade.html#implementing-the-core-operations"><tt class="docutils literal"><span class="pre">dereference</span></tt> and <tt class="docutils literal"><span class="pre">equal</span></tt> member functions</a>). The only real behavioral difference
|
||||||
between <tt class="docutils literal"><span class="pre">node_base*</span></tt> and <tt class="docutils literal"><span class="pre">node_iterator</span></tt> can be observed when
|
between <tt class="docutils literal"><span class="pre">node_base*</span></tt> and <tt class="docutils literal"><span class="pre">node_iterator</span></tt> can be observed when
|
||||||
they are incremented: <tt class="docutils literal"><span class="pre">node_iterator</span></tt> follows the
|
they are incremented: <tt class="docutils literal"><span class="pre">node_iterator</span></tt> follows the
|
||||||
<tt class="docutils literal"><span class="pre">m_next</span></tt> pointer, while <tt class="docutils literal"><span class="pre">node_base*</span></tt> just applies an address offset.</p>
|
<tt class="docutils literal"><span class="pre">m_next</span></tt> pointer, while <tt class="docutils literal"><span class="pre">node_base*</span></tt> just applies an address offset.</p>
|
||||||
<p>It turns out that the pattern of building an iterator on another
|
<p>It turns out that the pattern of building an iterator on another
|
||||||
iterator-like type (the <tt class="docutils literal"><span class="pre">Base</span></tt> <a class="footnote-reference" href="#base" id="id3" name="id3">[1]</a> type) while modifying
|
iterator-like type (the <tt class="docutils literal"><span class="pre">Base</span></tt><a class="footnote-reference" href="#base" id="id3"><sup>1</sup></a> type) while modifying
|
||||||
just a few aspects of the underlying type's behavior is an
|
just a few aspects of the underlying type's behavior is an
|
||||||
extremely common one, and it's the pattern addressed by
|
extremely common one, and it's the pattern addressed by
|
||||||
<tt class="docutils literal"><span class="pre">iterator_adaptor</span></tt>. Using <tt class="docutils literal"><span class="pre">iterator_adaptor</span></tt> is very much like
|
<tt class="docutils literal"><span class="pre">iterator_adaptor</span></tt>. Using <tt class="docutils literal"><span class="pre">iterator_adaptor</span></tt> is very much like
|
||||||
@ -707,7 +425,7 @@ the complicated base class type of <tt class="docutils literal"><span class="pre
|
|||||||
this technique is known not to work with Borland C++ 5.6.4 and
|
this technique is known not to work with Borland C++ 5.6.4 and
|
||||||
Metrowerks CodeWarrior versions prior to 9.0]</p>
|
Metrowerks CodeWarrior versions prior to 9.0]</p>
|
||||||
<p>You can see an example program that exercises this version of the
|
<p>You can see an example program that exercises this version of the
|
||||||
node iterators <a class="reference" href="../example/node_iterator3.cpp">here</a>.</p>
|
node iterators <a class="reference external" href="../example/node_iterator3.cpp">here</a>.</p>
|
||||||
<p>In the case of <tt class="docutils literal"><span class="pre">node_iter</span></tt>, it's not very compelling to pass
|
<p>In the case of <tt class="docutils literal"><span class="pre">node_iter</span></tt>, it's not very compelling to pass
|
||||||
<tt class="docutils literal"><span class="pre">boost::use_default</span></tt> as <tt class="docutils literal"><span class="pre">iterator_adaptor</span></tt>'s <tt class="docutils literal"><span class="pre">Value</span></tt>
|
<tt class="docutils literal"><span class="pre">boost::use_default</span></tt> as <tt class="docutils literal"><span class="pre">iterator_adaptor</span></tt>'s <tt class="docutils literal"><span class="pre">Value</span></tt>
|
||||||
argument; we could have just passed <tt class="docutils literal"><span class="pre">node_iter</span></tt>'s <tt class="docutils literal"><span class="pre">Value</span></tt>
|
argument; we could have just passed <tt class="docutils literal"><span class="pre">node_iter</span></tt>'s <tt class="docutils literal"><span class="pre">Value</span></tt>
|
||||||
@ -725,13 +443,19 @@ std::iterator_traits<Iterator>::<em>some-associated-type</em>
|
|||||||
</pre>
|
</pre>
|
||||||
<p>at least four times.</p>
|
<p>at least four times.</p>
|
||||||
<p>We urge you to review the documentation and implementations of
|
<p>We urge you to review the documentation and implementations of
|
||||||
<a class="reference" href="reverse_iterator.html"><tt class="docutils literal"><span class="pre">reverse_iterator</span></tt></a> and the other Boost <a class="reference" href="index.html#specialized-adaptors">specialized iterator
|
<a class="reference external" href="reverse_iterator.html"><tt class="docutils literal"><span class="pre">reverse_iterator</span></tt></a> and the other Boost <a class="reference external" href="index.html#specialized-adaptors">specialized iterator
|
||||||
adaptors</a> to get an idea of the sorts of things you can do with
|
adaptors</a> to get an idea of the sorts of things you can do with
|
||||||
<tt class="docutils literal"><span class="pre">iterator_adaptor</span></tt>. In particular, have a look at
|
<tt class="docutils literal"><span class="pre">iterator_adaptor</span></tt>. In particular, have a look at
|
||||||
<a class="reference" href="transform_iterator.html"><tt class="docutils literal"><span class="pre">transform_iterator</span></tt></a>, which is perhaps the most straightforward
|
<a class="reference external" href="transform_iterator.html"><tt class="docutils literal"><span class="pre">transform_iterator</span></tt></a>, which is perhaps the most straightforward
|
||||||
adaptor, and also <a class="reference" href="counting_iterator.html"><tt class="docutils literal"><span class="pre">counting_iterator</span></tt></a>, which demonstrates that
|
adaptor, and also <a class="reference external" href="counting_iterator.html"><tt class="docutils literal"><span class="pre">counting_iterator</span></tt></a>, which demonstrates that
|
||||||
<tt class="docutils literal"><span class="pre">iterator_adaptor</span></tt>'s <tt class="docutils literal"><span class="pre">Base</span></tt> type needn't be an iterator.</p>
|
<tt class="docutils literal"><span class="pre">iterator_adaptor</span></tt>'s <tt class="docutils literal"><span class="pre">Base</span></tt> type needn't be an iterator.</p>
|
||||||
</div>
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="footer">
|
||||||
|
<hr class="footer" />
|
||||||
|
<a class="reference external" href="iterator_adaptor.rst">View document source</a>.
|
||||||
|
Generated by <a class="reference external" href="http://docutils.sourceforge.net/">Docutils</a> from <a class="reference external" href="http://docutils.sourceforge.net/rst.html">reStructuredText</a> source.
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
</body>
|
</body>
|
||||||
</html>
|
</html>
|
||||||
|
0
doc/iterator_adaptor.pdf
Executable file → Normal file
0
doc/iterator_adaptor.pdf
Executable file → Normal file
0
doc/iterator_adaptor_tutorial.rst
Executable file → Normal file
0
doc/iterator_adaptor_tutorial.rst
Executable file → Normal file
344
doc/iterator_archetypes.html
Executable file → Normal file
344
doc/iterator_archetypes.html
Executable file → Normal file
@ -3,295 +3,13 @@
|
|||||||
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
|
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
|
||||||
<head>
|
<head>
|
||||||
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
|
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
|
||||||
<meta name="generator" content="Docutils 0.4: http://docutils.sourceforge.net/" />
|
<meta name="generator" content="Docutils 0.5: http://docutils.sourceforge.net/" />
|
||||||
<title>Iterator Archetype</title>
|
<title>Iterator Archetype</title>
|
||||||
<meta name="author" content="David Abrahams, Jeremy Siek, Thomas Witt" />
|
<meta name="author" content="David Abrahams, Jeremy Siek, Thomas Witt" />
|
||||||
<meta name="organization" content="Boost Consulting, Indiana University Open Systems Lab, Zephyr Associates, Inc." />
|
<meta name="organization" content="Boost Consulting, Indiana University Open Systems Lab, Zephyr Associates, Inc." />
|
||||||
<meta name="date" content="2004-11-01" />
|
<meta name="date" content="2006-09-11" />
|
||||||
<meta name="copyright" content="Copyright David Abrahams, Jeremy Siek, and Thomas Witt 2004." />
|
<meta name="copyright" content="Copyright David Abrahams, Jeremy Siek, and Thomas Witt 2004." />
|
||||||
<style type="text/css">
|
<link rel="stylesheet" href="../../../rst.css" type="text/css" />
|
||||||
|
|
||||||
/*
|
|
||||||
:Author: David Goodger
|
|
||||||
:Contact: goodger@users.sourceforge.net
|
|
||||||
:Date: $Date$
|
|
||||||
:Revision: $Revision$
|
|
||||||
:Copyright: This stylesheet has been placed in the public domain.
|
|
||||||
|
|
||||||
Default cascading style sheet for the HTML output of Docutils.
|
|
||||||
|
|
||||||
See http://docutils.sf.net/docs/howto/html-stylesheets.html for how to
|
|
||||||
customize this style sheet.
|
|
||||||
*/
|
|
||||||
|
|
||||||
/* used to remove borders from tables and images */
|
|
||||||
.borderless, table.borderless td, table.borderless th {
|
|
||||||
border: 0 }
|
|
||||||
|
|
||||||
table.borderless td, table.borderless th {
|
|
||||||
/* Override padding for "table.docutils td" with "! important".
|
|
||||||
The right padding separates the table cells. */
|
|
||||||
padding: 0 0.5em 0 0 ! important }
|
|
||||||
|
|
||||||
.first {
|
|
||||||
/* Override more specific margin styles with "! important". */
|
|
||||||
margin-top: 0 ! important }
|
|
||||||
|
|
||||||
.last, .with-subtitle {
|
|
||||||
margin-bottom: 0 ! important }
|
|
||||||
|
|
||||||
.hidden {
|
|
||||||
display: none }
|
|
||||||
|
|
||||||
a.toc-backref {
|
|
||||||
text-decoration: none ;
|
|
||||||
color: black }
|
|
||||||
|
|
||||||
blockquote.epigraph {
|
|
||||||
margin: 2em 5em ; }
|
|
||||||
|
|
||||||
dl.docutils dd {
|
|
||||||
margin-bottom: 0.5em }
|
|
||||||
|
|
||||||
/* Uncomment (and remove this text!) to get bold-faced definition list terms
|
|
||||||
dl.docutils dt {
|
|
||||||
font-weight: bold }
|
|
||||||
*/
|
|
||||||
|
|
||||||
div.abstract {
|
|
||||||
margin: 2em 5em }
|
|
||||||
|
|
||||||
div.abstract p.topic-title {
|
|
||||||
font-weight: bold ;
|
|
||||||
text-align: center }
|
|
||||||
|
|
||||||
div.admonition, div.attention, div.caution, div.danger, div.error,
|
|
||||||
div.hint, div.important, div.note, div.tip, div.warning {
|
|
||||||
margin: 2em ;
|
|
||||||
border: medium outset ;
|
|
||||||
padding: 1em }
|
|
||||||
|
|
||||||
div.admonition p.admonition-title, div.hint p.admonition-title,
|
|
||||||
div.important p.admonition-title, div.note p.admonition-title,
|
|
||||||
div.tip p.admonition-title {
|
|
||||||
font-weight: bold ;
|
|
||||||
font-family: sans-serif }
|
|
||||||
|
|
||||||
div.attention p.admonition-title, div.caution p.admonition-title,
|
|
||||||
div.danger p.admonition-title, div.error p.admonition-title,
|
|
||||||
div.warning p.admonition-title {
|
|
||||||
color: red ;
|
|
||||||
font-weight: bold ;
|
|
||||||
font-family: sans-serif }
|
|
||||||
|
|
||||||
/* Uncomment (and remove this text!) to get reduced vertical space in
|
|
||||||
compound paragraphs.
|
|
||||||
div.compound .compound-first, div.compound .compound-middle {
|
|
||||||
margin-bottom: 0.5em }
|
|
||||||
|
|
||||||
div.compound .compound-last, div.compound .compound-middle {
|
|
||||||
margin-top: 0.5em }
|
|
||||||
*/
|
|
||||||
|
|
||||||
div.dedication {
|
|
||||||
margin: 2em 5em ;
|
|
||||||
text-align: center ;
|
|
||||||
font-style: italic }
|
|
||||||
|
|
||||||
div.dedication p.topic-title {
|
|
||||||
font-weight: bold ;
|
|
||||||
font-style: normal }
|
|
||||||
|
|
||||||
div.figure {
|
|
||||||
margin-left: 2em ;
|
|
||||||
margin-right: 2em }
|
|
||||||
|
|
||||||
div.footer, div.header {
|
|
||||||
clear: both;
|
|
||||||
font-size: smaller }
|
|
||||||
|
|
||||||
div.line-block {
|
|
||||||
display: block ;
|
|
||||||
margin-top: 1em ;
|
|
||||||
margin-bottom: 1em }
|
|
||||||
|
|
||||||
div.line-block div.line-block {
|
|
||||||
margin-top: 0 ;
|
|
||||||
margin-bottom: 0 ;
|
|
||||||
margin-left: 1.5em }
|
|
||||||
|
|
||||||
div.sidebar {
|
|
||||||
margin-left: 1em ;
|
|
||||||
border: medium outset ;
|
|
||||||
padding: 1em ;
|
|
||||||
background-color: #ffffee ;
|
|
||||||
width: 40% ;
|
|
||||||
float: right ;
|
|
||||||
clear: right }
|
|
||||||
|
|
||||||
div.sidebar p.rubric {
|
|
||||||
font-family: sans-serif ;
|
|
||||||
font-size: medium }
|
|
||||||
|
|
||||||
div.system-messages {
|
|
||||||
margin: 5em }
|
|
||||||
|
|
||||||
div.system-messages h1 {
|
|
||||||
color: red }
|
|
||||||
|
|
||||||
div.system-message {
|
|
||||||
border: medium outset ;
|
|
||||||
padding: 1em }
|
|
||||||
|
|
||||||
div.system-message p.system-message-title {
|
|
||||||
color: red ;
|
|
||||||
font-weight: bold }
|
|
||||||
|
|
||||||
div.topic {
|
|
||||||
margin: 2em }
|
|
||||||
|
|
||||||
h1.section-subtitle, h2.section-subtitle, h3.section-subtitle,
|
|
||||||
h4.section-subtitle, h5.section-subtitle, h6.section-subtitle {
|
|
||||||
margin-top: 0.4em }
|
|
||||||
|
|
||||||
h1.title {
|
|
||||||
text-align: center }
|
|
||||||
|
|
||||||
h2.subtitle {
|
|
||||||
text-align: center }
|
|
||||||
|
|
||||||
hr.docutils {
|
|
||||||
width: 75% }
|
|
||||||
|
|
||||||
img.align-left {
|
|
||||||
clear: left }
|
|
||||||
|
|
||||||
img.align-right {
|
|
||||||
clear: right }
|
|
||||||
|
|
||||||
ol.simple, ul.simple {
|
|
||||||
margin-bottom: 1em }
|
|
||||||
|
|
||||||
ol.arabic {
|
|
||||||
list-style: decimal }
|
|
||||||
|
|
||||||
ol.loweralpha {
|
|
||||||
list-style: lower-alpha }
|
|
||||||
|
|
||||||
ol.upperalpha {
|
|
||||||
list-style: upper-alpha }
|
|
||||||
|
|
||||||
ol.lowerroman {
|
|
||||||
list-style: lower-roman }
|
|
||||||
|
|
||||||
ol.upperroman {
|
|
||||||
list-style: upper-roman }
|
|
||||||
|
|
||||||
p.attribution {
|
|
||||||
text-align: right ;
|
|
||||||
margin-left: 50% }
|
|
||||||
|
|
||||||
p.caption {
|
|
||||||
font-style: italic }
|
|
||||||
|
|
||||||
p.credits {
|
|
||||||
font-style: italic ;
|
|
||||||
font-size: smaller }
|
|
||||||
|
|
||||||
p.label {
|
|
||||||
white-space: nowrap }
|
|
||||||
|
|
||||||
p.rubric {
|
|
||||||
font-weight: bold ;
|
|
||||||
font-size: larger ;
|
|
||||||
color: maroon ;
|
|
||||||
text-align: center }
|
|
||||||
|
|
||||||
p.sidebar-title {
|
|
||||||
font-family: sans-serif ;
|
|
||||||
font-weight: bold ;
|
|
||||||
font-size: larger }
|
|
||||||
|
|
||||||
p.sidebar-subtitle {
|
|
||||||
font-family: sans-serif ;
|
|
||||||
font-weight: bold }
|
|
||||||
|
|
||||||
p.topic-title {
|
|
||||||
font-weight: bold }
|
|
||||||
|
|
||||||
pre.address {
|
|
||||||
margin-bottom: 0 ;
|
|
||||||
margin-top: 0 ;
|
|
||||||
font-family: serif ;
|
|
||||||
font-size: 100% }
|
|
||||||
|
|
||||||
pre.literal-block, pre.doctest-block {
|
|
||||||
margin-left: 2em ;
|
|
||||||
margin-right: 2em ;
|
|
||||||
background-color: #eeeeee }
|
|
||||||
|
|
||||||
span.classifier {
|
|
||||||
font-family: sans-serif ;
|
|
||||||
font-style: oblique }
|
|
||||||
|
|
||||||
span.classifier-delimiter {
|
|
||||||
font-family: sans-serif ;
|
|
||||||
font-weight: bold }
|
|
||||||
|
|
||||||
span.interpreted {
|
|
||||||
font-family: sans-serif }
|
|
||||||
|
|
||||||
span.option {
|
|
||||||
white-space: nowrap }
|
|
||||||
|
|
||||||
span.pre {
|
|
||||||
white-space: pre }
|
|
||||||
|
|
||||||
span.problematic {
|
|
||||||
color: red }
|
|
||||||
|
|
||||||
span.section-subtitle {
|
|
||||||
/* font-size relative to parent (h1..h6 element) */
|
|
||||||
font-size: 80% }
|
|
||||||
|
|
||||||
table.citation {
|
|
||||||
border-left: solid 1px gray;
|
|
||||||
margin-left: 1px }
|
|
||||||
|
|
||||||
table.docinfo {
|
|
||||||
margin: 2em 4em }
|
|
||||||
|
|
||||||
table.docutils {
|
|
||||||
margin-top: 0.5em ;
|
|
||||||
margin-bottom: 0.5em }
|
|
||||||
|
|
||||||
table.footnote {
|
|
||||||
border-left: solid 1px black;
|
|
||||||
margin-left: 1px }
|
|
||||||
|
|
||||||
table.docutils td, table.docutils th,
|
|
||||||
table.docinfo td, table.docinfo th {
|
|
||||||
padding-left: 0.5em ;
|
|
||||||
padding-right: 0.5em ;
|
|
||||||
vertical-align: top }
|
|
||||||
|
|
||||||
table.docutils th.field-name, table.docinfo th.docinfo-name {
|
|
||||||
font-weight: bold ;
|
|
||||||
text-align: left ;
|
|
||||||
white-space: nowrap ;
|
|
||||||
padding-left: 0 }
|
|
||||||
|
|
||||||
h1 tt.docutils, h2 tt.docutils, h3 tt.docutils,
|
|
||||||
h4 tt.docutils, h5 tt.docutils, h6 tt.docutils {
|
|
||||||
font-size: 100% }
|
|
||||||
|
|
||||||
tt.docutils {
|
|
||||||
background-color: #eeeeee }
|
|
||||||
|
|
||||||
ul.auto-toc {
|
|
||||||
list-style-type: none }
|
|
||||||
|
|
||||||
</style>
|
|
||||||
</head>
|
</head>
|
||||||
<body>
|
<body>
|
||||||
<div class="document" id="iterator-archetype">
|
<div class="document" id="iterator-archetype">
|
||||||
@ -303,12 +21,12 @@ ul.auto-toc {
|
|||||||
<tr><th class="docinfo-name">Author:</th>
|
<tr><th class="docinfo-name">Author:</th>
|
||||||
<td>David Abrahams, Jeremy Siek, Thomas Witt</td></tr>
|
<td>David Abrahams, Jeremy Siek, Thomas Witt</td></tr>
|
||||||
<tr><th class="docinfo-name">Contact:</th>
|
<tr><th class="docinfo-name">Contact:</th>
|
||||||
<td><a class="first reference" href="mailto:dave@boost-consulting.com">dave@boost-consulting.com</a>, <a class="reference" href="mailto:jsiek@osl.iu.edu">jsiek@osl.iu.edu</a>, <a class="last reference" href="mailto:witt@styleadvisor.com">witt@styleadvisor.com</a></td></tr>
|
<td><a class="first reference external" href="mailto:dave@boost-consulting.com">dave@boost-consulting.com</a>, <a class="reference external" href="mailto:jsiek@osl.iu.edu">jsiek@osl.iu.edu</a>, <a class="last reference external" href="mailto:witt@styleadvisor.com">witt@styleadvisor.com</a></td></tr>
|
||||||
<tr><th class="docinfo-name">Organization:</th>
|
<tr><th class="docinfo-name">Organization:</th>
|
||||||
<td><a class="first reference" href="http://www.boost-consulting.com">Boost Consulting</a>, Indiana University <a class="reference" href="http://www.osl.iu.edu">Open Systems
|
<td><a class="first reference external" href="http://www.boost-consulting.com">Boost Consulting</a>, Indiana University <a class="reference external" href="http://www.osl.iu.edu">Open Systems
|
||||||
Lab</a>, <a class="last reference" href="http://www.styleadvisor.com">Zephyr Associates, Inc.</a></td></tr>
|
Lab</a>, <a class="last reference external" href="http://www.styleadvisor.com">Zephyr Associates, Inc.</a></td></tr>
|
||||||
<tr><th class="docinfo-name">Date:</th>
|
<tr><th class="docinfo-name">Date:</th>
|
||||||
<td>2004-11-01</td></tr>
|
<td>2006-09-11</td></tr>
|
||||||
<tr><th class="docinfo-name">Copyright:</th>
|
<tr><th class="docinfo-name">Copyright:</th>
|
||||||
<td>Copyright David Abrahams, Jeremy Siek, and Thomas Witt 2004.</td></tr>
|
<td>Copyright David Abrahams, Jeremy Siek, and Thomas Witt 2004.</td></tr>
|
||||||
</tbody>
|
</tbody>
|
||||||
@ -324,27 +42,27 @@ Lab</a>, <a class="last reference" href="http://www.styleadvisor.com">Zephyr Ass
|
|||||||
one of the iterator access concepts and one of the iterator traversal concepts.
|
one of the iterator access concepts and one of the iterator traversal concepts.
|
||||||
This is used for doing a compile-time check to see if a the type requirements
|
This is used for doing a compile-time check to see if a the type requirements
|
||||||
of a template are really enough to cover the implementation of the template.
|
of a template are really enough to cover the implementation of the template.
|
||||||
For further information see the documentation for the <a class="reference" href="../../concept_check/index.html"><tt class="docutils literal"><span class="pre">boost::concept_check</span></tt></a> library.</td>
|
For further information see the documentation for the <a class="reference external" href="../../concept_check/index.html"><tt class="docutils literal"><span class="pre">boost::concept_check</span></tt></a> library.</td>
|
||||||
</tr>
|
</tr>
|
||||||
</tbody>
|
</tbody>
|
||||||
</table>
|
</table>
|
||||||
<div class="contents topic">
|
<div class="contents topic" id="table-of-contents">
|
||||||
<p class="topic-title first"><a id="table-of-contents" name="table-of-contents">Table of Contents</a></p>
|
<p class="topic-title first">Table of Contents</p>
|
||||||
<ul class="simple">
|
<ul class="simple">
|
||||||
<li><a class="reference" href="#reference" id="id1" name="id1">Reference</a><ul>
|
<li><a class="reference internal" href="#reference" id="id1">Reference</a><ul>
|
||||||
<li><a class="reference" href="#iterator-archetype-synopsis" id="id2" name="id2"><tt class="docutils literal"><span class="pre">iterator_archetype</span></tt> Synopsis</a></li>
|
<li><a class="reference internal" href="#iterator-archetype-synopsis" id="id2"><tt class="docutils literal"><span class="pre">iterator_archetype</span></tt> Synopsis</a></li>
|
||||||
<li><a class="reference" href="#access-category-tags" id="id3" name="id3"><tt class="docutils literal"><span class="pre">Access</span> <span class="pre">Category</span> <span class="pre">Tags</span></tt></a></li>
|
<li><a class="reference internal" href="#access-category-tags" id="id3"><tt class="docutils literal"><span class="pre">Access</span> <span class="pre">Category</span> <span class="pre">Tags</span></tt></a></li>
|
||||||
<li><a class="reference" href="#iterator-archetype-requirements" id="id4" name="id4"><tt class="docutils literal"><span class="pre">iterator_archetype</span></tt> Requirements</a></li>
|
<li><a class="reference internal" href="#iterator-archetype-requirements" id="id4"><tt class="docutils literal"><span class="pre">iterator_archetype</span></tt> Requirements</a></li>
|
||||||
<li><a class="reference" href="#iterator-archetype-models" id="id5" name="id5"><tt class="docutils literal"><span class="pre">iterator_archetype</span></tt> Models</a></li>
|
<li><a class="reference internal" href="#iterator-archetype-models" id="id5"><tt class="docutils literal"><span class="pre">iterator_archetype</span></tt> Models</a></li>
|
||||||
<li><a class="reference" href="#traits" id="id6" name="id6"><tt class="docutils literal"><span class="pre">Traits</span></tt></a></li>
|
<li><a class="reference internal" href="#traits" id="id6"><tt class="docutils literal"><span class="pre">Traits</span></tt></a></li>
|
||||||
</ul>
|
</ul>
|
||||||
</li>
|
</li>
|
||||||
</ul>
|
</ul>
|
||||||
</div>
|
</div>
|
||||||
<div class="section">
|
<div class="section" id="reference">
|
||||||
<h1><a class="toc-backref" href="#id1" id="reference" name="reference">Reference</a></h1>
|
<h1><a class="toc-backref" href="#id1">Reference</a></h1>
|
||||||
<div class="section">
|
<div class="section" id="iterator-archetype-synopsis">
|
||||||
<h2><a class="toc-backref" href="#id2" id="iterator-archetype-synopsis" name="iterator-archetype-synopsis"><tt class="docutils literal"><span class="pre">iterator_archetype</span></tt> Synopsis</a></h2>
|
<h2><a class="toc-backref" href="#id2"><tt class="docutils literal"><span class="pre">iterator_archetype</span></tt> Synopsis</a></h2>
|
||||||
<pre class="literal-block">
|
<pre class="literal-block">
|
||||||
namespace iterator_archetypes
|
namespace iterator_archetypes
|
||||||
{
|
{
|
||||||
@ -373,8 +91,8 @@ class iterator_archetype
|
|||||||
};
|
};
|
||||||
</pre>
|
</pre>
|
||||||
</div>
|
</div>
|
||||||
<div class="section">
|
<div class="section" id="access-category-tags">
|
||||||
<h2><a class="toc-backref" href="#id3" id="access-category-tags" name="access-category-tags"><tt class="docutils literal"><span class="pre">Access</span> <span class="pre">Category</span> <span class="pre">Tags</span></tt></a></h2>
|
<h2><a class="toc-backref" href="#id3"><tt class="docutils literal"><span class="pre">Access</span> <span class="pre">Category</span> <span class="pre">Tags</span></tt></a></h2>
|
||||||
<p>The access category types provided correspond to the following
|
<p>The access category types provided correspond to the following
|
||||||
standard iterator access concept combinations:</p>
|
standard iterator access concept combinations:</p>
|
||||||
<pre class="literal-block">
|
<pre class="literal-block">
|
||||||
@ -399,23 +117,23 @@ writeable_lvalue_iterator_t :=
|
|||||||
Readable Iterator & Writeable Iterator & Swappable Iterator & Lvalue Iterator
|
Readable Iterator & Writeable Iterator & Swappable Iterator & Lvalue Iterator
|
||||||
</pre>
|
</pre>
|
||||||
</div>
|
</div>
|
||||||
<div class="section">
|
<div class="section" id="iterator-archetype-requirements">
|
||||||
<h2><a class="toc-backref" href="#id4" id="iterator-archetype-requirements" name="iterator-archetype-requirements"><tt class="docutils literal"><span class="pre">iterator_archetype</span></tt> Requirements</a></h2>
|
<h2><a class="toc-backref" href="#id4"><tt class="docutils literal"><span class="pre">iterator_archetype</span></tt> Requirements</a></h2>
|
||||||
<p>The <tt class="docutils literal"><span class="pre">AccessCategory</span></tt> argument must be one of the predefined access
|
<p>The <tt class="docutils literal"><span class="pre">AccessCategory</span></tt> argument must be one of the predefined access
|
||||||
category tags. The <tt class="docutils literal"><span class="pre">TraversalCategory</span></tt> must be one of the standard
|
category tags. The <tt class="docutils literal"><span class="pre">TraversalCategory</span></tt> must be one of the standard
|
||||||
traversal tags. The <tt class="docutils literal"><span class="pre">Value</span></tt> type must satisfy the requirements of
|
traversal tags. The <tt class="docutils literal"><span class="pre">Value</span></tt> type must satisfy the requirements of
|
||||||
the iterator concept specified by <tt class="docutils literal"><span class="pre">AccessCategory</span></tt> and
|
the iterator concept specified by <tt class="docutils literal"><span class="pre">AccessCategory</span></tt> and
|
||||||
<tt class="docutils literal"><span class="pre">TraversalCategory</span></tt> as implied by the nested traits types.</p>
|
<tt class="docutils literal"><span class="pre">TraversalCategory</span></tt> as implied by the nested traits types.</p>
|
||||||
</div>
|
</div>
|
||||||
<div class="section">
|
<div class="section" id="iterator-archetype-models">
|
||||||
<h2><a class="toc-backref" href="#id5" id="iterator-archetype-models" name="iterator-archetype-models"><tt class="docutils literal"><span class="pre">iterator_archetype</span></tt> Models</a></h2>
|
<h2><a class="toc-backref" href="#id5"><tt class="docutils literal"><span class="pre">iterator_archetype</span></tt> Models</a></h2>
|
||||||
<p><tt class="docutils literal"><span class="pre">iterator_archetype</span></tt> models the iterator concepts specified by the
|
<p><tt class="docutils literal"><span class="pre">iterator_archetype</span></tt> models the iterator concepts specified by the
|
||||||
<tt class="docutils literal"><span class="pre">AccessCategory</span></tt> and <tt class="docutils literal"><span class="pre">TraversalCategory</span></tt>
|
<tt class="docutils literal"><span class="pre">AccessCategory</span></tt> and <tt class="docutils literal"><span class="pre">TraversalCategory</span></tt>
|
||||||
arguments. <tt class="docutils literal"><span class="pre">iterator_archetype</span></tt> does not model any other access
|
arguments. <tt class="docutils literal"><span class="pre">iterator_archetype</span></tt> does not model any other access
|
||||||
concepts or any more derived traversal concepts.</p>
|
concepts or any more derived traversal concepts.</p>
|
||||||
</div>
|
</div>
|
||||||
<div class="section">
|
<div class="section" id="traits">
|
||||||
<h2><a class="toc-backref" href="#id6" id="traits" name="traits"><tt class="docutils literal"><span class="pre">Traits</span></tt></a></h2>
|
<h2><a class="toc-backref" href="#id6"><tt class="docutils literal"><span class="pre">Traits</span></tt></a></h2>
|
||||||
<p>The nested trait types are defined as follows:</p>
|
<p>The nested trait types are defined as follows:</p>
|
||||||
<pre class="literal-block">
|
<pre class="literal-block">
|
||||||
if (AccessCategory == readable_iterator_t)
|
if (AccessCategory == readable_iterator_t)
|
||||||
@ -495,6 +213,12 @@ iterator_category :=
|
|||||||
</pre>
|
</pre>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="footer">
|
||||||
|
<hr class="footer" />
|
||||||
|
<a class="reference external" href="iterator_archetypes.rst">View document source</a>.
|
||||||
|
Generated by <a class="reference external" href="http://docutils.sourceforge.net/">Docutils</a> from <a class="reference external" href="http://docutils.sourceforge.net/rst.html">reStructuredText</a> source.
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
</body>
|
</body>
|
||||||
</html>
|
</html>
|
||||||
|
0
doc/iterator_archetypes.pdf
Executable file → Normal file
0
doc/iterator_archetypes.pdf
Executable file → Normal file
0
doc/iterator_archetypes.rst
Executable file → Normal file
0
doc/iterator_archetypes.rst
Executable file → Normal file
@ -3,295 +3,13 @@
|
|||||||
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
|
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
|
||||||
<head>
|
<head>
|
||||||
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
|
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
|
||||||
<meta name="generator" content="Docutils 0.4: http://docutils.sourceforge.net/" />
|
<meta name="generator" content="Docutils 0.5: http://docutils.sourceforge.net/" />
|
||||||
<title>Iterator Concepts</title>
|
<title>Iterator Concepts</title>
|
||||||
<meta name="author" content="David Abrahams, Jeremy Siek, Thomas Witt" />
|
<meta name="author" content="David Abrahams, Jeremy Siek, Thomas Witt" />
|
||||||
<meta name="organization" content="Boost Consulting, Indiana University Open Systems Lab, Zephyr Associates, Inc." />
|
<meta name="organization" content="Boost Consulting, Indiana University Open Systems Lab, Zephyr Associates, Inc." />
|
||||||
<meta name="date" content="2004-11-01" />
|
<meta name="date" content="2006-09-11" />
|
||||||
<meta name="copyright" content="Copyright David Abrahams, Jeremy Siek, and Thomas Witt 2004." />
|
<meta name="copyright" content="Copyright David Abrahams, Jeremy Siek, and Thomas Witt 2004." />
|
||||||
<style type="text/css">
|
<link rel="stylesheet" href="../../../rst.css" type="text/css" />
|
||||||
|
|
||||||
/*
|
|
||||||
:Author: David Goodger
|
|
||||||
:Contact: goodger@users.sourceforge.net
|
|
||||||
:Date: $Date$
|
|
||||||
:Revision: $Revision$
|
|
||||||
:Copyright: This stylesheet has been placed in the public domain.
|
|
||||||
|
|
||||||
Default cascading style sheet for the HTML output of Docutils.
|
|
||||||
|
|
||||||
See http://docutils.sf.net/docs/howto/html-stylesheets.html for how to
|
|
||||||
customize this style sheet.
|
|
||||||
*/
|
|
||||||
|
|
||||||
/* used to remove borders from tables and images */
|
|
||||||
.borderless, table.borderless td, table.borderless th {
|
|
||||||
border: 0 }
|
|
||||||
|
|
||||||
table.borderless td, table.borderless th {
|
|
||||||
/* Override padding for "table.docutils td" with "! important".
|
|
||||||
The right padding separates the table cells. */
|
|
||||||
padding: 0 0.5em 0 0 ! important }
|
|
||||||
|
|
||||||
.first {
|
|
||||||
/* Override more specific margin styles with "! important". */
|
|
||||||
margin-top: 0 ! important }
|
|
||||||
|
|
||||||
.last, .with-subtitle {
|
|
||||||
margin-bottom: 0 ! important }
|
|
||||||
|
|
||||||
.hidden {
|
|
||||||
display: none }
|
|
||||||
|
|
||||||
a.toc-backref {
|
|
||||||
text-decoration: none ;
|
|
||||||
color: black }
|
|
||||||
|
|
||||||
blockquote.epigraph {
|
|
||||||
margin: 2em 5em ; }
|
|
||||||
|
|
||||||
dl.docutils dd {
|
|
||||||
margin-bottom: 0.5em }
|
|
||||||
|
|
||||||
/* Uncomment (and remove this text!) to get bold-faced definition list terms
|
|
||||||
dl.docutils dt {
|
|
||||||
font-weight: bold }
|
|
||||||
*/
|
|
||||||
|
|
||||||
div.abstract {
|
|
||||||
margin: 2em 5em }
|
|
||||||
|
|
||||||
div.abstract p.topic-title {
|
|
||||||
font-weight: bold ;
|
|
||||||
text-align: center }
|
|
||||||
|
|
||||||
div.admonition, div.attention, div.caution, div.danger, div.error,
|
|
||||||
div.hint, div.important, div.note, div.tip, div.warning {
|
|
||||||
margin: 2em ;
|
|
||||||
border: medium outset ;
|
|
||||||
padding: 1em }
|
|
||||||
|
|
||||||
div.admonition p.admonition-title, div.hint p.admonition-title,
|
|
||||||
div.important p.admonition-title, div.note p.admonition-title,
|
|
||||||
div.tip p.admonition-title {
|
|
||||||
font-weight: bold ;
|
|
||||||
font-family: sans-serif }
|
|
||||||
|
|
||||||
div.attention p.admonition-title, div.caution p.admonition-title,
|
|
||||||
div.danger p.admonition-title, div.error p.admonition-title,
|
|
||||||
div.warning p.admonition-title {
|
|
||||||
color: red ;
|
|
||||||
font-weight: bold ;
|
|
||||||
font-family: sans-serif }
|
|
||||||
|
|
||||||
/* Uncomment (and remove this text!) to get reduced vertical space in
|
|
||||||
compound paragraphs.
|
|
||||||
div.compound .compound-first, div.compound .compound-middle {
|
|
||||||
margin-bottom: 0.5em }
|
|
||||||
|
|
||||||
div.compound .compound-last, div.compound .compound-middle {
|
|
||||||
margin-top: 0.5em }
|
|
||||||
*/
|
|
||||||
|
|
||||||
div.dedication {
|
|
||||||
margin: 2em 5em ;
|
|
||||||
text-align: center ;
|
|
||||||
font-style: italic }
|
|
||||||
|
|
||||||
div.dedication p.topic-title {
|
|
||||||
font-weight: bold ;
|
|
||||||
font-style: normal }
|
|
||||||
|
|
||||||
div.figure {
|
|
||||||
margin-left: 2em ;
|
|
||||||
margin-right: 2em }
|
|
||||||
|
|
||||||
div.footer, div.header {
|
|
||||||
clear: both;
|
|
||||||
font-size: smaller }
|
|
||||||
|
|
||||||
div.line-block {
|
|
||||||
display: block ;
|
|
||||||
margin-top: 1em ;
|
|
||||||
margin-bottom: 1em }
|
|
||||||
|
|
||||||
div.line-block div.line-block {
|
|
||||||
margin-top: 0 ;
|
|
||||||
margin-bottom: 0 ;
|
|
||||||
margin-left: 1.5em }
|
|
||||||
|
|
||||||
div.sidebar {
|
|
||||||
margin-left: 1em ;
|
|
||||||
border: medium outset ;
|
|
||||||
padding: 1em ;
|
|
||||||
background-color: #ffffee ;
|
|
||||||
width: 40% ;
|
|
||||||
float: right ;
|
|
||||||
clear: right }
|
|
||||||
|
|
||||||
div.sidebar p.rubric {
|
|
||||||
font-family: sans-serif ;
|
|
||||||
font-size: medium }
|
|
||||||
|
|
||||||
div.system-messages {
|
|
||||||
margin: 5em }
|
|
||||||
|
|
||||||
div.system-messages h1 {
|
|
||||||
color: red }
|
|
||||||
|
|
||||||
div.system-message {
|
|
||||||
border: medium outset ;
|
|
||||||
padding: 1em }
|
|
||||||
|
|
||||||
div.system-message p.system-message-title {
|
|
||||||
color: red ;
|
|
||||||
font-weight: bold }
|
|
||||||
|
|
||||||
div.topic {
|
|
||||||
margin: 2em }
|
|
||||||
|
|
||||||
h1.section-subtitle, h2.section-subtitle, h3.section-subtitle,
|
|
||||||
h4.section-subtitle, h5.section-subtitle, h6.section-subtitle {
|
|
||||||
margin-top: 0.4em }
|
|
||||||
|
|
||||||
h1.title {
|
|
||||||
text-align: center }
|
|
||||||
|
|
||||||
h2.subtitle {
|
|
||||||
text-align: center }
|
|
||||||
|
|
||||||
hr.docutils {
|
|
||||||
width: 75% }
|
|
||||||
|
|
||||||
img.align-left {
|
|
||||||
clear: left }
|
|
||||||
|
|
||||||
img.align-right {
|
|
||||||
clear: right }
|
|
||||||
|
|
||||||
ol.simple, ul.simple {
|
|
||||||
margin-bottom: 1em }
|
|
||||||
|
|
||||||
ol.arabic {
|
|
||||||
list-style: decimal }
|
|
||||||
|
|
||||||
ol.loweralpha {
|
|
||||||
list-style: lower-alpha }
|
|
||||||
|
|
||||||
ol.upperalpha {
|
|
||||||
list-style: upper-alpha }
|
|
||||||
|
|
||||||
ol.lowerroman {
|
|
||||||
list-style: lower-roman }
|
|
||||||
|
|
||||||
ol.upperroman {
|
|
||||||
list-style: upper-roman }
|
|
||||||
|
|
||||||
p.attribution {
|
|
||||||
text-align: right ;
|
|
||||||
margin-left: 50% }
|
|
||||||
|
|
||||||
p.caption {
|
|
||||||
font-style: italic }
|
|
||||||
|
|
||||||
p.credits {
|
|
||||||
font-style: italic ;
|
|
||||||
font-size: smaller }
|
|
||||||
|
|
||||||
p.label {
|
|
||||||
white-space: nowrap }
|
|
||||||
|
|
||||||
p.rubric {
|
|
||||||
font-weight: bold ;
|
|
||||||
font-size: larger ;
|
|
||||||
color: maroon ;
|
|
||||||
text-align: center }
|
|
||||||
|
|
||||||
p.sidebar-title {
|
|
||||||
font-family: sans-serif ;
|
|
||||||
font-weight: bold ;
|
|
||||||
font-size: larger }
|
|
||||||
|
|
||||||
p.sidebar-subtitle {
|
|
||||||
font-family: sans-serif ;
|
|
||||||
font-weight: bold }
|
|
||||||
|
|
||||||
p.topic-title {
|
|
||||||
font-weight: bold }
|
|
||||||
|
|
||||||
pre.address {
|
|
||||||
margin-bottom: 0 ;
|
|
||||||
margin-top: 0 ;
|
|
||||||
font-family: serif ;
|
|
||||||
font-size: 100% }
|
|
||||||
|
|
||||||
pre.literal-block, pre.doctest-block {
|
|
||||||
margin-left: 2em ;
|
|
||||||
margin-right: 2em ;
|
|
||||||
background-color: #eeeeee }
|
|
||||||
|
|
||||||
span.classifier {
|
|
||||||
font-family: sans-serif ;
|
|
||||||
font-style: oblique }
|
|
||||||
|
|
||||||
span.classifier-delimiter {
|
|
||||||
font-family: sans-serif ;
|
|
||||||
font-weight: bold }
|
|
||||||
|
|
||||||
span.interpreted {
|
|
||||||
font-family: sans-serif }
|
|
||||||
|
|
||||||
span.option {
|
|
||||||
white-space: nowrap }
|
|
||||||
|
|
||||||
span.pre {
|
|
||||||
white-space: pre }
|
|
||||||
|
|
||||||
span.problematic {
|
|
||||||
color: red }
|
|
||||||
|
|
||||||
span.section-subtitle {
|
|
||||||
/* font-size relative to parent (h1..h6 element) */
|
|
||||||
font-size: 80% }
|
|
||||||
|
|
||||||
table.citation {
|
|
||||||
border-left: solid 1px gray;
|
|
||||||
margin-left: 1px }
|
|
||||||
|
|
||||||
table.docinfo {
|
|
||||||
margin: 2em 4em }
|
|
||||||
|
|
||||||
table.docutils {
|
|
||||||
margin-top: 0.5em ;
|
|
||||||
margin-bottom: 0.5em }
|
|
||||||
|
|
||||||
table.footnote {
|
|
||||||
border-left: solid 1px black;
|
|
||||||
margin-left: 1px }
|
|
||||||
|
|
||||||
table.docutils td, table.docutils th,
|
|
||||||
table.docinfo td, table.docinfo th {
|
|
||||||
padding-left: 0.5em ;
|
|
||||||
padding-right: 0.5em ;
|
|
||||||
vertical-align: top }
|
|
||||||
|
|
||||||
table.docutils th.field-name, table.docinfo th.docinfo-name {
|
|
||||||
font-weight: bold ;
|
|
||||||
text-align: left ;
|
|
||||||
white-space: nowrap ;
|
|
||||||
padding-left: 0 }
|
|
||||||
|
|
||||||
h1 tt.docutils, h2 tt.docutils, h3 tt.docutils,
|
|
||||||
h4 tt.docutils, h5 tt.docutils, h6 tt.docutils {
|
|
||||||
font-size: 100% }
|
|
||||||
|
|
||||||
tt.docutils {
|
|
||||||
background-color: #eeeeee }
|
|
||||||
|
|
||||||
ul.auto-toc {
|
|
||||||
list-style-type: none }
|
|
||||||
|
|
||||||
</style>
|
|
||||||
</head>
|
</head>
|
||||||
<body>
|
<body>
|
||||||
<div class="document" id="iterator-concepts">
|
<div class="document" id="iterator-concepts">
|
||||||
@ -303,12 +21,12 @@ ul.auto-toc {
|
|||||||
<tr><th class="docinfo-name">Author:</th>
|
<tr><th class="docinfo-name">Author:</th>
|
||||||
<td>David Abrahams, Jeremy Siek, Thomas Witt</td></tr>
|
<td>David Abrahams, Jeremy Siek, Thomas Witt</td></tr>
|
||||||
<tr><th class="docinfo-name">Contact:</th>
|
<tr><th class="docinfo-name">Contact:</th>
|
||||||
<td><a class="first reference" href="mailto:dave@boost-consulting.com">dave@boost-consulting.com</a>, <a class="reference" href="mailto:jsiek@osl.iu.edu">jsiek@osl.iu.edu</a>, <a class="last reference" href="mailto:witt@styleadvisor.com">witt@styleadvisor.com</a></td></tr>
|
<td><a class="first reference external" href="mailto:dave@boost-consulting.com">dave@boost-consulting.com</a>, <a class="reference external" href="mailto:jsiek@osl.iu.edu">jsiek@osl.iu.edu</a>, <a class="last reference external" href="mailto:witt@styleadvisor.com">witt@styleadvisor.com</a></td></tr>
|
||||||
<tr><th class="docinfo-name">Organization:</th>
|
<tr><th class="docinfo-name">Organization:</th>
|
||||||
<td><a class="first reference" href="http://www.boost-consulting.com">Boost Consulting</a>, Indiana University <a class="reference" href="http://www.osl.iu.edu">Open Systems
|
<td><a class="first reference external" href="http://www.boost-consulting.com">Boost Consulting</a>, Indiana University <a class="reference external" href="http://www.osl.iu.edu">Open Systems
|
||||||
Lab</a>, <a class="last reference" href="http://www.styleadvisor.com">Zephyr Associates, Inc.</a></td></tr>
|
Lab</a>, <a class="last reference external" href="http://www.styleadvisor.com">Zephyr Associates, Inc.</a></td></tr>
|
||||||
<tr><th class="docinfo-name">Date:</th>
|
<tr><th class="docinfo-name">Date:</th>
|
||||||
<td>2004-11-01</td></tr>
|
<td>2006-09-11</td></tr>
|
||||||
<tr><th class="docinfo-name">Copyright:</th>
|
<tr><th class="docinfo-name">Copyright:</th>
|
||||||
<td>Copyright David Abrahams, Jeremy Siek, and Thomas Witt 2004.</td></tr>
|
<td>Copyright David Abrahams, Jeremy Siek, and Thomas Witt 2004.</td></tr>
|
||||||
</tbody>
|
</tbody>
|
||||||
@ -328,30 +46,30 @@ the template.</td>
|
|||||||
</tbody>
|
</tbody>
|
||||||
</table>
|
</table>
|
||||||
<p>For an introduction to using concept checking classes, see
|
<p>For an introduction to using concept checking classes, see
|
||||||
the documentation for the <a class="reference" href="../../concept_check/index.html"><tt class="docutils literal"><span class="pre">boost::concept_check</span></tt></a> library.</p>
|
the documentation for the <a class="reference external" href="../../concept_check/index.html"><tt class="docutils literal"><span class="pre">boost::concept_check</span></tt></a> library.</p>
|
||||||
<div class="section">
|
<div class="section" id="reference">
|
||||||
<h1><a id="reference" name="reference">Reference</a></h1>
|
<h1>Reference</h1>
|
||||||
<div class="section">
|
<div class="section" id="iterator-access-concepts">
|
||||||
<h2><a id="iterator-access-concepts" name="iterator-access-concepts">Iterator Access Concepts</a></h2>
|
<h2>Iterator Access Concepts</h2>
|
||||||
<ul class="simple">
|
<ul class="simple">
|
||||||
<li><a class="reference" href="ReadableIterator.html"><em>Readable Iterator</em></a></li>
|
<li><a class="reference external" href="ReadableIterator.html"><em>Readable Iterator</em></a></li>
|
||||||
<li><a class="reference" href="WritableIterator.html"><em>Writable Iterator</em></a></li>
|
<li><a class="reference external" href="WritableIterator.html"><em>Writable Iterator</em></a></li>
|
||||||
<li><a class="reference" href="SwappableIterator.html"><em>Swappable Iterator</em></a></li>
|
<li><a class="reference external" href="SwappableIterator.html"><em>Swappable Iterator</em></a></li>
|
||||||
<li><a class="reference" href="LvalueIterator.html"><em>Lvalue Iterator</em></a></li>
|
<li><a class="reference external" href="LvalueIterator.html"><em>Lvalue Iterator</em></a></li>
|
||||||
</ul>
|
</ul>
|
||||||
</div>
|
</div>
|
||||||
<div class="section">
|
<div class="section" id="iterator-traversal-concepts">
|
||||||
<h2><a id="iterator-traversal-concepts" name="iterator-traversal-concepts">Iterator Traversal Concepts</a></h2>
|
<h2>Iterator Traversal Concepts</h2>
|
||||||
<ul class="simple">
|
<ul class="simple">
|
||||||
<li><a class="reference" href="IncrementableIterator.html"><em>Incrementable Iterator</em></a></li>
|
<li><a class="reference external" href="IncrementableIterator.html"><em>Incrementable Iterator</em></a></li>
|
||||||
<li><a class="reference" href="SinglePassIterator.html"><em>Single Pass Iterator</em></a></li>
|
<li><a class="reference external" href="SinglePassIterator.html"><em>Single Pass Iterator</em></a></li>
|
||||||
<li><a class="reference" href="ForwardTraversal.html"><em>Forward Traversal</em></a></li>
|
<li><a class="reference external" href="ForwardTraversal.html"><em>Forward Traversal</em></a></li>
|
||||||
<li><a class="reference" href="BidirectionalTraversal.html"><em>Bidirectional Traversal</em></a></li>
|
<li><a class="reference external" href="BidirectionalTraversal.html"><em>Bidirectional Traversal</em></a></li>
|
||||||
<li><a class="reference" href="RandomAccessTraversal.html"><em>Random Access Traversal</em></a></li>
|
<li><a class="reference external" href="RandomAccessTraversal.html"><em>Random Access Traversal</em></a></li>
|
||||||
</ul>
|
</ul>
|
||||||
</div>
|
</div>
|
||||||
<div class="section">
|
<div class="section" id="iterator-concepts-hpp-synopsis">
|
||||||
<h2><a id="iterator-concepts-hpp-synopsis" name="iterator-concepts-hpp-synopsis"><tt class="docutils literal"><span class="pre">iterator_concepts.hpp</span></tt> Synopsis</a></h2>
|
<h2><tt class="docutils literal"><span class="pre">iterator_concepts.hpp</span></tt> Synopsis</h2>
|
||||||
<pre class="literal-block">
|
<pre class="literal-block">
|
||||||
namespace boost_concepts {
|
namespace boost_concepts {
|
||||||
|
|
||||||
@ -398,6 +116,12 @@ namespace boost_concepts {
|
|||||||
</pre>
|
</pre>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="footer">
|
||||||
|
<hr class="footer" />
|
||||||
|
<a class="reference external" href="iterator_concepts.rst">View document source</a>.
|
||||||
|
Generated by <a class="reference external" href="http://docutils.sourceforge.net/">Docutils</a> from <a class="reference external" href="http://docutils.sourceforge.net/rst.html">reStructuredText</a> source.
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
</body>
|
</body>
|
||||||
</html>
|
</html>
|
||||||
|
0
doc/iterator_concepts.pdf
Executable file → Normal file
0
doc/iterator_concepts.pdf
Executable file → Normal file
0
doc/iterator_concepts.rst
Executable file → Normal file
0
doc/iterator_concepts.rst
Executable file → Normal file
@ -3,295 +3,13 @@
|
|||||||
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
|
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
|
||||||
<head>
|
<head>
|
||||||
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
|
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
|
||||||
<meta name="generator" content="Docutils 0.4: http://docutils.sourceforge.net/" />
|
<meta name="generator" content="Docutils 0.5: http://docutils.sourceforge.net/" />
|
||||||
<title>Iterator Facade</title>
|
<title>Iterator Facade</title>
|
||||||
<meta name="author" content="David Abrahams, Jeremy Siek, Thomas Witt" />
|
<meta name="author" content="David Abrahams, Jeremy Siek, Thomas Witt" />
|
||||||
<meta name="organization" content="Boost Consulting, Indiana University Open Systems Lab, University of Hanover Institute for Transport Railway Operation and Construction" />
|
<meta name="organization" content="Boost Consulting, Indiana University Open Systems Lab, University of Hanover Institute for Transport Railway Operation and Construction" />
|
||||||
<meta name="date" content="2004-11-01" />
|
<meta name="date" content="2006-09-11" />
|
||||||
<meta name="copyright" content="Copyright David Abrahams, Jeremy Siek, and Thomas Witt 2003." />
|
<meta name="copyright" content="Copyright David Abrahams, Jeremy Siek, and Thomas Witt 2003." />
|
||||||
<style type="text/css">
|
<link rel="stylesheet" href="../../../rst.css" type="text/css" />
|
||||||
|
|
||||||
/*
|
|
||||||
:Author: David Goodger
|
|
||||||
:Contact: goodger@users.sourceforge.net
|
|
||||||
:Date: $Date$
|
|
||||||
:Revision: $Revision$
|
|
||||||
:Copyright: This stylesheet has been placed in the public domain.
|
|
||||||
|
|
||||||
Default cascading style sheet for the HTML output of Docutils.
|
|
||||||
|
|
||||||
See http://docutils.sf.net/docs/howto/html-stylesheets.html for how to
|
|
||||||
customize this style sheet.
|
|
||||||
*/
|
|
||||||
|
|
||||||
/* used to remove borders from tables and images */
|
|
||||||
.borderless, table.borderless td, table.borderless th {
|
|
||||||
border: 0 }
|
|
||||||
|
|
||||||
table.borderless td, table.borderless th {
|
|
||||||
/* Override padding for "table.docutils td" with "! important".
|
|
||||||
The right padding separates the table cells. */
|
|
||||||
padding: 0 0.5em 0 0 ! important }
|
|
||||||
|
|
||||||
.first {
|
|
||||||
/* Override more specific margin styles with "! important". */
|
|
||||||
margin-top: 0 ! important }
|
|
||||||
|
|
||||||
.last, .with-subtitle {
|
|
||||||
margin-bottom: 0 ! important }
|
|
||||||
|
|
||||||
.hidden {
|
|
||||||
display: none }
|
|
||||||
|
|
||||||
a.toc-backref {
|
|
||||||
text-decoration: none ;
|
|
||||||
color: black }
|
|
||||||
|
|
||||||
blockquote.epigraph {
|
|
||||||
margin: 2em 5em ; }
|
|
||||||
|
|
||||||
dl.docutils dd {
|
|
||||||
margin-bottom: 0.5em }
|
|
||||||
|
|
||||||
/* Uncomment (and remove this text!) to get bold-faced definition list terms
|
|
||||||
dl.docutils dt {
|
|
||||||
font-weight: bold }
|
|
||||||
*/
|
|
||||||
|
|
||||||
div.abstract {
|
|
||||||
margin: 2em 5em }
|
|
||||||
|
|
||||||
div.abstract p.topic-title {
|
|
||||||
font-weight: bold ;
|
|
||||||
text-align: center }
|
|
||||||
|
|
||||||
div.admonition, div.attention, div.caution, div.danger, div.error,
|
|
||||||
div.hint, div.important, div.note, div.tip, div.warning {
|
|
||||||
margin: 2em ;
|
|
||||||
border: medium outset ;
|
|
||||||
padding: 1em }
|
|
||||||
|
|
||||||
div.admonition p.admonition-title, div.hint p.admonition-title,
|
|
||||||
div.important p.admonition-title, div.note p.admonition-title,
|
|
||||||
div.tip p.admonition-title {
|
|
||||||
font-weight: bold ;
|
|
||||||
font-family: sans-serif }
|
|
||||||
|
|
||||||
div.attention p.admonition-title, div.caution p.admonition-title,
|
|
||||||
div.danger p.admonition-title, div.error p.admonition-title,
|
|
||||||
div.warning p.admonition-title {
|
|
||||||
color: red ;
|
|
||||||
font-weight: bold ;
|
|
||||||
font-family: sans-serif }
|
|
||||||
|
|
||||||
/* Uncomment (and remove this text!) to get reduced vertical space in
|
|
||||||
compound paragraphs.
|
|
||||||
div.compound .compound-first, div.compound .compound-middle {
|
|
||||||
margin-bottom: 0.5em }
|
|
||||||
|
|
||||||
div.compound .compound-last, div.compound .compound-middle {
|
|
||||||
margin-top: 0.5em }
|
|
||||||
*/
|
|
||||||
|
|
||||||
div.dedication {
|
|
||||||
margin: 2em 5em ;
|
|
||||||
text-align: center ;
|
|
||||||
font-style: italic }
|
|
||||||
|
|
||||||
div.dedication p.topic-title {
|
|
||||||
font-weight: bold ;
|
|
||||||
font-style: normal }
|
|
||||||
|
|
||||||
div.figure {
|
|
||||||
margin-left: 2em ;
|
|
||||||
margin-right: 2em }
|
|
||||||
|
|
||||||
div.footer, div.header {
|
|
||||||
clear: both;
|
|
||||||
font-size: smaller }
|
|
||||||
|
|
||||||
div.line-block {
|
|
||||||
display: block ;
|
|
||||||
margin-top: 1em ;
|
|
||||||
margin-bottom: 1em }
|
|
||||||
|
|
||||||
div.line-block div.line-block {
|
|
||||||
margin-top: 0 ;
|
|
||||||
margin-bottom: 0 ;
|
|
||||||
margin-left: 1.5em }
|
|
||||||
|
|
||||||
div.sidebar {
|
|
||||||
margin-left: 1em ;
|
|
||||||
border: medium outset ;
|
|
||||||
padding: 1em ;
|
|
||||||
background-color: #ffffee ;
|
|
||||||
width: 40% ;
|
|
||||||
float: right ;
|
|
||||||
clear: right }
|
|
||||||
|
|
||||||
div.sidebar p.rubric {
|
|
||||||
font-family: sans-serif ;
|
|
||||||
font-size: medium }
|
|
||||||
|
|
||||||
div.system-messages {
|
|
||||||
margin: 5em }
|
|
||||||
|
|
||||||
div.system-messages h1 {
|
|
||||||
color: red }
|
|
||||||
|
|
||||||
div.system-message {
|
|
||||||
border: medium outset ;
|
|
||||||
padding: 1em }
|
|
||||||
|
|
||||||
div.system-message p.system-message-title {
|
|
||||||
color: red ;
|
|
||||||
font-weight: bold }
|
|
||||||
|
|
||||||
div.topic {
|
|
||||||
margin: 2em }
|
|
||||||
|
|
||||||
h1.section-subtitle, h2.section-subtitle, h3.section-subtitle,
|
|
||||||
h4.section-subtitle, h5.section-subtitle, h6.section-subtitle {
|
|
||||||
margin-top: 0.4em }
|
|
||||||
|
|
||||||
h1.title {
|
|
||||||
text-align: center }
|
|
||||||
|
|
||||||
h2.subtitle {
|
|
||||||
text-align: center }
|
|
||||||
|
|
||||||
hr.docutils {
|
|
||||||
width: 75% }
|
|
||||||
|
|
||||||
img.align-left {
|
|
||||||
clear: left }
|
|
||||||
|
|
||||||
img.align-right {
|
|
||||||
clear: right }
|
|
||||||
|
|
||||||
ol.simple, ul.simple {
|
|
||||||
margin-bottom: 1em }
|
|
||||||
|
|
||||||
ol.arabic {
|
|
||||||
list-style: decimal }
|
|
||||||
|
|
||||||
ol.loweralpha {
|
|
||||||
list-style: lower-alpha }
|
|
||||||
|
|
||||||
ol.upperalpha {
|
|
||||||
list-style: upper-alpha }
|
|
||||||
|
|
||||||
ol.lowerroman {
|
|
||||||
list-style: lower-roman }
|
|
||||||
|
|
||||||
ol.upperroman {
|
|
||||||
list-style: upper-roman }
|
|
||||||
|
|
||||||
p.attribution {
|
|
||||||
text-align: right ;
|
|
||||||
margin-left: 50% }
|
|
||||||
|
|
||||||
p.caption {
|
|
||||||
font-style: italic }
|
|
||||||
|
|
||||||
p.credits {
|
|
||||||
font-style: italic ;
|
|
||||||
font-size: smaller }
|
|
||||||
|
|
||||||
p.label {
|
|
||||||
white-space: nowrap }
|
|
||||||
|
|
||||||
p.rubric {
|
|
||||||
font-weight: bold ;
|
|
||||||
font-size: larger ;
|
|
||||||
color: maroon ;
|
|
||||||
text-align: center }
|
|
||||||
|
|
||||||
p.sidebar-title {
|
|
||||||
font-family: sans-serif ;
|
|
||||||
font-weight: bold ;
|
|
||||||
font-size: larger }
|
|
||||||
|
|
||||||
p.sidebar-subtitle {
|
|
||||||
font-family: sans-serif ;
|
|
||||||
font-weight: bold }
|
|
||||||
|
|
||||||
p.topic-title {
|
|
||||||
font-weight: bold }
|
|
||||||
|
|
||||||
pre.address {
|
|
||||||
margin-bottom: 0 ;
|
|
||||||
margin-top: 0 ;
|
|
||||||
font-family: serif ;
|
|
||||||
font-size: 100% }
|
|
||||||
|
|
||||||
pre.literal-block, pre.doctest-block {
|
|
||||||
margin-left: 2em ;
|
|
||||||
margin-right: 2em ;
|
|
||||||
background-color: #eeeeee }
|
|
||||||
|
|
||||||
span.classifier {
|
|
||||||
font-family: sans-serif ;
|
|
||||||
font-style: oblique }
|
|
||||||
|
|
||||||
span.classifier-delimiter {
|
|
||||||
font-family: sans-serif ;
|
|
||||||
font-weight: bold }
|
|
||||||
|
|
||||||
span.interpreted {
|
|
||||||
font-family: sans-serif }
|
|
||||||
|
|
||||||
span.option {
|
|
||||||
white-space: nowrap }
|
|
||||||
|
|
||||||
span.pre {
|
|
||||||
white-space: pre }
|
|
||||||
|
|
||||||
span.problematic {
|
|
||||||
color: red }
|
|
||||||
|
|
||||||
span.section-subtitle {
|
|
||||||
/* font-size relative to parent (h1..h6 element) */
|
|
||||||
font-size: 80% }
|
|
||||||
|
|
||||||
table.citation {
|
|
||||||
border-left: solid 1px gray;
|
|
||||||
margin-left: 1px }
|
|
||||||
|
|
||||||
table.docinfo {
|
|
||||||
margin: 2em 4em }
|
|
||||||
|
|
||||||
table.docutils {
|
|
||||||
margin-top: 0.5em ;
|
|
||||||
margin-bottom: 0.5em }
|
|
||||||
|
|
||||||
table.footnote {
|
|
||||||
border-left: solid 1px black;
|
|
||||||
margin-left: 1px }
|
|
||||||
|
|
||||||
table.docutils td, table.docutils th,
|
|
||||||
table.docinfo td, table.docinfo th {
|
|
||||||
padding-left: 0.5em ;
|
|
||||||
padding-right: 0.5em ;
|
|
||||||
vertical-align: top }
|
|
||||||
|
|
||||||
table.docutils th.field-name, table.docinfo th.docinfo-name {
|
|
||||||
font-weight: bold ;
|
|
||||||
text-align: left ;
|
|
||||||
white-space: nowrap ;
|
|
||||||
padding-left: 0 }
|
|
||||||
|
|
||||||
h1 tt.docutils, h2 tt.docutils, h3 tt.docutils,
|
|
||||||
h4 tt.docutils, h5 tt.docutils, h6 tt.docutils {
|
|
||||||
font-size: 100% }
|
|
||||||
|
|
||||||
tt.docutils {
|
|
||||||
background-color: #eeeeee }
|
|
||||||
|
|
||||||
ul.auto-toc {
|
|
||||||
list-style-type: none }
|
|
||||||
|
|
||||||
</style>
|
|
||||||
</head>
|
</head>
|
||||||
<body>
|
<body>
|
||||||
<div class="document" id="iterator-facade">
|
<div class="document" id="iterator-facade">
|
||||||
@ -303,13 +21,13 @@ ul.auto-toc {
|
|||||||
<tr><th class="docinfo-name">Author:</th>
|
<tr><th class="docinfo-name">Author:</th>
|
||||||
<td>David Abrahams, Jeremy Siek, Thomas Witt</td></tr>
|
<td>David Abrahams, Jeremy Siek, Thomas Witt</td></tr>
|
||||||
<tr><th class="docinfo-name">Contact:</th>
|
<tr><th class="docinfo-name">Contact:</th>
|
||||||
<td><a class="first reference" href="mailto:dave@boost-consulting.com">dave@boost-consulting.com</a>, <a class="reference" href="mailto:jsiek@osl.iu.edu">jsiek@osl.iu.edu</a>, <a class="last reference" href="mailto:witt@ive.uni-hannover.de">witt@ive.uni-hannover.de</a></td></tr>
|
<td><a class="first reference external" href="mailto:dave@boost-consulting.com">dave@boost-consulting.com</a>, <a class="reference external" href="mailto:jsiek@osl.iu.edu">jsiek@osl.iu.edu</a>, <a class="last reference external" href="mailto:witt@ive.uni-hannover.de">witt@ive.uni-hannover.de</a></td></tr>
|
||||||
<tr><th class="docinfo-name">Organization:</th>
|
<tr><th class="docinfo-name">Organization:</th>
|
||||||
<td><a class="first reference" href="http://www.boost-consulting.com">Boost Consulting</a>, Indiana University <a class="reference" href="http://www.osl.iu.edu">Open Systems
|
<td><a class="first reference external" href="http://www.boost-consulting.com">Boost Consulting</a>, Indiana University <a class="reference external" href="http://www.osl.iu.edu">Open Systems
|
||||||
Lab</a>, University of Hanover <a class="last reference" href="http://www.ive.uni-hannover.de">Institute for Transport
|
Lab</a>, University of Hanover <a class="last reference external" href="http://www.ive.uni-hannover.de">Institute for Transport
|
||||||
Railway Operation and Construction</a></td></tr>
|
Railway Operation and Construction</a></td></tr>
|
||||||
<tr><th class="docinfo-name">Date:</th>
|
<tr><th class="docinfo-name">Date:</th>
|
||||||
<td>2004-11-01</td></tr>
|
<td>2006-09-11</td></tr>
|
||||||
<tr><th class="docinfo-name">Copyright:</th>
|
<tr><th class="docinfo-name">Copyright:</th>
|
||||||
<td>Copyright David Abrahams, Jeremy Siek, and Thomas Witt 2003.</td></tr>
|
<td>Copyright David Abrahams, Jeremy Siek, and Thomas Witt 2003.</td></tr>
|
||||||
</tbody>
|
</tbody>
|
||||||
@ -330,46 +48,46 @@ and associated types, to be supplied by a derived iterator class.</td>
|
|||||||
</tr>
|
</tr>
|
||||||
</tbody>
|
</tbody>
|
||||||
</table>
|
</table>
|
||||||
<div class="contents topic">
|
<div class="contents topic" id="table-of-contents">
|
||||||
<p class="topic-title first"><a id="table-of-contents" name="table-of-contents">Table of Contents</a></p>
|
<p class="topic-title first">Table of Contents</p>
|
||||||
<ul class="simple">
|
<ul class="simple">
|
||||||
<li><a class="reference" href="#overview" id="id23" name="id23">Overview</a><ul>
|
<li><a class="reference internal" href="#overview" id="id23">Overview</a><ul>
|
||||||
<li><a class="reference" href="#usage" id="id24" name="id24">Usage</a></li>
|
<li><a class="reference internal" href="#usage" id="id24">Usage</a></li>
|
||||||
<li><a class="reference" href="#iterator-core-access" id="id25" name="id25">Iterator Core Access</a></li>
|
<li><a class="reference internal" href="#iterator-core-access" id="id25">Iterator Core Access</a></li>
|
||||||
<li><a class="reference" href="#operator" id="id26" name="id26"><tt class="docutils literal"><span class="pre">operator[]</span></tt></a></li>
|
<li><a class="reference internal" href="#operator" id="id26"><tt class="docutils literal"><span class="pre">operator[]</span></tt></a></li>
|
||||||
<li><a class="reference" href="#id2" id="id27" name="id27"><tt class="docutils literal"><span class="pre">operator-></span></tt></a></li>
|
<li><a class="reference internal" href="#id2" id="id27"><tt class="docutils literal"><span class="pre">operator-></span></tt></a></li>
|
||||||
</ul>
|
</ul>
|
||||||
</li>
|
</li>
|
||||||
<li><a class="reference" href="#reference" id="id28" name="id28">Reference</a><ul>
|
<li><a class="reference internal" href="#reference" id="id28">Reference</a><ul>
|
||||||
<li><a class="reference" href="#iterator-facade-requirements" id="id29" name="id29"><tt class="docutils literal"><span class="pre">iterator_facade</span></tt> Requirements</a></li>
|
<li><a class="reference internal" href="#iterator-facade-requirements" id="id29"><tt class="docutils literal"><span class="pre">iterator_facade</span></tt> Requirements</a></li>
|
||||||
<li><a class="reference" href="#iterator-facade-operations" id="id30" name="id30"><tt class="docutils literal"><span class="pre">iterator_facade</span></tt> operations</a></li>
|
<li><a class="reference internal" href="#iterator-facade-operations" id="id30"><tt class="docutils literal"><span class="pre">iterator_facade</span></tt> operations</a></li>
|
||||||
</ul>
|
</ul>
|
||||||
</li>
|
</li>
|
||||||
<li><a class="reference" href="#tutorial-example" id="id31" name="id31">Tutorial Example</a><ul>
|
<li><a class="reference internal" href="#tutorial-example" id="id31">Tutorial Example</a><ul>
|
||||||
<li><a class="reference" href="#the-problem" id="id32" name="id32">The Problem</a></li>
|
<li><a class="reference internal" href="#the-problem" id="id32">The Problem</a></li>
|
||||||
<li><a class="reference" href="#a-basic-iterator-using-iterator-facade" id="id33" name="id33">A Basic Iterator Using <tt class="docutils literal"><span class="pre">iterator_facade</span></tt></a><ul>
|
<li><a class="reference internal" href="#a-basic-iterator-using-iterator-facade" id="id33">A Basic Iterator Using <tt class="docutils literal"><span class="pre">iterator_facade</span></tt></a><ul>
|
||||||
<li><a class="reference" href="#template-arguments-for-iterator-facade" id="id34" name="id34">Template Arguments for <tt class="docutils literal"><span class="pre">iterator_facade</span></tt></a><ul>
|
<li><a class="reference internal" href="#template-arguments-for-iterator-facade" id="id34">Template Arguments for <tt class="docutils literal"><span class="pre">iterator_facade</span></tt></a><ul>
|
||||||
<li><a class="reference" href="#derived" id="id35" name="id35"><tt class="docutils literal"><span class="pre">Derived</span></tt></a></li>
|
<li><a class="reference internal" href="#derived" id="id35"><tt class="docutils literal"><span class="pre">Derived</span></tt></a></li>
|
||||||
<li><a class="reference" href="#value" id="id36" name="id36"><tt class="docutils literal"><span class="pre">Value</span></tt></a></li>
|
<li><a class="reference internal" href="#value" id="id36"><tt class="docutils literal"><span class="pre">Value</span></tt></a></li>
|
||||||
<li><a class="reference" href="#categoryortraversal" id="id37" name="id37"><tt class="docutils literal"><span class="pre">CategoryOrTraversal</span></tt></a></li>
|
<li><a class="reference internal" href="#categoryortraversal" id="id37"><tt class="docutils literal"><span class="pre">CategoryOrTraversal</span></tt></a></li>
|
||||||
<li><a class="reference" href="#id12" id="id38" name="id38"><tt class="docutils literal"><span class="pre">Reference</span></tt></a></li>
|
<li><a class="reference internal" href="#id12" id="id38"><tt class="docutils literal"><span class="pre">Reference</span></tt></a></li>
|
||||||
<li><a class="reference" href="#difference" id="id39" name="id39"><tt class="docutils literal"><span class="pre">Difference</span></tt></a></li>
|
<li><a class="reference internal" href="#difference" id="id39"><tt class="docutils literal"><span class="pre">Difference</span></tt></a></li>
|
||||||
</ul>
|
</ul>
|
||||||
</li>
|
</li>
|
||||||
<li><a class="reference" href="#constructors-and-data-members" id="id40" name="id40">Constructors and Data Members</a></li>
|
<li><a class="reference internal" href="#constructors-and-data-members" id="id40">Constructors and Data Members</a></li>
|
||||||
<li><a class="reference" href="#implementing-the-core-operations" id="id41" name="id41">Implementing the Core Operations</a></li>
|
<li><a class="reference internal" href="#implementing-the-core-operations" id="id41">Implementing the Core Operations</a></li>
|
||||||
</ul>
|
</ul>
|
||||||
</li>
|
</li>
|
||||||
<li><a class="reference" href="#a-constant-node-iterator" id="id42" name="id42">A constant <tt class="docutils literal"><span class="pre">node_iterator</span></tt></a></li>
|
<li><a class="reference internal" href="#a-constant-node-iterator" id="id42">A constant <tt class="docutils literal"><span class="pre">node_iterator</span></tt></a></li>
|
||||||
<li><a class="reference" href="#interoperability" id="id43" name="id43">Interoperability</a></li>
|
<li><a class="reference internal" href="#interoperability" id="id43">Interoperability</a></li>
|
||||||
<li><a class="reference" href="#telling-the-truth" id="id44" name="id44">Telling the Truth</a></li>
|
<li><a class="reference internal" href="#telling-the-truth" id="id44">Telling the Truth</a></li>
|
||||||
<li><a class="reference" href="#wrap-up" id="id45" name="id45">Wrap Up</a></li>
|
<li><a class="reference internal" href="#wrap-up" id="id45">Wrap Up</a></li>
|
||||||
</ul>
|
</ul>
|
||||||
</li>
|
</li>
|
||||||
</ul>
|
</ul>
|
||||||
</div>
|
</div>
|
||||||
<div class="section">
|
<div class="section" id="overview">
|
||||||
<h1><a class="toc-backref" href="#id23" id="overview" name="overview">Overview</a></h1>
|
<h1><a class="toc-backref" href="#id23">Overview</a></h1>
|
||||||
<!-- Distributed under the Boost -->
|
<!-- Distributed under the Boost -->
|
||||||
<!-- Software License, Version 1.0. (See accompanying -->
|
<!-- Software License, Version 1.0. (See accompanying -->
|
||||||
<!-- file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) -->
|
<!-- file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) -->
|
||||||
@ -392,7 +110,7 @@ include the associated types exposed through iterator traits:
|
|||||||
<tt class="docutils literal"><span class="pre">value_type</span></tt>, <tt class="docutils literal"><span class="pre">reference</span></tt>, <tt class="docutils literal"><span class="pre">difference_type</span></tt>, and
|
<tt class="docutils literal"><span class="pre">value_type</span></tt>, <tt class="docutils literal"><span class="pre">reference</span></tt>, <tt class="docutils literal"><span class="pre">difference_type</span></tt>, and
|
||||||
<tt class="docutils literal"><span class="pre">iterator_category</span></tt>.</p>
|
<tt class="docutils literal"><span class="pre">iterator_category</span></tt>.</p>
|
||||||
<p>Iterator facade uses the Curiously Recurring Template
|
<p>Iterator facade uses the Curiously Recurring Template
|
||||||
Pattern (CRTP) <a class="citation-reference" href="#cop95" id="id1" name="id1">[Cop95]</a> so that the user can specify the behavior
|
Pattern (CRTP) <a class="citation-reference" href="#cop95" id="id1">[Cop95]</a> so that the user can specify the behavior
|
||||||
of <tt class="docutils literal"><span class="pre">iterator_facade</span></tt> in a derived class. Former designs used
|
of <tt class="docutils literal"><span class="pre">iterator_facade</span></tt> in a derived class. Former designs used
|
||||||
policy objects to specify the behavior, but that approach was
|
policy objects to specify the behavior, but that approach was
|
||||||
discarded for several reasons:</p>
|
discarded for several reasons:</p>
|
||||||
@ -415,8 +133,8 @@ iterators, and a separate <tt class="docutils literal"><span class="pre">iterato
|
|||||||
impossible.</li>
|
impossible.</li>
|
||||||
</ol>
|
</ol>
|
||||||
</blockquote>
|
</blockquote>
|
||||||
<div class="section">
|
<div class="section" id="usage">
|
||||||
<h2><a class="toc-backref" href="#id24" id="usage" name="usage">Usage</a></h2>
|
<h2><a class="toc-backref" href="#id24">Usage</a></h2>
|
||||||
<p>The user of <tt class="docutils literal"><span class="pre">iterator_facade</span></tt> derives his iterator class from a
|
<p>The user of <tt class="docutils literal"><span class="pre">iterator_facade</span></tt> derives his iterator class from a
|
||||||
specialization of <tt class="docutils literal"><span class="pre">iterator_facade</span></tt> and passes the derived
|
specialization of <tt class="docutils literal"><span class="pre">iterator_facade</span></tt> and passes the derived
|
||||||
iterator class as <tt class="docutils literal"><span class="pre">iterator_facade</span></tt>'s first template parameter.
|
iterator class as <tt class="docutils literal"><span class="pre">iterator_facade</span></tt>'s first template parameter.
|
||||||
@ -479,8 +197,8 @@ constructor. Finally, if the iterator is to model Forward Traversal
|
|||||||
Iterator or a more-refined iterator concept, a default constructor is
|
Iterator or a more-refined iterator concept, a default constructor is
|
||||||
required.</p>
|
required.</p>
|
||||||
</div>
|
</div>
|
||||||
<div class="section">
|
<div class="section" id="iterator-core-access">
|
||||||
<h2><a class="toc-backref" href="#id25" id="iterator-core-access" name="iterator-core-access">Iterator Core Access</a></h2>
|
<h2><a class="toc-backref" href="#id25">Iterator Core Access</a></h2>
|
||||||
<p><tt class="docutils literal"><span class="pre">iterator_facade</span></tt> and the operator implementations need to be able
|
<p><tt class="docutils literal"><span class="pre">iterator_facade</span></tt> and the operator implementations need to be able
|
||||||
to access the core member functions in the derived class. Making the
|
to access the core member functions in the derived class. Making the
|
||||||
core member functions public would expose an implementation detail to
|
core member functions public would expose an implementation detail to
|
||||||
@ -513,19 +231,19 @@ standardize the gateway protocol. Note that even if
|
|||||||
open a safety loophole, as every core member function preserves the
|
open a safety loophole, as every core member function preserves the
|
||||||
invariants of the iterator.</p>
|
invariants of the iterator.</p>
|
||||||
</div>
|
</div>
|
||||||
<div class="section">
|
<div class="section" id="operator">
|
||||||
<h2><a class="toc-backref" href="#id26" id="operator" name="operator"><tt class="docutils literal"><span class="pre">operator[]</span></tt></a></h2>
|
<h2><a class="toc-backref" href="#id26"><tt class="docutils literal"><span class="pre">operator[]</span></tt></a></h2>
|
||||||
<p>The indexing operator for a generalized iterator presents special
|
<p>The indexing operator for a generalized iterator presents special
|
||||||
challenges. A random access iterator's <tt class="docutils literal"><span class="pre">operator[]</span></tt> is only
|
challenges. A random access iterator's <tt class="docutils literal"><span class="pre">operator[]</span></tt> is only
|
||||||
required to return something convertible to its <tt class="docutils literal"><span class="pre">value_type</span></tt>.
|
required to return something convertible to its <tt class="docutils literal"><span class="pre">value_type</span></tt>.
|
||||||
Requiring that it return an lvalue would rule out currently-legal
|
Requiring that it return an lvalue would rule out currently-legal
|
||||||
random-access iterators which hold the referenced value in a data
|
random-access iterators which hold the referenced value in a data
|
||||||
member (e.g. <a class="reference" href="counting_iterator.html"><tt class="docutils literal"><span class="pre">counting_iterator</span></tt></a>), because <tt class="docutils literal"><span class="pre">*(p+n)</span></tt> is a reference
|
member (e.g. <a class="reference external" href="counting_iterator.html"><tt class="docutils literal"><span class="pre">counting_iterator</span></tt></a>), because <tt class="docutils literal"><span class="pre">*(p+n)</span></tt> is a reference
|
||||||
into the temporary iterator <tt class="docutils literal"><span class="pre">p+n</span></tt>, which is destroyed when
|
into the temporary iterator <tt class="docutils literal"><span class="pre">p+n</span></tt>, which is destroyed when
|
||||||
<tt class="docutils literal"><span class="pre">operator[]</span></tt> returns.</p>
|
<tt class="docutils literal"><span class="pre">operator[]</span></tt> returns.</p>
|
||||||
<p>Writable iterators built with <tt class="docutils literal"><span class="pre">iterator_facade</span></tt> implement the
|
<p>Writable iterators built with <tt class="docutils literal"><span class="pre">iterator_facade</span></tt> implement the
|
||||||
semantics required by the preferred resolution to <a class="reference" href="http://anubis.dkuug.dk/jtc1/sc22/wg21/docs/lwg-active.html#299">issue 299</a> and
|
semantics required by the preferred resolution to <a class="reference external" href="http://www.open-std.org/jtc1/sc22/wg21/docs/lwg-active.html#299">issue 299</a> and
|
||||||
adopted by proposal <a class="reference" href="http://anubis.dkuug.dk/JTC1/SC22/WG21/docs/papers/2003/n1550.html">n1550</a>: the result of <tt class="docutils literal"><span class="pre">p[n]</span></tt> is an object
|
adopted by proposal <a class="reference external" href="http://www.open-std.org/JTC1/SC22/WG21/docs/papers/2003/n1550.htm">n1550</a>: the result of <tt class="docutils literal"><span class="pre">p[n]</span></tt> is an object
|
||||||
convertible to the iterator's <tt class="docutils literal"><span class="pre">value_type</span></tt>, and <tt class="docutils literal"><span class="pre">p[n]</span> <span class="pre">=</span> <span class="pre">x</span></tt> is
|
convertible to the iterator's <tt class="docutils literal"><span class="pre">value_type</span></tt>, and <tt class="docutils literal"><span class="pre">p[n]</span> <span class="pre">=</span> <span class="pre">x</span></tt> is
|
||||||
equivalent to <tt class="docutils literal"><span class="pre">*(p</span> <span class="pre">+</span> <span class="pre">n)</span> <span class="pre">=</span> <span class="pre">x</span></tt> (Note: This result object may be
|
equivalent to <tt class="docutils literal"><span class="pre">*(p</span> <span class="pre">+</span> <span class="pre">n)</span> <span class="pre">=</span> <span class="pre">x</span></tt> (Note: This result object may be
|
||||||
implemented as a proxy containing a copy of <tt class="docutils literal"><span class="pre">p+n</span></tt>). This approach
|
implemented as a proxy containing a copy of <tt class="docutils literal"><span class="pre">p+n</span></tt>). This approach
|
||||||
@ -536,8 +254,8 @@ the implementation of her iterator is free to implement an
|
|||||||
class; it will hide the one supplied by <tt class="docutils literal"><span class="pre">iterator_facade</span></tt> from
|
class; it will hide the one supplied by <tt class="docutils literal"><span class="pre">iterator_facade</span></tt> from
|
||||||
clients of her iterator.</p>
|
clients of her iterator.</p>
|
||||||
</div>
|
</div>
|
||||||
<div class="section">
|
<div class="section" id="id2">
|
||||||
<h2><a class="toc-backref" href="#id27" id="id2" name="id2"><span id="operator-arrow"></span><tt class="docutils literal"><span class="pre">operator-></span></tt></a></h2>
|
<span id="operator-arrow"></span><h2><a class="toc-backref" href="#id27"><tt class="docutils literal"><span class="pre">operator-></span></tt></a></h2>
|
||||||
<p>The <tt class="docutils literal"><span class="pre">reference</span></tt> type of a readable iterator (and today's input
|
<p>The <tt class="docutils literal"><span class="pre">reference</span></tt> type of a readable iterator (and today's input
|
||||||
iterator) need not in fact be a reference, so long as it is
|
iterator) need not in fact be a reference, so long as it is
|
||||||
convertible to the iterator's <tt class="docutils literal"><span class="pre">value_type</span></tt>. When the <tt class="docutils literal"><span class="pre">value_type</span></tt>
|
convertible to the iterator's <tt class="docutils literal"><span class="pre">value_type</span></tt>. When the <tt class="docutils literal"><span class="pre">value_type</span></tt>
|
||||||
@ -552,14 +270,14 @@ satisfied by the <tt class="docutils literal"><span class="pre">iterator_facade<
|
|||||||
<table class="docutils citation" frame="void" id="cop95" rules="none">
|
<table class="docutils citation" frame="void" id="cop95" rules="none">
|
||||||
<colgroup><col class="label" /><col /></colgroup>
|
<colgroup><col class="label" /><col /></colgroup>
|
||||||
<tbody valign="top">
|
<tbody valign="top">
|
||||||
<tr><td class="label"><a name="cop95">[Cop95]</a></td><td><em>(<a class="fn-backref" href="#id1">1</a>, <a class="fn-backref" href="#id10">2</a>)</em> [Coplien, 1995] Coplien, J., Curiously Recurring Template
|
<tr><td class="label">[Cop95]</td><td><em>(<a class="fn-backref" href="#id1">1</a>, <a class="fn-backref" href="#id10">2</a>)</em> [Coplien, 1995] Coplien, J., Curiously Recurring Template
|
||||||
Patterns, C++ Report, February 1995, pp. 24-27.</td></tr>
|
Patterns, C++ Report, February 1995, pp. 24-27.</td></tr>
|
||||||
</tbody>
|
</tbody>
|
||||||
</table>
|
</table>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="section">
|
<div class="section" id="reference">
|
||||||
<h1><a class="toc-backref" href="#id28" id="reference" name="reference">Reference</a></h1>
|
<h1><a class="toc-backref" href="#id28">Reference</a></h1>
|
||||||
<!-- Distributed under the Boost -->
|
<!-- Distributed under the Boost -->
|
||||||
<!-- Software License, Version 1.0. (See accompanying -->
|
<!-- Software License, Version 1.0. (See accompanying -->
|
||||||
<!-- file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) -->
|
<!-- file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) -->
|
||||||
@ -580,11 +298,11 @@ class iterator_facade {
|
|||||||
typedef Reference reference;
|
typedef Reference reference;
|
||||||
typedef Value* pointer;
|
typedef Value* pointer;
|
||||||
typedef Difference difference_type;
|
typedef Difference difference_type;
|
||||||
typedef /* see <a class="reference" href="#iterator-category">below</a> */ iterator_category;
|
typedef /* see <a class="reference internal" href="#iterator-category">below</a> */ iterator_category;
|
||||||
|
|
||||||
reference operator*() const;
|
reference operator*() const;
|
||||||
/* see <a class="reference" href="#operator-arrow">below</a> */ operator->() const;
|
/* see <a class="reference internal" href="#operator-arrow">below</a> */ operator->() const;
|
||||||
/* see <a class="reference" href="#brackets">below</a> */ operator[](difference_type n) const;
|
/* see <a class="reference internal" href="#brackets">below</a> */ operator[](difference_type n) const;
|
||||||
Derived& operator++();
|
Derived& operator++();
|
||||||
Derived operator++(int);
|
Derived operator++(int);
|
||||||
Derived& operator--();
|
Derived& operator--();
|
||||||
@ -636,7 +354,7 @@ operator >=(iterator_facade<Dr1,V1,TC1,R1,D1> const& lhs,
|
|||||||
// Iterator difference
|
// Iterator difference
|
||||||
template <class Dr1, class V1, class TC1, class R1, class D1,
|
template <class Dr1, class V1, class TC1, class R1, class D1,
|
||||||
class Dr2, class V2, class TC2, class R2, class D2>
|
class Dr2, class V2, class TC2, class R2, class D2>
|
||||||
/* see <a class="reference" href="#minus">below</a> */
|
/* see <a class="reference internal" href="#minus">below</a> */
|
||||||
operator-(iterator_facade<Dr1,V1,TC1,R1,D1> const& lhs,
|
operator-(iterator_facade<Dr1,V1,TC1,R1,D1> const& lhs,
|
||||||
iterator_facade<Dr2,V2,TC2,R2,D2> const& rhs);
|
iterator_facade<Dr2,V2,TC2,R2,D2> const& rhs);
|
||||||
|
|
||||||
@ -688,7 +406,7 @@ Derived operator+ (typename Derived::difference_type n,
|
|||||||
X1 = C
|
X1 = C
|
||||||
}
|
}
|
||||||
|
|
||||||
2. <a class="reference" href="new-iter-concepts.html#category-to-traversal"><em>category-to-traversal</em></a>(X) is convertible to the most
|
2. <a class="reference external" href="new-iter-concepts.html#category-to-traversal"><em>category-to-traversal</em></a>(X) is convertible to the most
|
||||||
derived traversal tag type to which X is also
|
derived traversal tag type to which X is also
|
||||||
convertible, and not to any more-derived traversal tag
|
convertible, and not to any more-derived traversal tag
|
||||||
type.
|
type.
|
||||||
@ -722,8 +440,8 @@ struct enable_if_interoperable
|
|||||||
>
|
>
|
||||||
{};
|
{};
|
||||||
</pre>
|
</pre>
|
||||||
<div class="section">
|
<div class="section" id="iterator-facade-requirements">
|
||||||
<h2><a class="toc-backref" href="#id29" id="iterator-facade-requirements" name="iterator-facade-requirements"><tt class="docutils literal"><span class="pre">iterator_facade</span></tt> Requirements</a></h2>
|
<h2><a class="toc-backref" href="#id29"><tt class="docutils literal"><span class="pre">iterator_facade</span></tt> Requirements</a></h2>
|
||||||
<p>The following table describes the typical valid expressions on
|
<p>The following table describes the typical valid expressions on
|
||||||
<tt class="docutils literal"><span class="pre">iterator_facade</span></tt>'s <tt class="docutils literal"><span class="pre">Derived</span></tt> parameter, depending on the
|
<tt class="docutils literal"><span class="pre">iterator_facade</span></tt>'s <tt class="docutils literal"><span class="pre">Derived</span></tt> parameter, depending on the
|
||||||
iterator concept(s) it will model. The operations in the first
|
iterator concept(s) it will model. The operations in the first
|
||||||
@ -736,8 +454,8 @@ object of type <tt class="docutils literal"><span class="pre">X</span></tt>, <tt
|
|||||||
object of a single pass iterator type interoperable with <tt class="docutils literal"><span class="pre">X</span></tt>, and <tt class="docutils literal"><span class="pre">z</span></tt>
|
object of a single pass iterator type interoperable with <tt class="docutils literal"><span class="pre">X</span></tt>, and <tt class="docutils literal"><span class="pre">z</span></tt>
|
||||||
is a constant object of a random access traversal iterator type
|
is a constant object of a random access traversal iterator type
|
||||||
interoperable with <tt class="docutils literal"><span class="pre">X</span></tt>.</p>
|
interoperable with <tt class="docutils literal"><span class="pre">X</span></tt>.</p>
|
||||||
<div class="topic">
|
<div class="topic" id="core-operations">
|
||||||
<p class="topic-title first"><a id="core-operations" name="core-operations"><tt class="docutils literal"><span class="pre">iterator_facade</span></tt> Core Operations</a></p>
|
<p class="topic-title first"><tt class="docutils literal"><span class="pre">iterator_facade</span></tt> Core Operations</p>
|
||||||
<table border="1" class="docutils">
|
<table border="1" class="docutils">
|
||||||
<colgroup>
|
<colgroup>
|
||||||
<col width="21%" />
|
<col width="21%" />
|
||||||
@ -796,8 +514,8 @@ Iterator</td>
|
|||||||
</table>
|
</table>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="section">
|
<div class="section" id="iterator-facade-operations">
|
||||||
<h2><a class="toc-backref" href="#id30" id="iterator-facade-operations" name="iterator-facade-operations"><tt class="docutils literal"><span class="pre">iterator_facade</span></tt> operations</a></h2>
|
<h2><a class="toc-backref" href="#id30"><tt class="docutils literal"><span class="pre">iterator_facade</span></tt> operations</a></h2>
|
||||||
<p>The operations in this section are described in terms of operations on
|
<p>The operations in this section are described in terms of operations on
|
||||||
the core interface of <tt class="docutils literal"><span class="pre">Derived</span></tt> which may be inaccessible
|
the core interface of <tt class="docutils literal"><span class="pre">Derived</span></tt> which may be inaccessible
|
||||||
(i.e. private). The implementation should access these operations
|
(i.e. private). The implementation should access these operations
|
||||||
@ -811,7 +529,7 @@ through member functions of class <tt class="docutils literal"><span class="pre"
|
|||||||
</tr>
|
</tr>
|
||||||
</tbody>
|
</tbody>
|
||||||
</table>
|
</table>
|
||||||
<p><tt class="docutils literal"><span class="pre">operator->()</span> <span class="pre">const;</span></tt> (see <a class="reference" href="#operator-arrow">below</a>)</p>
|
<p><tt class="docutils literal"><span class="pre">operator->()</span> <span class="pre">const;</span></tt> (see <a class="reference internal" href="#operator-arrow">below</a>)</p>
|
||||||
<table class="docutils field-list" frame="void" rules="none">
|
<table class="docutils field-list" frame="void" rules="none">
|
||||||
<col class="field-name" />
|
<col class="field-name" />
|
||||||
<col class="field-body" />
|
<col class="field-body" />
|
||||||
@ -1140,18 +858,18 @@ operator -(iterator_facade<Dr1,V1,TC1,R1,D1> const& lhs,
|
|||||||
</table>
|
</table>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="section">
|
<div class="section" id="tutorial-example">
|
||||||
<h1><a class="toc-backref" href="#id31" id="tutorial-example" name="tutorial-example">Tutorial Example</a></h1>
|
<h1><a class="toc-backref" href="#id31">Tutorial Example</a></h1>
|
||||||
<!-- Copyright David Abrahams 2004. Use, modification and distribution is -->
|
<!-- Copyright David Abrahams 2004. Use, modification and distribution is -->
|
||||||
<!-- subject to the Boost Software License, Version 1.0. (See accompanying -->
|
<!-- subject to 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) -->
|
<!-- file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) -->
|
||||||
<p>In this section we'll walk through the implementation of a few
|
<p>In this section we'll walk through the implementation of a few
|
||||||
iterators using <tt class="docutils literal"><span class="pre">iterator_facade</span></tt>, based around the simple
|
iterators using <tt class="docutils literal"><span class="pre">iterator_facade</span></tt>, based around the simple
|
||||||
example of a linked list of polymorphic objects. This example was
|
example of a linked list of polymorphic objects. This example was
|
||||||
inspired by a <a class="reference" href="http://thread.gmane.org/gmane.comp.lib.boost.user/5100">posting</a> by Keith Macdonald on the <a class="reference" href="../../../more/mailing_lists.htm#users">Boost-Users</a>
|
inspired by a <a class="reference external" href="http://thread.gmane.org/gmane.comp.lib.boost.user/5100">posting</a> by Keith Macdonald on the <a class="reference external" href="http://www.boost.org/more/mailing_lists.htm#users">Boost-Users</a>
|
||||||
mailing list.</p>
|
mailing list.</p>
|
||||||
<div class="section">
|
<div class="section" id="the-problem">
|
||||||
<h2><a class="toc-backref" href="#id32" id="the-problem" name="the-problem">The Problem</a></h2>
|
<h2><a class="toc-backref" href="#id32">The Problem</a></h2>
|
||||||
<p>Say we've written a polymorphic linked list node base class:</p>
|
<p>Say we've written a polymorphic linked list node base class:</p>
|
||||||
<pre class="literal-block">
|
<pre class="literal-block">
|
||||||
# include <iostream>
|
# include <iostream>
|
||||||
@ -1212,8 +930,8 @@ inline std::ostream& operator<<(std::ostream& s, node_base const&a
|
|||||||
<p>Our first challenge is to build an appropriate iterator over these
|
<p>Our first challenge is to build an appropriate iterator over these
|
||||||
lists.</p>
|
lists.</p>
|
||||||
</div>
|
</div>
|
||||||
<div class="section">
|
<div class="section" id="a-basic-iterator-using-iterator-facade">
|
||||||
<h2><a class="toc-backref" href="#id33" id="a-basic-iterator-using-iterator-facade" name="a-basic-iterator-using-iterator-facade">A Basic Iterator Using <tt class="docutils literal"><span class="pre">iterator_facade</span></tt></a></h2>
|
<h2><a class="toc-backref" href="#id33">A Basic Iterator Using <tt class="docutils literal"><span class="pre">iterator_facade</span></tt></a></h2>
|
||||||
<p>We will construct a <tt class="docutils literal"><span class="pre">node_iterator</span></tt> class using inheritance from
|
<p>We will construct a <tt class="docutils literal"><span class="pre">node_iterator</span></tt> class using inheritance from
|
||||||
<tt class="docutils literal"><span class="pre">iterator_facade</span></tt> to implement most of the iterator's operations.</p>
|
<tt class="docutils literal"><span class="pre">iterator_facade</span></tt> to implement most of the iterator's operations.</p>
|
||||||
<pre class="literal-block">
|
<pre class="literal-block">
|
||||||
@ -1226,45 +944,45 @@ class node_iterator
|
|||||||
...
|
...
|
||||||
};
|
};
|
||||||
</pre>
|
</pre>
|
||||||
<div class="section">
|
<div class="section" id="template-arguments-for-iterator-facade">
|
||||||
<h3><a class="toc-backref" href="#id34" id="template-arguments-for-iterator-facade" name="template-arguments-for-iterator-facade">Template Arguments for <tt class="docutils literal"><span class="pre">iterator_facade</span></tt></a></h3>
|
<h3><a class="toc-backref" href="#id34">Template Arguments for <tt class="docutils literal"><span class="pre">iterator_facade</span></tt></a></h3>
|
||||||
<p><tt class="docutils literal"><span class="pre">iterator_facade</span></tt> has several template parameters, so we must decide
|
<p><tt class="docutils literal"><span class="pre">iterator_facade</span></tt> has several template parameters, so we must decide
|
||||||
what types to use for the arguments. The parameters are <tt class="docutils literal"><span class="pre">Derived</span></tt>,
|
what types to use for the arguments. The parameters are <tt class="docutils literal"><span class="pre">Derived</span></tt>,
|
||||||
<tt class="docutils literal"><span class="pre">Value</span></tt>, <tt class="docutils literal"><span class="pre">CategoryOrTraversal</span></tt>, <tt class="docutils literal"><span class="pre">Reference</span></tt>, and <tt class="docutils literal"><span class="pre">Difference</span></tt>.</p>
|
<tt class="docutils literal"><span class="pre">Value</span></tt>, <tt class="docutils literal"><span class="pre">CategoryOrTraversal</span></tt>, <tt class="docutils literal"><span class="pre">Reference</span></tt>, and <tt class="docutils literal"><span class="pre">Difference</span></tt>.</p>
|
||||||
<div class="section">
|
<div class="section" id="derived">
|
||||||
<h4><a class="toc-backref" href="#id35" id="derived" name="derived"><tt class="docutils literal"><span class="pre">Derived</span></tt></a></h4>
|
<h4><a class="toc-backref" href="#id35"><tt class="docutils literal"><span class="pre">Derived</span></tt></a></h4>
|
||||||
<p>Because <tt class="docutils literal"><span class="pre">iterator_facade</span></tt> is meant to be used with the CRTP
|
<p>Because <tt class="docutils literal"><span class="pre">iterator_facade</span></tt> is meant to be used with the CRTP
|
||||||
<a class="citation-reference" href="#cop95" id="id10" name="id10">[Cop95]</a> the first parameter is the iterator class name itself,
|
<a class="citation-reference" href="#cop95" id="id10">[Cop95]</a> the first parameter is the iterator class name itself,
|
||||||
<tt class="docutils literal"><span class="pre">node_iterator</span></tt>.</p>
|
<tt class="docutils literal"><span class="pre">node_iterator</span></tt>.</p>
|
||||||
</div>
|
</div>
|
||||||
<div class="section">
|
<div class="section" id="value">
|
||||||
<h4><a class="toc-backref" href="#id36" id="value" name="value"><tt class="docutils literal"><span class="pre">Value</span></tt></a></h4>
|
<h4><a class="toc-backref" href="#id36"><tt class="docutils literal"><span class="pre">Value</span></tt></a></h4>
|
||||||
<p>The <tt class="docutils literal"><span class="pre">Value</span></tt> parameter determines the <tt class="docutils literal"><span class="pre">node_iterator</span></tt>'s
|
<p>The <tt class="docutils literal"><span class="pre">Value</span></tt> parameter determines the <tt class="docutils literal"><span class="pre">node_iterator</span></tt>'s
|
||||||
<tt class="docutils literal"><span class="pre">value_type</span></tt>. In this case, we are iterating over <tt class="docutils literal"><span class="pre">node_base</span></tt>
|
<tt class="docutils literal"><span class="pre">value_type</span></tt>. In this case, we are iterating over <tt class="docutils literal"><span class="pre">node_base</span></tt>
|
||||||
objects, so <tt class="docutils literal"><span class="pre">Value</span></tt> will be <tt class="docutils literal"><span class="pre">node_base</span></tt>.</p>
|
objects, so <tt class="docutils literal"><span class="pre">Value</span></tt> will be <tt class="docutils literal"><span class="pre">node_base</span></tt>.</p>
|
||||||
</div>
|
</div>
|
||||||
<div class="section">
|
<div class="section" id="categoryortraversal">
|
||||||
<h4><a class="toc-backref" href="#id37" id="categoryortraversal" name="categoryortraversal"><tt class="docutils literal"><span class="pre">CategoryOrTraversal</span></tt></a></h4>
|
<h4><a class="toc-backref" href="#id37"><tt class="docutils literal"><span class="pre">CategoryOrTraversal</span></tt></a></h4>
|
||||||
<p>Now we have to determine which <a class="reference" href="new-iter-concepts.html#iterator-traversal-concepts-lib-iterator-traversal">iterator traversal concept</a> our
|
<p>Now we have to determine which <a class="reference external" href="new-iter-concepts.html#iterator-traversal-concepts-lib-iterator-traversal">iterator traversal concept</a> our
|
||||||
<tt class="docutils literal"><span class="pre">node_iterator</span></tt> is going to model. Singly-linked lists only have
|
<tt class="docutils literal"><span class="pre">node_iterator</span></tt> is going to model. Singly-linked lists only have
|
||||||
forward links, so our iterator can't can't be a <a class="reference" href="new-iter-concepts.html#bidirectional-traversal-iterators-lib-bidirectional-traversal-iterators">bidirectional
|
forward links, so our iterator can't can't be a <a class="reference external" href="new-iter-concepts.html#bidirectional-traversal-iterators-lib-bidirectional-traversal-iterators">bidirectional
|
||||||
traversal iterator</a>. Our iterator should be able to make multiple
|
traversal iterator</a>. Our iterator should be able to make multiple
|
||||||
passes over the same linked list (unlike, say, an
|
passes over the same linked list (unlike, say, an
|
||||||
<tt class="docutils literal"><span class="pre">istream_iterator</span></tt> which consumes the stream it traverses), so it
|
<tt class="docutils literal"><span class="pre">istream_iterator</span></tt> which consumes the stream it traverses), so it
|
||||||
must be a <a class="reference" href="new-iter-concepts.html#forward-traversal-iterators-lib-forward-traversal-iterators">forward traversal iterator</a>. Therefore, we'll pass
|
must be a <a class="reference external" href="new-iter-concepts.html#forward-traversal-iterators-lib-forward-traversal-iterators">forward traversal iterator</a>. Therefore, we'll pass
|
||||||
<tt class="docutils literal"><span class="pre">boost::forward_traversal_tag</span></tt> in this position <a class="footnote-reference" href="#category" id="id11" name="id11">[1]</a>.</p>
|
<tt class="docutils literal"><span class="pre">boost::forward_traversal_tag</span></tt> in this position<a class="footnote-reference" href="#category" id="id11"><sup>1</sup></a>.</p>
|
||||||
<table class="docutils footnote" frame="void" id="category" rules="none">
|
<table class="docutils footnote" frame="void" id="category" rules="none">
|
||||||
<colgroup><col class="label" /><col /></colgroup>
|
<colgroup><col class="label" /><col /></colgroup>
|
||||||
<tbody valign="top">
|
<tbody valign="top">
|
||||||
<tr><td class="label"><a class="fn-backref" href="#id11" name="category">[1]</a></td><td><tt class="docutils literal"><span class="pre">iterator_facade</span></tt> also supports old-style category
|
<tr><td class="label"><a class="fn-backref" href="#id11">[1]</a></td><td><tt class="docutils literal"><span class="pre">iterator_facade</span></tt> also supports old-style category
|
||||||
tags, so we could have passed <tt class="docutils literal"><span class="pre">std::forward_iterator_tag</span></tt> here;
|
tags, so we could have passed <tt class="docutils literal"><span class="pre">std::forward_iterator_tag</span></tt> here;
|
||||||
either way, the resulting iterator's <tt class="docutils literal"><span class="pre">iterator_category</span></tt> will
|
either way, the resulting iterator's <tt class="docutils literal"><span class="pre">iterator_category</span></tt> will
|
||||||
end up being <tt class="docutils literal"><span class="pre">std::forward_iterator_tag</span></tt>.</td></tr>
|
end up being <tt class="docutils literal"><span class="pre">std::forward_iterator_tag</span></tt>.</td></tr>
|
||||||
</tbody>
|
</tbody>
|
||||||
</table>
|
</table>
|
||||||
</div>
|
</div>
|
||||||
<div class="section">
|
<div class="section" id="id12">
|
||||||
<h4><a class="toc-backref" href="#id38" id="id12" name="id12"><tt class="docutils literal"><span class="pre">Reference</span></tt></a></h4>
|
<h4><a class="toc-backref" href="#id38"><tt class="docutils literal"><span class="pre">Reference</span></tt></a></h4>
|
||||||
<p>The <tt class="docutils literal"><span class="pre">Reference</span></tt> argument becomes the type returned by
|
<p>The <tt class="docutils literal"><span class="pre">Reference</span></tt> argument becomes the type returned by
|
||||||
<tt class="docutils literal"><span class="pre">node_iterator</span></tt>'s dereference operation, and will also be the
|
<tt class="docutils literal"><span class="pre">node_iterator</span></tt>'s dereference operation, and will also be the
|
||||||
same as <tt class="docutils literal"><span class="pre">std::iterator_traits<node_iterator>::reference</span></tt>. The
|
same as <tt class="docutils literal"><span class="pre">std::iterator_traits<node_iterator>::reference</span></tt>. The
|
||||||
@ -1272,8 +990,8 @@ library's default for this parameter is <tt class="docutils literal"><span class
|
|||||||
<tt class="docutils literal"><span class="pre">node_base&</span></tt> is a good choice for the iterator's <tt class="docutils literal"><span class="pre">reference</span></tt>
|
<tt class="docutils literal"><span class="pre">node_base&</span></tt> is a good choice for the iterator's <tt class="docutils literal"><span class="pre">reference</span></tt>
|
||||||
type, we can omit this argument, or pass <tt class="docutils literal"><span class="pre">use_default</span></tt>.</p>
|
type, we can omit this argument, or pass <tt class="docutils literal"><span class="pre">use_default</span></tt>.</p>
|
||||||
</div>
|
</div>
|
||||||
<div class="section">
|
<div class="section" id="difference">
|
||||||
<h4><a class="toc-backref" href="#id39" id="difference" name="difference"><tt class="docutils literal"><span class="pre">Difference</span></tt></a></h4>
|
<h4><a class="toc-backref" href="#id39"><tt class="docutils literal"><span class="pre">Difference</span></tt></a></h4>
|
||||||
<p>The <tt class="docutils literal"><span class="pre">Difference</span></tt> argument determines how the distance between
|
<p>The <tt class="docutils literal"><span class="pre">Difference</span></tt> argument determines how the distance between
|
||||||
two <tt class="docutils literal"><span class="pre">node_iterator</span></tt>s will be measured and will also be the
|
two <tt class="docutils literal"><span class="pre">node_iterator</span></tt>s will be measured and will also be the
|
||||||
same as <tt class="docutils literal"><span class="pre">std::iterator_traits<node_iterator>::difference_type</span></tt>.
|
same as <tt class="docutils literal"><span class="pre">std::iterator_traits<node_iterator>::difference_type</span></tt>.
|
||||||
@ -1299,15 +1017,15 @@ class node_iterator
|
|||||||
</pre>
|
</pre>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="section">
|
<div class="section" id="constructors-and-data-members">
|
||||||
<h3><a class="toc-backref" href="#id40" id="constructors-and-data-members" name="constructors-and-data-members">Constructors and Data Members</a></h3>
|
<h3><a class="toc-backref" href="#id40">Constructors and Data Members</a></h3>
|
||||||
<p>Next we need to decide how to represent the iterator's position.
|
<p>Next we need to decide how to represent the iterator's position.
|
||||||
This representation will take the form of data members, so we'll
|
This representation will take the form of data members, so we'll
|
||||||
also need to write constructors to initialize them. The
|
also need to write constructors to initialize them. The
|
||||||
<tt class="docutils literal"><span class="pre">node_iterator</span></tt>'s position is quite naturally represented using
|
<tt class="docutils literal"><span class="pre">node_iterator</span></tt>'s position is quite naturally represented using
|
||||||
a pointer to a <tt class="docutils literal"><span class="pre">node_base</span></tt>. We'll need a constructor to build an
|
a pointer to a <tt class="docutils literal"><span class="pre">node_base</span></tt>. We'll need a constructor to build an
|
||||||
iterator from a <tt class="docutils literal"><span class="pre">node_base*</span></tt>, and a default constructor to
|
iterator from a <tt class="docutils literal"><span class="pre">node_base*</span></tt>, and a default constructor to
|
||||||
satisfy the <a class="reference" href="new-iter-concepts.html#forward-traversal-iterators-lib-forward-traversal-iterators">forward traversal iterator</a> requirements <a class="footnote-reference" href="#default" id="id13" name="id13">[2]</a>.
|
satisfy the <a class="reference external" href="new-iter-concepts.html#forward-traversal-iterators-lib-forward-traversal-iterators">forward traversal iterator</a> requirements<a class="footnote-reference" href="#default" id="id13"><sup>2</sup></a>.
|
||||||
Our <tt class="docutils literal"><span class="pre">node_iterator</span></tt> then becomes:</p>
|
Our <tt class="docutils literal"><span class="pre">node_iterator</span></tt> then becomes:</p>
|
||||||
<pre class="literal-block">
|
<pre class="literal-block">
|
||||||
# include "node.hpp"
|
# include "node.hpp"
|
||||||
@ -1337,20 +1055,20 @@ class node_iterator
|
|||||||
<table class="docutils footnote" frame="void" id="default" rules="none">
|
<table class="docutils footnote" frame="void" id="default" rules="none">
|
||||||
<colgroup><col class="label" /><col /></colgroup>
|
<colgroup><col class="label" /><col /></colgroup>
|
||||||
<tbody valign="top">
|
<tbody valign="top">
|
||||||
<tr><td class="label"><a class="fn-backref" href="#id13" name="default">[2]</a></td><td>Technically, the C++ standard places almost no
|
<tr><td class="label"><a class="fn-backref" href="#id13">[2]</a></td><td>Technically, the C++ standard places almost no
|
||||||
requirements on a default-constructed iterator, so if we were
|
requirements on a default-constructed iterator, so if we were
|
||||||
really concerned with efficiency, we could've written the
|
really concerned with efficiency, we could've written the
|
||||||
default constructor to leave <tt class="docutils literal"><span class="pre">m_node</span></tt> uninitialized.</td></tr>
|
default constructor to leave <tt class="docutils literal"><span class="pre">m_node</span></tt> uninitialized.</td></tr>
|
||||||
</tbody>
|
</tbody>
|
||||||
</table>
|
</table>
|
||||||
</div>
|
</div>
|
||||||
<div class="section">
|
<div class="section" id="implementing-the-core-operations">
|
||||||
<h3><a class="toc-backref" href="#id41" id="implementing-the-core-operations" name="implementing-the-core-operations">Implementing the Core Operations</a></h3>
|
<h3><a class="toc-backref" href="#id41">Implementing the Core Operations</a></h3>
|
||||||
<p>The last step is to implement the <a class="reference" href="#core-operations">core operations</a> required by
|
<p>The last step is to implement the <a class="reference internal" href="#core-operations">core operations</a> required by
|
||||||
the concepts we want our iterator to model. Referring to the
|
the concepts we want our iterator to model. Referring to the
|
||||||
<a class="reference" href="#core-operations">table</a>, we can see that the first three rows are applicable
|
<a class="reference internal" href="#core-operations">table</a>, we can see that the first three rows are applicable
|
||||||
because <tt class="docutils literal"><span class="pre">node_iterator</span></tt> needs to satisfy the requirements for
|
because <tt class="docutils literal"><span class="pre">node_iterator</span></tt> needs to satisfy the requirements for
|
||||||
<a class="reference" href="new-iter-concepts.html#readable-iterators-lib-readable-iterators">readable iterator</a>, <a class="reference" href="new-iter-concepts.html#single-pass-iterators-lib-single-pass-iterators">single pass iterator</a>, and <a class="reference" href="new-iter-concepts.html#incrementable-iterators-lib-incrementable-iterators">incrementable
|
<a class="reference external" href="new-iter-concepts.html#readable-iterators-lib-readable-iterators">readable iterator</a>, <a class="reference external" href="new-iter-concepts.html#single-pass-iterators-lib-single-pass-iterators">single pass iterator</a>, and <a class="reference external" href="new-iter-concepts.html#incrementable-iterators-lib-incrementable-iterators">incrementable
|
||||||
iterator</a>.</p>
|
iterator</a>.</p>
|
||||||
<p>We therefore need to supply <tt class="docutils literal"><span class="pre">dereference</span></tt>,
|
<p>We therefore need to supply <tt class="docutils literal"><span class="pre">dereference</span></tt>,
|
||||||
<tt class="docutils literal"><span class="pre">equal</span></tt>, and <tt class="docutils literal"><span class="pre">increment</span></tt> members. We don't want these members
|
<tt class="docutils literal"><span class="pre">equal</span></tt>, and <tt class="docutils literal"><span class="pre">increment</span></tt> members. We don't want these members
|
||||||
@ -1392,11 +1110,11 @@ class node_iterator
|
|||||||
};
|
};
|
||||||
</pre>
|
</pre>
|
||||||
<p>Voilà; a complete and conforming readable, forward-traversal
|
<p>Voilà; a complete and conforming readable, forward-traversal
|
||||||
iterator! For a working example of its use, see <a class="reference" href="../example/node_iterator1.cpp">this program</a>.</p>
|
iterator! For a working example of its use, see <a class="reference external" href="../example/node_iterator1.cpp">this program</a>.</p>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="section">
|
<div class="section" id="a-constant-node-iterator">
|
||||||
<h2><a class="toc-backref" href="#id42" id="a-constant-node-iterator" name="a-constant-node-iterator">A constant <tt class="docutils literal"><span class="pre">node_iterator</span></tt></a></h2>
|
<h2><a class="toc-backref" href="#id42">A constant <tt class="docutils literal"><span class="pre">node_iterator</span></tt></a></h2>
|
||||||
<div class="sidebar">
|
<div class="sidebar">
|
||||||
<p class="first sidebar-title">Constant and Mutable iterators</p>
|
<p class="first sidebar-title">Constant and Mutable iterators</p>
|
||||||
<p>The term <strong>mutable iterator</strong> means an iterator through which
|
<p>The term <strong>mutable iterator</strong> means an iterator through which
|
||||||
@ -1496,8 +1214,8 @@ typedef node_iter<node_base> node_iterator;
|
|||||||
typedef node_iter<node_base const> node_const_iterator;
|
typedef node_iter<node_base const> node_const_iterator;
|
||||||
</pre>
|
</pre>
|
||||||
</div>
|
</div>
|
||||||
<div class="section">
|
<div class="section" id="interoperability">
|
||||||
<h2><a class="toc-backref" href="#id43" id="interoperability" name="interoperability">Interoperability</a></h2>
|
<h2><a class="toc-backref" href="#id43">Interoperability</a></h2>
|
||||||
<p>Our <tt class="docutils literal"><span class="pre">const_node_iterator</span></tt> works perfectly well on its own, but
|
<p>Our <tt class="docutils literal"><span class="pre">const_node_iterator</span></tt> works perfectly well on its own, but
|
||||||
taken together with <tt class="docutils literal"><span class="pre">node_iterator</span></tt> it doesn't quite meet
|
taken together with <tt class="docutils literal"><span class="pre">node_iterator</span></tt> it doesn't quite meet
|
||||||
expectations. For example, we'd like to be able to pass a
|
expectations. For example, we'd like to be able to pass a
|
||||||
@ -1507,9 +1225,9 @@ just as you can with <tt class="docutils literal"><span class="pre">std::list<
|
|||||||
<tt class="docutils literal"><span class="pre">node_const_iterator</span></tt> into the same list, we should be able to
|
<tt class="docutils literal"><span class="pre">node_const_iterator</span></tt> into the same list, we should be able to
|
||||||
compare them for equality.</p>
|
compare them for equality.</p>
|
||||||
<p>This expected ability to use two different iterator types together
|
<p>This expected ability to use two different iterator types together
|
||||||
is known as <a class="reference" href="new-iter-concepts.html#interoperable-iterators-lib-interoperable-iterators"><strong>interoperability</strong></a>. Achieving interoperability in
|
is known as <a class="reference external" href="new-iter-concepts.html#interoperable-iterators-lib-interoperable-iterators"><strong>interoperability</strong></a>. Achieving interoperability in
|
||||||
our case is as simple as templatizing the <tt class="docutils literal"><span class="pre">equal</span></tt> function and
|
our case is as simple as templatizing the <tt class="docutils literal"><span class="pre">equal</span></tt> function and
|
||||||
adding a templatized converting constructor <a class="footnote-reference" href="#broken" id="id16" name="id16">[3]</a> <a class="footnote-reference" href="#random" id="id17" name="id17">[4]</a>:</p>
|
adding a templatized converting constructor<a class="footnote-reference" href="#broken" id="id16"><sup>3</sup></a><a class="footnote-reference" href="#random" id="id17"><sup>4</sup></a>:</p>
|
||||||
<pre class="literal-block">
|
<pre class="literal-block">
|
||||||
template <class Value>
|
template <class Value>
|
||||||
class node_iter
|
class node_iter
|
||||||
@ -1554,23 +1272,23 @@ typedef impl::node_iterator<node_base const> node_const_iterator;
|
|||||||
<table class="docutils footnote" frame="void" id="broken" rules="none">
|
<table class="docutils footnote" frame="void" id="broken" rules="none">
|
||||||
<colgroup><col class="label" /><col /></colgroup>
|
<colgroup><col class="label" /><col /></colgroup>
|
||||||
<tbody valign="top">
|
<tbody valign="top">
|
||||||
<tr><td class="label"><a class="fn-backref" href="#id16" name="broken">[3]</a></td><td>If you're using an older compiler and it can't handle
|
<tr><td class="label"><a class="fn-backref" href="#id16">[3]</a></td><td>If you're using an older compiler and it can't handle
|
||||||
this example, see the <a class="reference" href="../example/node_iterator2.hpp">example code</a> for workarounds.</td></tr>
|
this example, see the <a class="reference external" href="../example/node_iterator2.hpp">example code</a> for workarounds.</td></tr>
|
||||||
</tbody>
|
</tbody>
|
||||||
</table>
|
</table>
|
||||||
<table class="docutils footnote" frame="void" id="random" rules="none">
|
<table class="docutils footnote" frame="void" id="random" rules="none">
|
||||||
<colgroup><col class="label" /><col /></colgroup>
|
<colgroup><col class="label" /><col /></colgroup>
|
||||||
<tbody valign="top">
|
<tbody valign="top">
|
||||||
<tr><td class="label"><a class="fn-backref" href="#id17" name="random">[4]</a></td><td>If <tt class="docutils literal"><span class="pre">node_iterator</span></tt> had been a <a class="reference" href="new-iter-concepts.html#random-access-traversal-iterators-lib-random-access-traversal-iterators">random access
|
<tr><td class="label"><a class="fn-backref" href="#id17">[4]</a></td><td>If <tt class="docutils literal"><span class="pre">node_iterator</span></tt> had been a <a class="reference external" href="new-iter-concepts.html#random-access-traversal-iterators-lib-random-access-traversal-iterators">random access
|
||||||
traversal iterator</a>, we'd have had to templatize its
|
traversal iterator</a>, we'd have had to templatize its
|
||||||
<tt class="docutils literal"><span class="pre">distance_to</span></tt> function as well.</td></tr>
|
<tt class="docutils literal"><span class="pre">distance_to</span></tt> function as well.</td></tr>
|
||||||
</tbody>
|
</tbody>
|
||||||
</table>
|
</table>
|
||||||
<p>You can see an example program which exercises our interoperable
|
<p>You can see an example program which exercises our interoperable
|
||||||
iterators <a class="reference" href="../example/node_iterator2.cpp">here</a>.</p>
|
iterators <a class="reference external" href="../example/node_iterator2.cpp">here</a>.</p>
|
||||||
</div>
|
</div>
|
||||||
<div class="section">
|
<div class="section" id="telling-the-truth">
|
||||||
<h2><a class="toc-backref" href="#id44" id="telling-the-truth" name="telling-the-truth">Telling the Truth</a></h2>
|
<h2><a class="toc-backref" href="#id44">Telling the Truth</a></h2>
|
||||||
<p>Now <tt class="docutils literal"><span class="pre">node_iterator</span></tt> and <tt class="docutils literal"><span class="pre">node_const_iterator</span></tt> behave exactly as
|
<p>Now <tt class="docutils literal"><span class="pre">node_iterator</span></tt> and <tt class="docutils literal"><span class="pre">node_const_iterator</span></tt> behave exactly as
|
||||||
you'd expect... almost. We can compare them and we can convert in
|
you'd expect... almost. We can compare them and we can convert in
|
||||||
one direction: from <tt class="docutils literal"><span class="pre">node_iterator</span></tt> to <tt class="docutils literal"><span class="pre">node_const_iterator</span></tt>.
|
one direction: from <tt class="docutils literal"><span class="pre">node_iterator</span></tt> to <tt class="docutils literal"><span class="pre">node_const_iterator</span></tt>.
|
||||||
@ -1579,15 +1297,15 @@ If we try to convert from <tt class="docutils literal"><span class="pre">node_co
|
|||||||
constructor tries to initialize <tt class="docutils literal"><span class="pre">node_iterator</span></tt>'s <tt class="docutils literal"><span class="pre">m_node</span></tt>, a
|
constructor tries to initialize <tt class="docutils literal"><span class="pre">node_iterator</span></tt>'s <tt class="docutils literal"><span class="pre">m_node</span></tt>, a
|
||||||
<tt class="docutils literal"><span class="pre">node*</span></tt> with a <tt class="docutils literal"><span class="pre">node</span> <span class="pre">const*</span></tt>. So what's the problem?</p>
|
<tt class="docutils literal"><span class="pre">node*</span></tt> with a <tt class="docutils literal"><span class="pre">node</span> <span class="pre">const*</span></tt>. So what's the problem?</p>
|
||||||
<p>The problem is that
|
<p>The problem is that
|
||||||
<tt class="docutils literal"><span class="pre">boost::</span></tt><a class="reference" href="../../type_traits/index.html#relationships"><tt class="docutils literal"><span class="pre">is_convertible</span></tt></a><tt class="docutils literal"><span class="pre"><node_const_iterator,node_iterator>::value</span></tt>
|
<tt class="docutils literal"><span class="pre">boost::</span></tt><a class="reference external" href="../../type_traits/index.html#relationships"><tt class="docutils literal"><span class="pre">is_convertible</span></tt></a><tt class="docutils literal"><span class="pre"><node_const_iterator,node_iterator>::value</span></tt>
|
||||||
will be <tt class="docutils literal"><span class="pre">true</span></tt>, but it should be <tt class="docutils literal"><span class="pre">false</span></tt>. <a class="reference" href="../../type_traits/index.html#relationships"><tt class="docutils literal"><span class="pre">is_convertible</span></tt></a>
|
will be <tt class="docutils literal"><span class="pre">true</span></tt>, but it should be <tt class="docutils literal"><span class="pre">false</span></tt>. <a class="reference external" href="../../type_traits/index.html#relationships"><tt class="docutils literal"><span class="pre">is_convertible</span></tt></a>
|
||||||
lies because it can only see as far as the <em>declaration</em> of
|
lies because it can only see as far as the <em>declaration</em> of
|
||||||
<tt class="docutils literal"><span class="pre">node_iter</span></tt>'s converting constructor, but can't look inside at
|
<tt class="docutils literal"><span class="pre">node_iter</span></tt>'s converting constructor, but can't look inside at
|
||||||
the <em>definition</em> to make sure it will compile. A perfect solution
|
the <em>definition</em> to make sure it will compile. A perfect solution
|
||||||
would make <tt class="docutils literal"><span class="pre">node_iter</span></tt>'s converting constructor disappear when
|
would make <tt class="docutils literal"><span class="pre">node_iter</span></tt>'s converting constructor disappear when
|
||||||
the <tt class="docutils literal"><span class="pre">m_node</span></tt> conversion would fail.</p>
|
the <tt class="docutils literal"><span class="pre">m_node</span></tt> conversion would fail.</p>
|
||||||
<p>In fact, that sort of magic is possible using
|
<p>In fact, that sort of magic is possible using
|
||||||
<a class="reference" href="../../utility/enable_if.html"><tt class="docutils literal"><span class="pre">boost::enable_if</span></tt></a>. By rewriting the converting constructor as
|
<a class="reference external" href="../../utility/enable_if.html"><tt class="docutils literal"><span class="pre">boost::enable_if</span></tt></a>. By rewriting the converting constructor as
|
||||||
follows, we can remove it from the overload set when it's not
|
follows, we can remove it from the overload set when it's not
|
||||||
appropriate:</p>
|
appropriate:</p>
|
||||||
<pre class="literal-block">
|
<pre class="literal-block">
|
||||||
@ -1611,14 +1329,20 @@ public:
|
|||||||
: m_node(other.m_node) {}
|
: m_node(other.m_node) {}
|
||||||
</pre>
|
</pre>
|
||||||
</div>
|
</div>
|
||||||
<div class="section">
|
<div class="section" id="wrap-up">
|
||||||
<h2><a class="toc-backref" href="#id45" id="wrap-up" name="wrap-up">Wrap Up</a></h2>
|
<h2><a class="toc-backref" href="#id45">Wrap Up</a></h2>
|
||||||
<p>This concludes our <tt class="docutils literal"><span class="pre">iterator_facade</span></tt> tutorial, but before you
|
<p>This concludes our <tt class="docutils literal"><span class="pre">iterator_facade</span></tt> tutorial, but before you
|
||||||
stop reading we urge you to take a look at <a class="reference" href="iterator_adaptor.html"><tt class="docutils literal"><span class="pre">iterator_adaptor</span></tt></a>.
|
stop reading we urge you to take a look at <a class="reference external" href="iterator_adaptor.html"><tt class="docutils literal"><span class="pre">iterator_adaptor</span></tt></a>.
|
||||||
There's another way to approach writing these iterators which might
|
There's another way to approach writing these iterators which might
|
||||||
even be superior.</p>
|
even be superior.</p>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="footer">
|
||||||
|
<hr class="footer" />
|
||||||
|
<a class="reference external" href="iterator_facade.rst">View document source</a>.
|
||||||
|
Generated by <a class="reference external" href="http://docutils.sourceforge.net/">Docutils</a> from <a class="reference external" href="http://docutils.sourceforge.net/rst.html">reStructuredText</a> source.
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
</body>
|
</body>
|
||||||
</html>
|
</html>
|
||||||
|
0
doc/iterator_facade.pdf
Executable file → Normal file
0
doc/iterator_facade.pdf
Executable file → Normal file
@ -167,9 +167,9 @@ the implementation of her iterator is free to implement an
|
|||||||
class; it will hide the one supplied by ``iterator_facade`` from
|
class; it will hide the one supplied by ``iterator_facade`` from
|
||||||
clients of her iterator.
|
clients of her iterator.
|
||||||
|
|
||||||
.. _n1550: http://anubis.dkuug.dk/JTC1/SC22/WG21/docs/papers/2003/n1550.html
|
.. _n1550: http://www.open-std.org/JTC1/SC22/WG21/docs/papers/2003/n1550.htm
|
||||||
|
|
||||||
.. _`issue 299`: http://anubis.dkuug.dk/jtc1/sc22/wg21/docs/lwg-active.html#299
|
.. _`issue 299`: http://www.open-std.org/jtc1/sc22/wg21/docs/lwg-active.html#299
|
||||||
|
|
||||||
.. _`operator arrow`:
|
.. _`operator arrow`:
|
||||||
|
|
||||||
|
@ -106,7 +106,7 @@ The ``iterator_category`` member of ``iterator_facade`` is
|
|||||||
|
|
||||||
.. parsed-literal::
|
.. parsed-literal::
|
||||||
|
|
||||||
*iterator-category*\ (CategoryOrTraversal, value_type, reference)
|
*iterator-category*\ (CategoryOrTraversal, reference, value_type)
|
||||||
|
|
||||||
where *iterator-category* is defined as follows:
|
where *iterator-category* is defined as follows:
|
||||||
|
|
||||||
|
2
doc/iterator_facade_tutorial.rst
Executable file → Normal file
2
doc/iterator_facade_tutorial.rst
Executable file → Normal file
@ -8,7 +8,7 @@ example of a linked list of polymorphic objects. This example was
|
|||||||
inspired by a `posting`__ by Keith Macdonald on the `Boost-Users`_
|
inspired by a `posting`__ by Keith Macdonald on the `Boost-Users`_
|
||||||
mailing list.
|
mailing list.
|
||||||
|
|
||||||
.. _`Boost-Users`: ../../../more/mailing_lists.htm#users
|
.. _`Boost-Users`: http://www.boost.org/more/mailing_lists.htm#users
|
||||||
|
|
||||||
__ http://thread.gmane.org/gmane.comp.lib.boost.user/5100
|
__ http://thread.gmane.org/gmane.comp.lib.boost.user/5100
|
||||||
|
|
||||||
|
335
doc/iterator_traits.html
Executable file → Normal file
335
doc/iterator_traits.html
Executable file → Normal file
@ -3,295 +3,13 @@
|
|||||||
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
|
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
|
||||||
<head>
|
<head>
|
||||||
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
|
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
|
||||||
<meta name="generator" content="Docutils 0.4: http://docutils.sourceforge.net/" />
|
<meta name="generator" content="Docutils 0.11: http://docutils.sourceforge.net/" />
|
||||||
<title>Iterator Traits</title>
|
<title>Iterator Traits</title>
|
||||||
<meta name="author" content="David Abrahams" />
|
<meta name="author" content="David Abrahams" />
|
||||||
<meta name="organization" content="Boost Consulting" />
|
<meta name="organization" content="Boost Consulting" />
|
||||||
<meta name="date" content="2004-11-01" />
|
<meta name="date" content="$Date$" />
|
||||||
<meta name="copyright" content="Copyright David Abrahams 2004." />
|
<meta name="copyright" content="Copyright David Abrahams 2004." />
|
||||||
<style type="text/css">
|
<link rel="stylesheet" href="../../../rst.css" type="text/css" />
|
||||||
|
|
||||||
/*
|
|
||||||
:Author: David Goodger
|
|
||||||
:Contact: goodger@users.sourceforge.net
|
|
||||||
:Date: $Date$
|
|
||||||
:Revision: $Revision$
|
|
||||||
:Copyright: This stylesheet has been placed in the public domain.
|
|
||||||
|
|
||||||
Default cascading style sheet for the HTML output of Docutils.
|
|
||||||
|
|
||||||
See http://docutils.sf.net/docs/howto/html-stylesheets.html for how to
|
|
||||||
customize this style sheet.
|
|
||||||
*/
|
|
||||||
|
|
||||||
/* used to remove borders from tables and images */
|
|
||||||
.borderless, table.borderless td, table.borderless th {
|
|
||||||
border: 0 }
|
|
||||||
|
|
||||||
table.borderless td, table.borderless th {
|
|
||||||
/* Override padding for "table.docutils td" with "! important".
|
|
||||||
The right padding separates the table cells. */
|
|
||||||
padding: 0 0.5em 0 0 ! important }
|
|
||||||
|
|
||||||
.first {
|
|
||||||
/* Override more specific margin styles with "! important". */
|
|
||||||
margin-top: 0 ! important }
|
|
||||||
|
|
||||||
.last, .with-subtitle {
|
|
||||||
margin-bottom: 0 ! important }
|
|
||||||
|
|
||||||
.hidden {
|
|
||||||
display: none }
|
|
||||||
|
|
||||||
a.toc-backref {
|
|
||||||
text-decoration: none ;
|
|
||||||
color: black }
|
|
||||||
|
|
||||||
blockquote.epigraph {
|
|
||||||
margin: 2em 5em ; }
|
|
||||||
|
|
||||||
dl.docutils dd {
|
|
||||||
margin-bottom: 0.5em }
|
|
||||||
|
|
||||||
/* Uncomment (and remove this text!) to get bold-faced definition list terms
|
|
||||||
dl.docutils dt {
|
|
||||||
font-weight: bold }
|
|
||||||
*/
|
|
||||||
|
|
||||||
div.abstract {
|
|
||||||
margin: 2em 5em }
|
|
||||||
|
|
||||||
div.abstract p.topic-title {
|
|
||||||
font-weight: bold ;
|
|
||||||
text-align: center }
|
|
||||||
|
|
||||||
div.admonition, div.attention, div.caution, div.danger, div.error,
|
|
||||||
div.hint, div.important, div.note, div.tip, div.warning {
|
|
||||||
margin: 2em ;
|
|
||||||
border: medium outset ;
|
|
||||||
padding: 1em }
|
|
||||||
|
|
||||||
div.admonition p.admonition-title, div.hint p.admonition-title,
|
|
||||||
div.important p.admonition-title, div.note p.admonition-title,
|
|
||||||
div.tip p.admonition-title {
|
|
||||||
font-weight: bold ;
|
|
||||||
font-family: sans-serif }
|
|
||||||
|
|
||||||
div.attention p.admonition-title, div.caution p.admonition-title,
|
|
||||||
div.danger p.admonition-title, div.error p.admonition-title,
|
|
||||||
div.warning p.admonition-title {
|
|
||||||
color: red ;
|
|
||||||
font-weight: bold ;
|
|
||||||
font-family: sans-serif }
|
|
||||||
|
|
||||||
/* Uncomment (and remove this text!) to get reduced vertical space in
|
|
||||||
compound paragraphs.
|
|
||||||
div.compound .compound-first, div.compound .compound-middle {
|
|
||||||
margin-bottom: 0.5em }
|
|
||||||
|
|
||||||
div.compound .compound-last, div.compound .compound-middle {
|
|
||||||
margin-top: 0.5em }
|
|
||||||
*/
|
|
||||||
|
|
||||||
div.dedication {
|
|
||||||
margin: 2em 5em ;
|
|
||||||
text-align: center ;
|
|
||||||
font-style: italic }
|
|
||||||
|
|
||||||
div.dedication p.topic-title {
|
|
||||||
font-weight: bold ;
|
|
||||||
font-style: normal }
|
|
||||||
|
|
||||||
div.figure {
|
|
||||||
margin-left: 2em ;
|
|
||||||
margin-right: 2em }
|
|
||||||
|
|
||||||
div.footer, div.header {
|
|
||||||
clear: both;
|
|
||||||
font-size: smaller }
|
|
||||||
|
|
||||||
div.line-block {
|
|
||||||
display: block ;
|
|
||||||
margin-top: 1em ;
|
|
||||||
margin-bottom: 1em }
|
|
||||||
|
|
||||||
div.line-block div.line-block {
|
|
||||||
margin-top: 0 ;
|
|
||||||
margin-bottom: 0 ;
|
|
||||||
margin-left: 1.5em }
|
|
||||||
|
|
||||||
div.sidebar {
|
|
||||||
margin-left: 1em ;
|
|
||||||
border: medium outset ;
|
|
||||||
padding: 1em ;
|
|
||||||
background-color: #ffffee ;
|
|
||||||
width: 40% ;
|
|
||||||
float: right ;
|
|
||||||
clear: right }
|
|
||||||
|
|
||||||
div.sidebar p.rubric {
|
|
||||||
font-family: sans-serif ;
|
|
||||||
font-size: medium }
|
|
||||||
|
|
||||||
div.system-messages {
|
|
||||||
margin: 5em }
|
|
||||||
|
|
||||||
div.system-messages h1 {
|
|
||||||
color: red }
|
|
||||||
|
|
||||||
div.system-message {
|
|
||||||
border: medium outset ;
|
|
||||||
padding: 1em }
|
|
||||||
|
|
||||||
div.system-message p.system-message-title {
|
|
||||||
color: red ;
|
|
||||||
font-weight: bold }
|
|
||||||
|
|
||||||
div.topic {
|
|
||||||
margin: 2em }
|
|
||||||
|
|
||||||
h1.section-subtitle, h2.section-subtitle, h3.section-subtitle,
|
|
||||||
h4.section-subtitle, h5.section-subtitle, h6.section-subtitle {
|
|
||||||
margin-top: 0.4em }
|
|
||||||
|
|
||||||
h1.title {
|
|
||||||
text-align: center }
|
|
||||||
|
|
||||||
h2.subtitle {
|
|
||||||
text-align: center }
|
|
||||||
|
|
||||||
hr.docutils {
|
|
||||||
width: 75% }
|
|
||||||
|
|
||||||
img.align-left {
|
|
||||||
clear: left }
|
|
||||||
|
|
||||||
img.align-right {
|
|
||||||
clear: right }
|
|
||||||
|
|
||||||
ol.simple, ul.simple {
|
|
||||||
margin-bottom: 1em }
|
|
||||||
|
|
||||||
ol.arabic {
|
|
||||||
list-style: decimal }
|
|
||||||
|
|
||||||
ol.loweralpha {
|
|
||||||
list-style: lower-alpha }
|
|
||||||
|
|
||||||
ol.upperalpha {
|
|
||||||
list-style: upper-alpha }
|
|
||||||
|
|
||||||
ol.lowerroman {
|
|
||||||
list-style: lower-roman }
|
|
||||||
|
|
||||||
ol.upperroman {
|
|
||||||
list-style: upper-roman }
|
|
||||||
|
|
||||||
p.attribution {
|
|
||||||
text-align: right ;
|
|
||||||
margin-left: 50% }
|
|
||||||
|
|
||||||
p.caption {
|
|
||||||
font-style: italic }
|
|
||||||
|
|
||||||
p.credits {
|
|
||||||
font-style: italic ;
|
|
||||||
font-size: smaller }
|
|
||||||
|
|
||||||
p.label {
|
|
||||||
white-space: nowrap }
|
|
||||||
|
|
||||||
p.rubric {
|
|
||||||
font-weight: bold ;
|
|
||||||
font-size: larger ;
|
|
||||||
color: maroon ;
|
|
||||||
text-align: center }
|
|
||||||
|
|
||||||
p.sidebar-title {
|
|
||||||
font-family: sans-serif ;
|
|
||||||
font-weight: bold ;
|
|
||||||
font-size: larger }
|
|
||||||
|
|
||||||
p.sidebar-subtitle {
|
|
||||||
font-family: sans-serif ;
|
|
||||||
font-weight: bold }
|
|
||||||
|
|
||||||
p.topic-title {
|
|
||||||
font-weight: bold }
|
|
||||||
|
|
||||||
pre.address {
|
|
||||||
margin-bottom: 0 ;
|
|
||||||
margin-top: 0 ;
|
|
||||||
font-family: serif ;
|
|
||||||
font-size: 100% }
|
|
||||||
|
|
||||||
pre.literal-block, pre.doctest-block {
|
|
||||||
margin-left: 2em ;
|
|
||||||
margin-right: 2em ;
|
|
||||||
background-color: #eeeeee }
|
|
||||||
|
|
||||||
span.classifier {
|
|
||||||
font-family: sans-serif ;
|
|
||||||
font-style: oblique }
|
|
||||||
|
|
||||||
span.classifier-delimiter {
|
|
||||||
font-family: sans-serif ;
|
|
||||||
font-weight: bold }
|
|
||||||
|
|
||||||
span.interpreted {
|
|
||||||
font-family: sans-serif }
|
|
||||||
|
|
||||||
span.option {
|
|
||||||
white-space: nowrap }
|
|
||||||
|
|
||||||
span.pre {
|
|
||||||
white-space: pre }
|
|
||||||
|
|
||||||
span.problematic {
|
|
||||||
color: red }
|
|
||||||
|
|
||||||
span.section-subtitle {
|
|
||||||
/* font-size relative to parent (h1..h6 element) */
|
|
||||||
font-size: 80% }
|
|
||||||
|
|
||||||
table.citation {
|
|
||||||
border-left: solid 1px gray;
|
|
||||||
margin-left: 1px }
|
|
||||||
|
|
||||||
table.docinfo {
|
|
||||||
margin: 2em 4em }
|
|
||||||
|
|
||||||
table.docutils {
|
|
||||||
margin-top: 0.5em ;
|
|
||||||
margin-bottom: 0.5em }
|
|
||||||
|
|
||||||
table.footnote {
|
|
||||||
border-left: solid 1px black;
|
|
||||||
margin-left: 1px }
|
|
||||||
|
|
||||||
table.docutils td, table.docutils th,
|
|
||||||
table.docinfo td, table.docinfo th {
|
|
||||||
padding-left: 0.5em ;
|
|
||||||
padding-right: 0.5em ;
|
|
||||||
vertical-align: top }
|
|
||||||
|
|
||||||
table.docutils th.field-name, table.docinfo th.docinfo-name {
|
|
||||||
font-weight: bold ;
|
|
||||||
text-align: left ;
|
|
||||||
white-space: nowrap ;
|
|
||||||
padding-left: 0 }
|
|
||||||
|
|
||||||
h1 tt.docutils, h2 tt.docutils, h3 tt.docutils,
|
|
||||||
h4 tt.docutils, h5 tt.docutils, h6 tt.docutils {
|
|
||||||
font-size: 100% }
|
|
||||||
|
|
||||||
tt.docutils {
|
|
||||||
background-color: #eeeeee }
|
|
||||||
|
|
||||||
ul.auto-toc {
|
|
||||||
list-style-type: none }
|
|
||||||
|
|
||||||
</style>
|
|
||||||
</head>
|
</head>
|
||||||
<body>
|
<body>
|
||||||
<div class="document" id="iterator-traits">
|
<div class="document" id="iterator-traits">
|
||||||
@ -303,11 +21,11 @@ ul.auto-toc {
|
|||||||
<tr><th class="docinfo-name">Author:</th>
|
<tr><th class="docinfo-name">Author:</th>
|
||||||
<td>David Abrahams</td></tr>
|
<td>David Abrahams</td></tr>
|
||||||
<tr><th class="docinfo-name">Contact:</th>
|
<tr><th class="docinfo-name">Contact:</th>
|
||||||
<td><a class="first last reference" href="mailto:dave@boost-consulting.com">dave@boost-consulting.com</a></td></tr>
|
<td><a class="first last reference external" href="mailto:dave@boost-consulting.com">dave@boost-consulting.com</a></td></tr>
|
||||||
<tr><th class="docinfo-name">Organization:</th>
|
<tr><th class="docinfo-name">Organization:</th>
|
||||||
<td><a class="first last reference" href="http://www.boost-consulting.com">Boost Consulting</a></td></tr>
|
<td><a class="first last reference external" href="http://www.boost-consulting.com">Boost Consulting</a></td></tr>
|
||||||
<tr><th class="docinfo-name">Date:</th>
|
<tr><th class="docinfo-name">Date:</th>
|
||||||
<td>2004-11-01</td></tr>
|
<td>$Date$</td></tr>
|
||||||
<tr><th class="docinfo-name">Copyright:</th>
|
<tr><th class="docinfo-name">Copyright:</th>
|
||||||
<td>Copyright David Abrahams 2004.</td></tr>
|
<td>Copyright David Abrahams 2004.</td></tr>
|
||||||
</tbody>
|
</tbody>
|
||||||
@ -319,24 +37,24 @@ ul.auto-toc {
|
|||||||
<col class="field-name" />
|
<col class="field-name" />
|
||||||
<col class="field-body" />
|
<col class="field-body" />
|
||||||
<tbody valign="top">
|
<tbody valign="top">
|
||||||
<tr class="field"><th class="field-name">abstract:</th><td class="field-body">Header <tt class="docutils literal"><span class="pre"><boost/iterator/iterator_traits.hpp></span></tt> provides
|
<tr class="field"><th class="field-name">abstract:</th><td class="field-body">Header <tt class="docutils literal"><boost/iterator/iterator_traits.hpp></tt> provides
|
||||||
the ability to access an iterator's associated types using
|
the ability to access an iterator's associated types using
|
||||||
MPL-compatible <a class="reference" href="../../mpl/doc/index.html#metafunctions">metafunctions</a>.</td>
|
MPL-compatible <a class="reference external" href="../../mpl/doc/index.html#metafunctions">metafunctions</a>.</td>
|
||||||
</tr>
|
</tr>
|
||||||
</tbody>
|
</tbody>
|
||||||
</table>
|
</table>
|
||||||
<div class="section">
|
<div class="section" id="overview">
|
||||||
<h1><a id="overview" name="overview">Overview</a></h1>
|
<h1>Overview</h1>
|
||||||
<p><tt class="docutils literal"><span class="pre">std::iterator_traits</span></tt> provides access to five associated types
|
<p><tt class="docutils literal"><span class="pre">std::iterator_traits</span></tt> provides access to five associated types
|
||||||
of any iterator: its <tt class="docutils literal"><span class="pre">value_type</span></tt>, <tt class="docutils literal"><span class="pre">reference</span></tt>, <tt class="docutils literal"><span class="pre">pointer</span></tt>,
|
of any iterator: its <tt class="docutils literal">value_type</tt>, <tt class="docutils literal">reference</tt>, <tt class="docutils literal">pointer</tt>,
|
||||||
<tt class="docutils literal"><span class="pre">iterator_category</span></tt>, and <tt class="docutils literal"><span class="pre">difference_type</span></tt>. Unfortunately,
|
<tt class="docutils literal">iterator_category</tt>, and <tt class="docutils literal">difference_type</tt>. Unfortunately,
|
||||||
such a "multi-valued" traits template can be difficult to use in a
|
such a "multi-valued" traits template can be difficult to use in a
|
||||||
metaprogramming context. <tt class="docutils literal"><span class="pre"><boost/iterator/iterator_traits.hpp></span></tt>
|
metaprogramming context. <tt class="docutils literal"><boost/iterator/iterator_traits.hpp></tt>
|
||||||
provides access to these types using a standard <a class="reference" href="../../mpl/doc/index.html#metafunctions">metafunctions</a>.</p>
|
provides access to these types using a standard <a class="reference external" href="../../mpl/doc/index.html#metafunctions">metafunctions</a>.</p>
|
||||||
</div>
|
</div>
|
||||||
<div class="section">
|
<div class="section" id="summary">
|
||||||
<h1><a id="summary" name="summary">Summary</a></h1>
|
<h1>Summary</h1>
|
||||||
<p>Header <tt class="docutils literal"><span class="pre"><boost/iterator/iterator_traits.hpp></span></tt>:</p>
|
<p>Header <tt class="docutils literal"><boost/iterator/iterator_traits.hpp></tt>:</p>
|
||||||
<pre class="literal-block">
|
<pre class="literal-block">
|
||||||
template <class Iterator>
|
template <class Iterator>
|
||||||
struct iterator_value
|
struct iterator_value
|
||||||
@ -380,21 +98,12 @@ struct iterator_category
|
|||||||
};
|
};
|
||||||
</pre>
|
</pre>
|
||||||
</div>
|
</div>
|
||||||
<div class="section">
|
|
||||||
<h1><a id="broken-compiler-notes" name="broken-compiler-notes">Broken Compiler Notes</a></h1>
|
|
||||||
<p>Because of workarounds in Boost, you may find that these
|
|
||||||
<a class="reference" href="../../mpl/doc/index.html#metafunctions">metafunctions</a> actually work better than the facilities provided by
|
|
||||||
your compiler's standard library.</p>
|
|
||||||
<p>On compilers that don't support partial specialization, such as
|
|
||||||
Microsoft Visual C++ 6.0 or 7.0, you may need to manually invoke
|
|
||||||
<a class="reference" href="../../type_traits/index.html#transformations">BOOST_BROKEN_COMPILER_TYPE_TRAITS_SPECIALIZATION</a> on the
|
|
||||||
<tt class="docutils literal"><span class="pre">value_type</span></tt> of pointers that are passed to these metafunctions.</p>
|
|
||||||
<p>Because of bugs in the implementation of GCC-2.9x, the name of
|
|
||||||
<tt class="docutils literal"><span class="pre">iterator_category</span></tt> is changed to <tt class="docutils literal"><span class="pre">iterator_category_</span></tt> on that
|
|
||||||
compiler. A macro, <tt class="docutils literal"><span class="pre">BOOST_ITERATOR_CATEGORY</span></tt>, that expands to
|
|
||||||
either <tt class="docutils literal"><span class="pre">iterator_category</span></tt> or <tt class="docutils literal"><span class="pre">iterator_category_</span></tt>, as
|
|
||||||
appropriate to the platform, is provided for portability.</p>
|
|
||||||
</div>
|
</div>
|
||||||
|
<div class="footer">
|
||||||
|
<hr class="footer" />
|
||||||
|
<a class="reference external" href="iterator_traits.rst">View document source</a>.
|
||||||
|
Generated by <a class="reference external" href="http://docutils.sourceforge.net/">Docutils</a> from <a class="reference external" href="http://docutils.sourceforge.net/rst.html">reStructuredText</a> source.
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
</body>
|
</body>
|
||||||
</html>
|
</html>
|
||||||
|
0
doc/iterator_traits.pdf
Executable file → Normal file
0
doc/iterator_traits.pdf
Executable file → Normal file
21
doc/iterator_traits.rst
Executable file → Normal file
21
doc/iterator_traits.rst
Executable file → Normal file
@ -75,24 +75,3 @@ Header ``<boost/iterator/iterator_traits.hpp>``::
|
|||||||
detail::iterator_traits<Iterator>::iterator_category
|
detail::iterator_traits<Iterator>::iterator_category
|
||||||
type;
|
type;
|
||||||
};
|
};
|
||||||
|
|
||||||
Broken Compiler Notes
|
|
||||||
=====================
|
|
||||||
|
|
||||||
Because of workarounds in Boost, you may find that these
|
|
||||||
metafunctions_ actually work better than the facilities provided by
|
|
||||||
your compiler's standard library.
|
|
||||||
|
|
||||||
On compilers that don't support partial specialization, such as
|
|
||||||
Microsoft Visual C++ 6.0 or 7.0, you may need to manually invoke
|
|
||||||
BOOST_BROKEN_COMPILER_TYPE_TRAITS_SPECIALIZATION_ on the
|
|
||||||
``value_type`` of pointers that are passed to these metafunctions.
|
|
||||||
|
|
||||||
Because of bugs in the implementation of GCC-2.9x, the name of
|
|
||||||
``iterator_category`` is changed to ``iterator_category_`` on that
|
|
||||||
compiler. A macro, ``BOOST_ITERATOR_CATEGORY``, that expands to
|
|
||||||
either ``iterator_category`` or ``iterator_category_``, as
|
|
||||||
appropriate to the platform, is provided for portability.
|
|
||||||
|
|
||||||
.. _BOOST_BROKEN_COMPILER_TYPE_TRAITS_SPECIALIZATION: ../../type_traits/index.html#transformations
|
|
||||||
|
|
||||||
|
0
doc/make_counting_iterator.rst
Executable file → Normal file
0
doc/make_counting_iterator.rst
Executable file → Normal file
0
doc/make_filter_iterator.rst
Executable file → Normal file
0
doc/make_filter_iterator.rst
Executable file → Normal file
0
doc/make_transform_iterator.rst
Executable file → Normal file
0
doc/make_transform_iterator.rst
Executable file → Normal file
0
doc/make_zip_iterator.rst
Executable file → Normal file
0
doc/make_zip_iterator.rst
Executable file → Normal file
491
doc/new-iter-concepts.html
Executable file → Normal file
491
doc/new-iter-concepts.html
Executable file → Normal file
@ -3,295 +3,13 @@
|
|||||||
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
|
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
|
||||||
<head>
|
<head>
|
||||||
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
|
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
|
||||||
<meta name="generator" content="Docutils 0.4: http://docutils.sourceforge.net/" />
|
<meta name="generator" content="Docutils 0.5: http://docutils.sourceforge.net/" />
|
||||||
<title>New Iterator Concepts</title>
|
<title>New Iterator Concepts</title>
|
||||||
<meta name="author" content="David Abrahams, Jeremy Siek, Thomas Witt" />
|
<meta name="author" content="David Abrahams, Jeremy Siek, Thomas Witt" />
|
||||||
<meta name="organization" content="Boost Consulting, Indiana University Open Systems Lab, Zephyr Associates, Inc." />
|
<meta name="organization" content="Boost Consulting, Indiana University Open Systems Lab, Zephyr Associates, Inc." />
|
||||||
<meta name="date" content="2006-04-30" />
|
<meta name="date" content="2006-09-11" />
|
||||||
<meta name="copyright" content="Copyright David Abrahams, Jeremy Siek, and Thomas Witt 2003." />
|
<meta name="copyright" content="Copyright David Abrahams, Jeremy Siek, and Thomas Witt 2003." />
|
||||||
<style type="text/css">
|
<link rel="stylesheet" href="../../../rst.css" type="text/css" />
|
||||||
|
|
||||||
/*
|
|
||||||
:Author: David Goodger
|
|
||||||
:Contact: goodger@users.sourceforge.net
|
|
||||||
:Date: $Date$
|
|
||||||
:Revision: $Revision$
|
|
||||||
:Copyright: This stylesheet has been placed in the public domain.
|
|
||||||
|
|
||||||
Default cascading style sheet for the HTML output of Docutils.
|
|
||||||
|
|
||||||
See http://docutils.sf.net/docs/howto/html-stylesheets.html for how to
|
|
||||||
customize this style sheet.
|
|
||||||
*/
|
|
||||||
|
|
||||||
/* used to remove borders from tables and images */
|
|
||||||
.borderless, table.borderless td, table.borderless th {
|
|
||||||
border: 0 }
|
|
||||||
|
|
||||||
table.borderless td, table.borderless th {
|
|
||||||
/* Override padding for "table.docutils td" with "! important".
|
|
||||||
The right padding separates the table cells. */
|
|
||||||
padding: 0 0.5em 0 0 ! important }
|
|
||||||
|
|
||||||
.first {
|
|
||||||
/* Override more specific margin styles with "! important". */
|
|
||||||
margin-top: 0 ! important }
|
|
||||||
|
|
||||||
.last, .with-subtitle {
|
|
||||||
margin-bottom: 0 ! important }
|
|
||||||
|
|
||||||
.hidden {
|
|
||||||
display: none }
|
|
||||||
|
|
||||||
a.toc-backref {
|
|
||||||
text-decoration: none ;
|
|
||||||
color: black }
|
|
||||||
|
|
||||||
blockquote.epigraph {
|
|
||||||
margin: 2em 5em ; }
|
|
||||||
|
|
||||||
dl.docutils dd {
|
|
||||||
margin-bottom: 0.5em }
|
|
||||||
|
|
||||||
/* Uncomment (and remove this text!) to get bold-faced definition list terms
|
|
||||||
dl.docutils dt {
|
|
||||||
font-weight: bold }
|
|
||||||
*/
|
|
||||||
|
|
||||||
div.abstract {
|
|
||||||
margin: 2em 5em }
|
|
||||||
|
|
||||||
div.abstract p.topic-title {
|
|
||||||
font-weight: bold ;
|
|
||||||
text-align: center }
|
|
||||||
|
|
||||||
div.admonition, div.attention, div.caution, div.danger, div.error,
|
|
||||||
div.hint, div.important, div.note, div.tip, div.warning {
|
|
||||||
margin: 2em ;
|
|
||||||
border: medium outset ;
|
|
||||||
padding: 1em }
|
|
||||||
|
|
||||||
div.admonition p.admonition-title, div.hint p.admonition-title,
|
|
||||||
div.important p.admonition-title, div.note p.admonition-title,
|
|
||||||
div.tip p.admonition-title {
|
|
||||||
font-weight: bold ;
|
|
||||||
font-family: sans-serif }
|
|
||||||
|
|
||||||
div.attention p.admonition-title, div.caution p.admonition-title,
|
|
||||||
div.danger p.admonition-title, div.error p.admonition-title,
|
|
||||||
div.warning p.admonition-title {
|
|
||||||
color: red ;
|
|
||||||
font-weight: bold ;
|
|
||||||
font-family: sans-serif }
|
|
||||||
|
|
||||||
/* Uncomment (and remove this text!) to get reduced vertical space in
|
|
||||||
compound paragraphs.
|
|
||||||
div.compound .compound-first, div.compound .compound-middle {
|
|
||||||
margin-bottom: 0.5em }
|
|
||||||
|
|
||||||
div.compound .compound-last, div.compound .compound-middle {
|
|
||||||
margin-top: 0.5em }
|
|
||||||
*/
|
|
||||||
|
|
||||||
div.dedication {
|
|
||||||
margin: 2em 5em ;
|
|
||||||
text-align: center ;
|
|
||||||
font-style: italic }
|
|
||||||
|
|
||||||
div.dedication p.topic-title {
|
|
||||||
font-weight: bold ;
|
|
||||||
font-style: normal }
|
|
||||||
|
|
||||||
div.figure {
|
|
||||||
margin-left: 2em ;
|
|
||||||
margin-right: 2em }
|
|
||||||
|
|
||||||
div.footer, div.header {
|
|
||||||
clear: both;
|
|
||||||
font-size: smaller }
|
|
||||||
|
|
||||||
div.line-block {
|
|
||||||
display: block ;
|
|
||||||
margin-top: 1em ;
|
|
||||||
margin-bottom: 1em }
|
|
||||||
|
|
||||||
div.line-block div.line-block {
|
|
||||||
margin-top: 0 ;
|
|
||||||
margin-bottom: 0 ;
|
|
||||||
margin-left: 1.5em }
|
|
||||||
|
|
||||||
div.sidebar {
|
|
||||||
margin-left: 1em ;
|
|
||||||
border: medium outset ;
|
|
||||||
padding: 1em ;
|
|
||||||
background-color: #ffffee ;
|
|
||||||
width: 40% ;
|
|
||||||
float: right ;
|
|
||||||
clear: right }
|
|
||||||
|
|
||||||
div.sidebar p.rubric {
|
|
||||||
font-family: sans-serif ;
|
|
||||||
font-size: medium }
|
|
||||||
|
|
||||||
div.system-messages {
|
|
||||||
margin: 5em }
|
|
||||||
|
|
||||||
div.system-messages h1 {
|
|
||||||
color: red }
|
|
||||||
|
|
||||||
div.system-message {
|
|
||||||
border: medium outset ;
|
|
||||||
padding: 1em }
|
|
||||||
|
|
||||||
div.system-message p.system-message-title {
|
|
||||||
color: red ;
|
|
||||||
font-weight: bold }
|
|
||||||
|
|
||||||
div.topic {
|
|
||||||
margin: 2em }
|
|
||||||
|
|
||||||
h1.section-subtitle, h2.section-subtitle, h3.section-subtitle,
|
|
||||||
h4.section-subtitle, h5.section-subtitle, h6.section-subtitle {
|
|
||||||
margin-top: 0.4em }
|
|
||||||
|
|
||||||
h1.title {
|
|
||||||
text-align: center }
|
|
||||||
|
|
||||||
h2.subtitle {
|
|
||||||
text-align: center }
|
|
||||||
|
|
||||||
hr.docutils {
|
|
||||||
width: 75% }
|
|
||||||
|
|
||||||
img.align-left {
|
|
||||||
clear: left }
|
|
||||||
|
|
||||||
img.align-right {
|
|
||||||
clear: right }
|
|
||||||
|
|
||||||
ol.simple, ul.simple {
|
|
||||||
margin-bottom: 1em }
|
|
||||||
|
|
||||||
ol.arabic {
|
|
||||||
list-style: decimal }
|
|
||||||
|
|
||||||
ol.loweralpha {
|
|
||||||
list-style: lower-alpha }
|
|
||||||
|
|
||||||
ol.upperalpha {
|
|
||||||
list-style: upper-alpha }
|
|
||||||
|
|
||||||
ol.lowerroman {
|
|
||||||
list-style: lower-roman }
|
|
||||||
|
|
||||||
ol.upperroman {
|
|
||||||
list-style: upper-roman }
|
|
||||||
|
|
||||||
p.attribution {
|
|
||||||
text-align: right ;
|
|
||||||
margin-left: 50% }
|
|
||||||
|
|
||||||
p.caption {
|
|
||||||
font-style: italic }
|
|
||||||
|
|
||||||
p.credits {
|
|
||||||
font-style: italic ;
|
|
||||||
font-size: smaller }
|
|
||||||
|
|
||||||
p.label {
|
|
||||||
white-space: nowrap }
|
|
||||||
|
|
||||||
p.rubric {
|
|
||||||
font-weight: bold ;
|
|
||||||
font-size: larger ;
|
|
||||||
color: maroon ;
|
|
||||||
text-align: center }
|
|
||||||
|
|
||||||
p.sidebar-title {
|
|
||||||
font-family: sans-serif ;
|
|
||||||
font-weight: bold ;
|
|
||||||
font-size: larger }
|
|
||||||
|
|
||||||
p.sidebar-subtitle {
|
|
||||||
font-family: sans-serif ;
|
|
||||||
font-weight: bold }
|
|
||||||
|
|
||||||
p.topic-title {
|
|
||||||
font-weight: bold }
|
|
||||||
|
|
||||||
pre.address {
|
|
||||||
margin-bottom: 0 ;
|
|
||||||
margin-top: 0 ;
|
|
||||||
font-family: serif ;
|
|
||||||
font-size: 100% }
|
|
||||||
|
|
||||||
pre.literal-block, pre.doctest-block {
|
|
||||||
margin-left: 2em ;
|
|
||||||
margin-right: 2em ;
|
|
||||||
background-color: #eeeeee }
|
|
||||||
|
|
||||||
span.classifier {
|
|
||||||
font-family: sans-serif ;
|
|
||||||
font-style: oblique }
|
|
||||||
|
|
||||||
span.classifier-delimiter {
|
|
||||||
font-family: sans-serif ;
|
|
||||||
font-weight: bold }
|
|
||||||
|
|
||||||
span.interpreted {
|
|
||||||
font-family: sans-serif }
|
|
||||||
|
|
||||||
span.option {
|
|
||||||
white-space: nowrap }
|
|
||||||
|
|
||||||
span.pre {
|
|
||||||
white-space: pre }
|
|
||||||
|
|
||||||
span.problematic {
|
|
||||||
color: red }
|
|
||||||
|
|
||||||
span.section-subtitle {
|
|
||||||
/* font-size relative to parent (h1..h6 element) */
|
|
||||||
font-size: 80% }
|
|
||||||
|
|
||||||
table.citation {
|
|
||||||
border-left: solid 1px gray;
|
|
||||||
margin-left: 1px }
|
|
||||||
|
|
||||||
table.docinfo {
|
|
||||||
margin: 2em 4em }
|
|
||||||
|
|
||||||
table.docutils {
|
|
||||||
margin-top: 0.5em ;
|
|
||||||
margin-bottom: 0.5em }
|
|
||||||
|
|
||||||
table.footnote {
|
|
||||||
border-left: solid 1px black;
|
|
||||||
margin-left: 1px }
|
|
||||||
|
|
||||||
table.docutils td, table.docutils th,
|
|
||||||
table.docinfo td, table.docinfo th {
|
|
||||||
padding-left: 0.5em ;
|
|
||||||
padding-right: 0.5em ;
|
|
||||||
vertical-align: top }
|
|
||||||
|
|
||||||
table.docutils th.field-name, table.docinfo th.docinfo-name {
|
|
||||||
font-weight: bold ;
|
|
||||||
text-align: left ;
|
|
||||||
white-space: nowrap ;
|
|
||||||
padding-left: 0 }
|
|
||||||
|
|
||||||
h1 tt.docutils, h2 tt.docutils, h3 tt.docutils,
|
|
||||||
h4 tt.docutils, h5 tt.docutils, h6 tt.docutils {
|
|
||||||
font-size: 100% }
|
|
||||||
|
|
||||||
tt.docutils {
|
|
||||||
background-color: #eeeeee }
|
|
||||||
|
|
||||||
ul.auto-toc {
|
|
||||||
list-style-type: none }
|
|
||||||
|
|
||||||
</style>
|
|
||||||
</head>
|
</head>
|
||||||
<body>
|
<body>
|
||||||
<div class="document" id="new-iterator-concepts">
|
<div class="document" id="new-iterator-concepts">
|
||||||
@ -303,16 +21,16 @@ ul.auto-toc {
|
|||||||
<tr><th class="docinfo-name">Author:</th>
|
<tr><th class="docinfo-name">Author:</th>
|
||||||
<td>David Abrahams, Jeremy Siek, Thomas Witt</td></tr>
|
<td>David Abrahams, Jeremy Siek, Thomas Witt</td></tr>
|
||||||
<tr><th class="docinfo-name">Contact:</th>
|
<tr><th class="docinfo-name">Contact:</th>
|
||||||
<td><a class="first reference" href="mailto:dave@boost-consulting.com">dave@boost-consulting.com</a>, <a class="reference" href="mailto:jsiek@osl.iu.edu">jsiek@osl.iu.edu</a>, <a class="last reference" href="mailto:witt@styleadvisor.com">witt@styleadvisor.com</a></td></tr>
|
<td><a class="first reference external" href="mailto:dave@boost-consulting.com">dave@boost-consulting.com</a>, <a class="reference external" href="mailto:jsiek@osl.iu.edu">jsiek@osl.iu.edu</a>, <a class="last reference external" href="mailto:witt@styleadvisor.com">witt@styleadvisor.com</a></td></tr>
|
||||||
<tr><th class="docinfo-name">Organization:</th>
|
<tr><th class="docinfo-name">Organization:</th>
|
||||||
<td><a class="first reference" href="http://www.boost-consulting.com">Boost Consulting</a>, Indiana University <a class="reference" href="http://www.osl.iu.edu">Open Systems
|
<td><a class="first reference external" href="http://www.boost-consulting.com">Boost Consulting</a>, Indiana University <a class="reference external" href="http://www.osl.iu.edu">Open Systems
|
||||||
Lab</a>, <a class="last reference" href="http://www.styleadvisor.com">Zephyr Associates, Inc.</a></td></tr>
|
Lab</a>, <a class="last reference external" href="http://www.styleadvisor.com">Zephyr Associates, Inc.</a></td></tr>
|
||||||
<tr><th class="docinfo-name">Date:</th>
|
<tr><th class="docinfo-name">Date:</th>
|
||||||
<td>2006-04-30</td></tr>
|
<td>2006-09-11</td></tr>
|
||||||
<tr class="field"><th class="docinfo-name">Number:</th><td class="field-body">This is a revised version of <a class="reference" href="http://anubis.dkuug.dk/jtc1/sc22/wg21/docs/papers/2003/n1550.html">n1550</a>=03-0133, which was
|
<tr class="field"><th class="docinfo-name">Number:</th><td class="field-body">This is a revised version of <a class="reference external" href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2003/n1550.htm">n1550</a>=03-0133, which was
|
||||||
accepted for Technical Report 1 by the C++ standard
|
accepted for Technical Report 1 by the C++ standard
|
||||||
committee's library working group. This proposal is a
|
committee's library working group. This proposal is a
|
||||||
revision of paper <a class="reference" href="http://anubis.dkuug.dk/jtc1/sc22/wg21/docs/papers/2001/n1297.html">n1297</a>, <a class="reference" href="http://anubis.dkuug.dk/jtc1/sc22/wg21/docs/papers/2003/n1477.html">n1477</a>, and <a class="reference" href="http://anubis.dkuug.dk/jtc1/sc22/wg21/docs/papers/2003/n1531.html">n1531</a>.</td>
|
revision of paper <a class="reference external" href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2001/n1297.html">n1297</a>, <a class="reference external" href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2003/n1477.html">n1477</a>, and <a class="reference external" href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2003/n1531.html">n1531</a>.</td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr><th class="docinfo-name">Copyright:</th>
|
<tr><th class="docinfo-name">Copyright:</th>
|
||||||
<td>Copyright David Abrahams, Jeremy Siek, and Thomas Witt
|
<td>Copyright David Abrahams, Jeremy Siek, and Thomas Witt
|
||||||
@ -336,49 +54,49 @@ of iterators that are used in practice.</td>
|
|||||||
</tr>
|
</tr>
|
||||||
</tbody>
|
</tbody>
|
||||||
</table>
|
</table>
|
||||||
<div class="contents topic">
|
<div class="contents topic" id="table-of-contents">
|
||||||
<p class="topic-title first"><a id="table-of-contents" name="table-of-contents">Table of Contents</a></p>
|
<p class="topic-title first">Table of Contents</p>
|
||||||
<ul class="simple">
|
<ul class="simple">
|
||||||
<li><a class="reference" href="#motivation" id="id1" name="id1">Motivation</a></li>
|
<li><a class="reference internal" href="#motivation" id="id1">Motivation</a></li>
|
||||||
<li><a class="reference" href="#impact-on-the-standard" id="id2" name="id2">Impact on the Standard</a><ul>
|
<li><a class="reference internal" href="#impact-on-the-standard" id="id2">Impact on the Standard</a><ul>
|
||||||
<li><a class="reference" href="#possible-but-not-proposed-changes-to-the-working-paper" id="id3" name="id3">Possible (but not proposed) Changes to the Working Paper</a><ul>
|
<li><a class="reference internal" href="#possible-but-not-proposed-changes-to-the-working-paper" id="id3">Possible (but not proposed) Changes to the Working Paper</a><ul>
|
||||||
<li><a class="reference" href="#changes-to-algorithm-requirements" id="id4" name="id4">Changes to Algorithm Requirements</a></li>
|
<li><a class="reference internal" href="#changes-to-algorithm-requirements" id="id4">Changes to Algorithm Requirements</a></li>
|
||||||
<li><a class="reference" href="#deprecations" id="id5" name="id5">Deprecations</a></li>
|
<li><a class="reference internal" href="#deprecations" id="id5">Deprecations</a></li>
|
||||||
<li><a class="reference" href="#vector-bool" id="id6" name="id6"><tt class="docutils literal"><span class="pre">vector<bool></span></tt></a></li>
|
<li><a class="reference internal" href="#vector-bool" id="id6"><tt class="docutils literal"><span class="pre">vector<bool></span></tt></a></li>
|
||||||
</ul>
|
</ul>
|
||||||
</li>
|
</li>
|
||||||
</ul>
|
</ul>
|
||||||
</li>
|
</li>
|
||||||
<li><a class="reference" href="#design" id="id7" name="id7">Design</a></li>
|
<li><a class="reference internal" href="#design" id="id7">Design</a></li>
|
||||||
<li><a class="reference" href="#proposed-text" id="id8" name="id8">Proposed Text</a><ul>
|
<li><a class="reference internal" href="#proposed-text" id="id8">Proposed Text</a><ul>
|
||||||
<li><a class="reference" href="#addition-to-lib-iterator-requirements" id="id9" name="id9">Addition to [lib.iterator.requirements]</a><ul>
|
<li><a class="reference internal" href="#addition-to-lib-iterator-requirements" id="id9">Addition to [lib.iterator.requirements]</a><ul>
|
||||||
<li><a class="reference" href="#iterator-value-access-concepts-lib-iterator-value-access" id="id10" name="id10">Iterator Value Access Concepts [lib.iterator.value.access]</a><ul>
|
<li><a class="reference internal" href="#iterator-value-access-concepts-lib-iterator-value-access" id="id10">Iterator Value Access Concepts [lib.iterator.value.access]</a><ul>
|
||||||
<li><a class="reference" href="#readable-iterators-lib-readable-iterators" id="id11" name="id11">Readable Iterators [lib.readable.iterators]</a></li>
|
<li><a class="reference internal" href="#readable-iterators-lib-readable-iterators" id="id11">Readable Iterators [lib.readable.iterators]</a></li>
|
||||||
<li><a class="reference" href="#writable-iterators-lib-writable-iterators" id="id12" name="id12">Writable Iterators [lib.writable.iterators]</a></li>
|
<li><a class="reference internal" href="#writable-iterators-lib-writable-iterators" id="id12">Writable Iterators [lib.writable.iterators]</a></li>
|
||||||
<li><a class="reference" href="#swappable-iterators-lib-swappable-iterators" id="id13" name="id13">Swappable Iterators [lib.swappable.iterators]</a></li>
|
<li><a class="reference internal" href="#swappable-iterators-lib-swappable-iterators" id="id13">Swappable Iterators [lib.swappable.iterators]</a></li>
|
||||||
<li><a class="reference" href="#lvalue-iterators-lib-lvalue-iterators" id="id14" name="id14">Lvalue Iterators [lib.lvalue.iterators]</a></li>
|
<li><a class="reference internal" href="#lvalue-iterators-lib-lvalue-iterators" id="id14">Lvalue Iterators [lib.lvalue.iterators]</a></li>
|
||||||
</ul>
|
</ul>
|
||||||
</li>
|
</li>
|
||||||
<li><a class="reference" href="#iterator-traversal-concepts-lib-iterator-traversal" id="id15" name="id15">Iterator Traversal Concepts [lib.iterator.traversal]</a><ul>
|
<li><a class="reference internal" href="#iterator-traversal-concepts-lib-iterator-traversal" id="id15">Iterator Traversal Concepts [lib.iterator.traversal]</a><ul>
|
||||||
<li><a class="reference" href="#incrementable-iterators-lib-incrementable-iterators" id="id16" name="id16">Incrementable Iterators [lib.incrementable.iterators]</a></li>
|
<li><a class="reference internal" href="#incrementable-iterators-lib-incrementable-iterators" id="id16">Incrementable Iterators [lib.incrementable.iterators]</a></li>
|
||||||
<li><a class="reference" href="#single-pass-iterators-lib-single-pass-iterators" id="id17" name="id17">Single Pass Iterators [lib.single.pass.iterators]</a></li>
|
<li><a class="reference internal" href="#single-pass-iterators-lib-single-pass-iterators" id="id17">Single Pass Iterators [lib.single.pass.iterators]</a></li>
|
||||||
<li><a class="reference" href="#forward-traversal-iterators-lib-forward-traversal-iterators" id="id18" name="id18">Forward Traversal Iterators [lib.forward.traversal.iterators]</a></li>
|
<li><a class="reference internal" href="#forward-traversal-iterators-lib-forward-traversal-iterators" id="id18">Forward Traversal Iterators [lib.forward.traversal.iterators]</a></li>
|
||||||
<li><a class="reference" href="#bidirectional-traversal-iterators-lib-bidirectional-traversal-iterators" id="id19" name="id19">Bidirectional Traversal Iterators [lib.bidirectional.traversal.iterators]</a></li>
|
<li><a class="reference internal" href="#bidirectional-traversal-iterators-lib-bidirectional-traversal-iterators" id="id19">Bidirectional Traversal Iterators [lib.bidirectional.traversal.iterators]</a></li>
|
||||||
<li><a class="reference" href="#random-access-traversal-iterators-lib-random-access-traversal-iterators" id="id20" name="id20">Random Access Traversal Iterators [lib.random.access.traversal.iterators]</a></li>
|
<li><a class="reference internal" href="#random-access-traversal-iterators-lib-random-access-traversal-iterators" id="id20">Random Access Traversal Iterators [lib.random.access.traversal.iterators]</a></li>
|
||||||
<li><a class="reference" href="#interoperable-iterators-lib-interoperable-iterators" id="id21" name="id21">Interoperable Iterators [lib.interoperable.iterators]</a></li>
|
<li><a class="reference internal" href="#interoperable-iterators-lib-interoperable-iterators" id="id21">Interoperable Iterators [lib.interoperable.iterators]</a></li>
|
||||||
</ul>
|
</ul>
|
||||||
</li>
|
</li>
|
||||||
</ul>
|
</ul>
|
||||||
</li>
|
</li>
|
||||||
<li><a class="reference" href="#addition-to-lib-iterator-synopsis" id="id22" name="id22">Addition to [lib.iterator.synopsis]</a></li>
|
<li><a class="reference internal" href="#addition-to-lib-iterator-synopsis" id="id22">Addition to [lib.iterator.synopsis]</a></li>
|
||||||
<li><a class="reference" href="#addition-to-lib-iterator-traits" id="id23" name="id23">Addition to [lib.iterator.traits]</a></li>
|
<li><a class="reference internal" href="#addition-to-lib-iterator-traits" id="id23">Addition to [lib.iterator.traits]</a></li>
|
||||||
</ul>
|
</ul>
|
||||||
</li>
|
</li>
|
||||||
<li><a class="reference" href="#footnotes" id="id24" name="id24">Footnotes</a></li>
|
<li><a class="reference internal" href="#footnotes" id="id24">Footnotes</a></li>
|
||||||
</ul>
|
</ul>
|
||||||
</div>
|
</div>
|
||||||
<div class="section">
|
<div class="section" id="motivation">
|
||||||
<h1><a class="toc-backref" href="#id1" id="motivation" name="motivation">Motivation</a></h1>
|
<h1><a class="toc-backref" href="#id1">Motivation</a></h1>
|
||||||
<p>The standard iterator categories and requirements are flawed because
|
<p>The standard iterator categories and requirements are flawed because
|
||||||
they use a single hierarchy of concepts to address two orthogonal
|
they use a single hierarchy of concepts to address two orthogonal
|
||||||
issues: <em>iterator traversal</em> and <em>value access</em>. As a result, many
|
issues: <em>iterator traversal</em> and <em>value access</em>. As a result, many
|
||||||
@ -409,12 +127,12 @@ requirements in the iterator categories.</p>
|
|||||||
<td><tt class="docutils literal"><span class="pre">*i</span></tt> is convertible to <tt class="docutils literal"><span class="pre">T</span></tt></td>
|
<td><tt class="docutils literal"><span class="pre">*i</span></tt> is convertible to <tt class="docutils literal"><span class="pre">T</span></tt></td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr><td>Forward Iterator</td>
|
<tr><td>Forward Iterator</td>
|
||||||
<td><tt class="docutils literal"><span class="pre">*i</span></tt> is <tt class="docutils literal"><span class="pre">T&</span></tt> (or <tt class="docutils literal"><span class="pre">const</span> <span class="pre">T&</span></tt> once <a class="reference" href="http://anubis.dkuug.dk/JTC1/SC22/WG21/docs/lwg-active.html#200">issue 200</a>
|
<td><tt class="docutils literal"><span class="pre">*i</span></tt> is <tt class="docutils literal"><span class="pre">T&</span></tt> (or <tt class="docutils literal"><span class="pre">const</span> <span class="pre">T&</span></tt> once <a class="reference external" href="http://www.open-std.org/JTC1/SC22/WG21/docs/lwg-active.html#200">issue 200</a>
|
||||||
is resolved)</td>
|
is resolved)</td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr><td>Random Access Iterator</td>
|
<tr><td>Random Access Iterator</td>
|
||||||
<td><tt class="docutils literal"><span class="pre">i[n]</span></tt> is convertible to <tt class="docutils literal"><span class="pre">T</span></tt> (also <tt class="docutils literal"><span class="pre">i[n]</span> <span class="pre">=</span> <span class="pre">t</span></tt>
|
<td><tt class="docutils literal"><span class="pre">i[n]</span></tt> is convertible to <tt class="docutils literal"><span class="pre">T</span></tt> (also <tt class="docutils literal"><span class="pre">i[n]</span> <span class="pre">=</span> <span class="pre">t</span></tt>
|
||||||
is required for mutable iterators once <a class="reference" href="http://anubis.dkuug.dk/JTC1/SC22/WG21/docs/lwg-active.html#299">issue 299</a>
|
is required for mutable iterators once <a class="reference external" href="http://www.open-std.org/JTC1/SC22/WG21/docs/lwg-active.html#299">issue 299</a>
|
||||||
is resolved)</td>
|
is resolved)</td>
|
||||||
</tr>
|
</tr>
|
||||||
</tbody>
|
</tbody>
|
||||||
@ -423,7 +141,7 @@ is resolved)</td>
|
|||||||
single hierarchy, many useful iterators can not be appropriately
|
single hierarchy, many useful iterators can not be appropriately
|
||||||
categorized. For example, <tt class="docutils literal"><span class="pre">vector<bool>::iterator</span></tt> is almost a
|
categorized. For example, <tt class="docutils literal"><span class="pre">vector<bool>::iterator</span></tt> is almost a
|
||||||
random access iterator, but the return type is not <tt class="docutils literal"><span class="pre">bool&</span></tt> (see
|
random access iterator, but the return type is not <tt class="docutils literal"><span class="pre">bool&</span></tt> (see
|
||||||
<a class="reference" href="http://anubis.dkuug.dk/JTC1/SC22/WG21/docs/lwg-active.html#96">issue 96</a> and Herb Sutter's paper J16/99-0008 = WG21
|
<a class="reference external" href="http://www.open-std.org/JTC1/SC22/WG21/docs/lwg-active.html#96">issue 96</a> and Herb Sutter's paper J16/99-0008 = WG21
|
||||||
N1185). Therefore, the iterators of <tt class="docutils literal"><span class="pre">vector<bool></span></tt> only meet the
|
N1185). Therefore, the iterators of <tt class="docutils literal"><span class="pre">vector<bool></span></tt> only meet the
|
||||||
requirements of input iterator and output iterator. This is so
|
requirements of input iterator and output iterator. This is so
|
||||||
nonintuitive that the C++ standard contradicts itself on this point.
|
nonintuitive that the C++ standard contradicts itself on this point.
|
||||||
@ -431,7 +149,7 @@ In paragraph 23.2.4/1 it says that a <tt class="docutils literal"><span class="p
|
|||||||
supports random access iterators.</p>
|
supports random access iterators.</p>
|
||||||
<p>Another difficult-to-categorize iterator is the transform iterator, an
|
<p>Another difficult-to-categorize iterator is the transform iterator, an
|
||||||
adaptor which applies a unary function object to the dereferenced
|
adaptor which applies a unary function object to the dereferenced
|
||||||
value of the some underlying iterator (see <a class="reference" href="http://www.boost.org/libs/utility/transform_iterator.htm">transform_iterator</a>).
|
value of the some underlying iterator (see <a class="reference external" href="http://www.boost.org/libs/utility/transform_iterator.htm">transform_iterator</a>).
|
||||||
For unary functions such as <tt class="docutils literal"><span class="pre">times</span></tt>, the return type of
|
For unary functions such as <tt class="docutils literal"><span class="pre">times</span></tt>, the return type of
|
||||||
<tt class="docutils literal"><span class="pre">operator*</span></tt> clearly needs to be the <tt class="docutils literal"><span class="pre">result_type</span></tt> of the function
|
<tt class="docutils literal"><span class="pre">operator*</span></tt> clearly needs to be the <tt class="docutils literal"><span class="pre">result_type</span></tt> of the function
|
||||||
object, which is typically not a reference. Because random access
|
object, which is typically not a reference. Because random access
|
||||||
@ -439,13 +157,13 @@ iterators are required to return lvalues from <tt class="docutils literal"><span
|
|||||||
wrap <tt class="docutils literal"><span class="pre">int*</span></tt> with a transform iterator, you do not get a random
|
wrap <tt class="docutils literal"><span class="pre">int*</span></tt> with a transform iterator, you do not get a random
|
||||||
access iterator as might be expected, but an input iterator.</p>
|
access iterator as might be expected, but an input iterator.</p>
|
||||||
<p>A third example is found in the vertex and edge iterators of the
|
<p>A third example is found in the vertex and edge iterators of the
|
||||||
<a class="reference" href="http://www.boost.org/libs/graph/doc/table_of_contents.html">Boost Graph Library</a>. These iterators return vertex and edge
|
<a class="reference external" href="http://www.boost.org/libs/graph/doc/table_of_contents.html">Boost Graph Library</a>. These iterators return vertex and edge
|
||||||
descriptors, which are lightweight handles created on-the-fly. They
|
descriptors, which are lightweight handles created on-the-fly. They
|
||||||
must be returned by-value. As a result, their current standard
|
must be returned by-value. As a result, their current standard
|
||||||
iterator category is <tt class="docutils literal"><span class="pre">input_iterator_tag</span></tt>, which means that,
|
iterator category is <tt class="docutils literal"><span class="pre">input_iterator_tag</span></tt>, which means that,
|
||||||
strictly speaking, you could not use these iterators with algorithms
|
strictly speaking, you could not use these iterators with algorithms
|
||||||
like <tt class="docutils literal"><span class="pre">min_element()</span></tt>. As a temporary solution, the concept
|
like <tt class="docutils literal"><span class="pre">min_element()</span></tt>. As a temporary solution, the concept
|
||||||
<a class="reference" href="http://www.boost.org/libs/utility/MultiPassInputIterator.html">Multi-Pass Input Iterator</a> was introduced to describe the vertex and
|
<a class="reference external" href="http://www.boost.org/libs/utility/MultiPassInputIterator.html">Multi-Pass Input Iterator</a> was introduced to describe the vertex and
|
||||||
edge descriptors, but as the design notes for the concept suggest, a
|
edge descriptors, but as the design notes for the concept suggest, a
|
||||||
better solution is needed.</p>
|
better solution is needed.</p>
|
||||||
<p>In short, there are many useful iterators that do not fit into the
|
<p>In short, there are many useful iterators that do not fit into the
|
||||||
@ -458,8 +176,8 @@ cannot separate the need for random access or bidirectional
|
|||||||
traversal from the need for a true reference return type.</li>
|
traversal from the need for a true reference return type.</li>
|
||||||
</ul>
|
</ul>
|
||||||
</div>
|
</div>
|
||||||
<div class="section">
|
<div class="section" id="impact-on-the-standard">
|
||||||
<h1><a class="toc-backref" href="#id2" id="impact-on-the-standard" name="impact-on-the-standard">Impact on the Standard</a></h1>
|
<h1><a class="toc-backref" href="#id2">Impact on the Standard</a></h1>
|
||||||
<p>This proposal for TR1 is a pure extension. Further, the new iterator
|
<p>This proposal for TR1 is a pure extension. Further, the new iterator
|
||||||
concepts are backward-compatible with the old iterator requirements,
|
concepts are backward-compatible with the old iterator requirements,
|
||||||
and old iterators are forward-compatible with the new iterator
|
and old iterators are forward-compatible with the new iterator
|
||||||
@ -474,13 +192,13 @@ made it). -DWA -->
|
|||||||
standards conforming input iterator is allowed to have
|
standards conforming input iterator is allowed to have
|
||||||
a tag that is not input_iterator_tag but that
|
a tag that is not input_iterator_tag but that
|
||||||
is convertible to input_iterator_tag? -JGS -->
|
is convertible to input_iterator_tag? -JGS -->
|
||||||
<div class="section">
|
<div class="section" id="possible-but-not-proposed-changes-to-the-working-paper">
|
||||||
<h2><a class="toc-backref" href="#id3" id="possible-but-not-proposed-changes-to-the-working-paper" name="possible-but-not-proposed-changes-to-the-working-paper">Possible (but not proposed) Changes to the Working Paper</a></h2>
|
<h2><a class="toc-backref" href="#id3">Possible (but not proposed) Changes to the Working Paper</a></h2>
|
||||||
<p>The extensions in this paper suggest several changes we might make
|
<p>The extensions in this paper suggest several changes we might make
|
||||||
to the working paper for the next standard. These changes are not
|
to the working paper for the next standard. These changes are not
|
||||||
a formal part of this proposal for TR1.</p>
|
a formal part of this proposal for TR1.</p>
|
||||||
<div class="section">
|
<div class="section" id="changes-to-algorithm-requirements">
|
||||||
<h3><a class="toc-backref" href="#id4" id="changes-to-algorithm-requirements" name="changes-to-algorithm-requirements">Changes to Algorithm Requirements</a></h3>
|
<h3><a class="toc-backref" href="#id4">Changes to Algorithm Requirements</a></h3>
|
||||||
<p>The algorithms in the standard library could benefit from the new
|
<p>The algorithms in the standard library could benefit from the new
|
||||||
iterator concepts because the new concepts provide a more accurate way
|
iterator concepts because the new concepts provide a more accurate way
|
||||||
to express their type requirements. The result is algorithms that are
|
to express their type requirements. The result is algorithms that are
|
||||||
@ -544,15 +262,15 @@ Bidirectional Iterator (2) -> Bidirectional Traversal Iterator and Writable I
|
|||||||
<dd><tt class="docutils literal"><span class="pre">transform</span></tt></dd>
|
<dd><tt class="docutils literal"><span class="pre">transform</span></tt></dd>
|
||||||
</dl>
|
</dl>
|
||||||
</div>
|
</div>
|
||||||
<div class="section">
|
<div class="section" id="deprecations">
|
||||||
<h3><a class="toc-backref" href="#id5" id="deprecations" name="deprecations">Deprecations</a></h3>
|
<h3><a class="toc-backref" href="#id5">Deprecations</a></h3>
|
||||||
<p>For the next working paper (but not for TR1), the committee should
|
<p>For the next working paper (but not for TR1), the committee should
|
||||||
consider deprecating the old iterator tags, and
|
consider deprecating the old iterator tags, and
|
||||||
std::iterator_traits, since it will be superceded by individual
|
std::iterator_traits, since it will be superceded by individual
|
||||||
traits metafunctions.</p>
|
traits metafunctions.</p>
|
||||||
</div>
|
</div>
|
||||||
<div class="section">
|
<div class="section" id="vector-bool">
|
||||||
<h3><a class="toc-backref" href="#id6" id="vector-bool" name="vector-bool"><tt class="docutils literal"><span class="pre">vector<bool></span></tt></a></h3>
|
<h3><a class="toc-backref" href="#id6"><tt class="docutils literal"><span class="pre">vector<bool></span></tt></a></h3>
|
||||||
<p>For the next working paper (but not for TR1), the committee should
|
<p>For the next working paper (but not for TR1), the committee should
|
||||||
consider reclassifying <tt class="docutils literal"><span class="pre">vector<bool>::iterator</span></tt> as a Random
|
consider reclassifying <tt class="docutils literal"><span class="pre">vector<bool>::iterator</span></tt> as a Random
|
||||||
Access Traversal Iterator and Readable Iterator and Writable
|
Access Traversal Iterator and Readable Iterator and Writable
|
||||||
@ -560,8 +278,8 @@ Iterator.</p>
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="section">
|
<div class="section" id="design">
|
||||||
<h1><a class="toc-backref" href="#id7" id="design" name="design">Design</a></h1>
|
<h1><a class="toc-backref" href="#id7">Design</a></h1>
|
||||||
<p>The iterator requirements are to be separated into two groups. One set
|
<p>The iterator requirements are to be separated into two groups. One set
|
||||||
of concepts handles the syntax and semantics of value access:</p>
|
of concepts handles the syntax and semantics of value access:</p>
|
||||||
<ul class="simple">
|
<ul class="simple">
|
||||||
@ -626,24 +344,24 @@ approach for specifying <tt class="docutils literal"><span class="pre">operator[
|
|||||||
direction would mean that an iterator satisfying the old Random Access
|
direction would mean that an iterator satisfying the old Random Access
|
||||||
Iterator requirements would not necessarily be a model of Readable or
|
Iterator requirements would not necessarily be a model of Readable or
|
||||||
Writable Lvalue Iterator. Instead we have chosen a design that
|
Writable Lvalue Iterator. Instead we have chosen a design that
|
||||||
matches the preferred resolution of <a class="reference" href="http://anubis.dkuug.dk/JTC1/SC22/WG21/docs/lwg-active.html#299">issue 299</a>: <tt class="docutils literal"><span class="pre">operator[]</span></tt> is
|
matches the preferred resolution of <a class="reference external" href="http://www.open-std.org/JTC1/SC22/WG21/docs/lwg-active.html#299">issue 299</a>: <tt class="docutils literal"><span class="pre">operator[]</span></tt> is
|
||||||
only required to return something convertible to the <tt class="docutils literal"><span class="pre">value_type</span></tt>
|
only required to return something convertible to the <tt class="docutils literal"><span class="pre">value_type</span></tt>
|
||||||
(for a Readable Iterator), and is required to support assignment
|
(for a Readable Iterator), and is required to support assignment
|
||||||
<tt class="docutils literal"><span class="pre">i[n]</span> <span class="pre">=</span> <span class="pre">t</span></tt> (for a Writable Iterator).</p>
|
<tt class="docutils literal"><span class="pre">i[n]</span> <span class="pre">=</span> <span class="pre">t</span></tt> (for a Writable Iterator).</p>
|
||||||
</div>
|
</div>
|
||||||
<div class="section">
|
<div class="section" id="proposed-text">
|
||||||
<h1><a class="toc-backref" href="#id8" id="proposed-text" name="proposed-text">Proposed Text</a></h1>
|
<h1><a class="toc-backref" href="#id8">Proposed Text</a></h1>
|
||||||
<div class="section">
|
<div class="section" id="addition-to-lib-iterator-requirements">
|
||||||
<h2><a class="toc-backref" href="#id9" id="addition-to-lib-iterator-requirements" name="addition-to-lib-iterator-requirements">Addition to [lib.iterator.requirements]</a></h2>
|
<h2><a class="toc-backref" href="#id9">Addition to [lib.iterator.requirements]</a></h2>
|
||||||
<div class="section">
|
<div class="section" id="iterator-value-access-concepts-lib-iterator-value-access">
|
||||||
<h3><a class="toc-backref" href="#id10" id="iterator-value-access-concepts-lib-iterator-value-access" name="iterator-value-access-concepts-lib-iterator-value-access">Iterator Value Access Concepts [lib.iterator.value.access]</a></h3>
|
<h3><a class="toc-backref" href="#id10">Iterator Value Access Concepts [lib.iterator.value.access]</a></h3>
|
||||||
<p>In the tables below, <tt class="docutils literal"><span class="pre">X</span></tt> is an iterator type, <tt class="docutils literal"><span class="pre">a</span></tt> is a constant
|
<p>In the tables below, <tt class="docutils literal"><span class="pre">X</span></tt> is an iterator type, <tt class="docutils literal"><span class="pre">a</span></tt> is a constant
|
||||||
object of type <tt class="docutils literal"><span class="pre">X</span></tt>, <tt class="docutils literal"><span class="pre">R</span></tt> is
|
object of type <tt class="docutils literal"><span class="pre">X</span></tt>, <tt class="docutils literal"><span class="pre">R</span></tt> is
|
||||||
<tt class="docutils literal"><span class="pre">std::iterator_traits<X>::reference</span></tt>, <tt class="docutils literal"><span class="pre">T</span></tt> is
|
<tt class="docutils literal"><span class="pre">std::iterator_traits<X>::reference</span></tt>, <tt class="docutils literal"><span class="pre">T</span></tt> is
|
||||||
<tt class="docutils literal"><span class="pre">std::iterator_traits<X>::value_type</span></tt>, and <tt class="docutils literal"><span class="pre">v</span></tt> is a constant
|
<tt class="docutils literal"><span class="pre">std::iterator_traits<X>::value_type</span></tt>, and <tt class="docutils literal"><span class="pre">v</span></tt> is a constant
|
||||||
object of type <tt class="docutils literal"><span class="pre">T</span></tt>.</p>
|
object of type <tt class="docutils literal"><span class="pre">T</span></tt>.</p>
|
||||||
<div class="section">
|
<div class="section" id="readable-iterators-lib-readable-iterators">
|
||||||
<h4><a class="toc-backref" href="#id11" id="readable-iterators-lib-readable-iterators" name="readable-iterators-lib-readable-iterators"><span id="readable-iterator"></span>Readable Iterators [lib.readable.iterators]</a></h4>
|
<span id="readable-iterator"></span><h4><a class="toc-backref" href="#id11">Readable Iterators [lib.readable.iterators]</a></h4>
|
||||||
<p>A class or built-in type <tt class="docutils literal"><span class="pre">X</span></tt> models the <em>Readable Iterator</em> concept
|
<p>A class or built-in type <tt class="docutils literal"><span class="pre">X</span></tt> models the <em>Readable Iterator</em> concept
|
||||||
for value type <tt class="docutils literal"><span class="pre">T</span></tt> if, in addition to <tt class="docutils literal"><span class="pre">X</span></tt> being Assignable and
|
for value type <tt class="docutils literal"><span class="pre">T</span></tt> if, in addition to <tt class="docutils literal"><span class="pre">X</span></tt> being Assignable and
|
||||||
Copy Constructible, the following expressions are valid and respect
|
Copy Constructible, the following expressions are valid and respect
|
||||||
@ -685,8 +403,8 @@ non-cv-qualified type</td>
|
|||||||
</table>
|
</table>
|
||||||
<!-- We won't say anything about iterator_traits<X>::reference until the DR is resolved. -JGS -->
|
<!-- We won't say anything about iterator_traits<X>::reference until the DR is resolved. -JGS -->
|
||||||
</div>
|
</div>
|
||||||
<div class="section">
|
<div class="section" id="writable-iterators-lib-writable-iterators">
|
||||||
<h4><a class="toc-backref" href="#id12" id="writable-iterators-lib-writable-iterators" name="writable-iterators-lib-writable-iterators"><span id="writable-iterator"></span>Writable Iterators [lib.writable.iterators]</a></h4>
|
<span id="writable-iterator"></span><h4><a class="toc-backref" href="#id12">Writable Iterators [lib.writable.iterators]</a></h4>
|
||||||
<p>A class or built-in type <tt class="docutils literal"><span class="pre">X</span></tt> models the <em>Writable Iterator</em> concept
|
<p>A class or built-in type <tt class="docutils literal"><span class="pre">X</span></tt> models the <em>Writable Iterator</em> concept
|
||||||
if, in addition to <tt class="docutils literal"><span class="pre">X</span></tt> being Copy Constructible, the following
|
if, in addition to <tt class="docutils literal"><span class="pre">X</span></tt> being Copy Constructible, the following
|
||||||
expressions are valid and respect the stated semantics. Writable
|
expressions are valid and respect the stated semantics. Writable
|
||||||
@ -715,8 +433,8 @@ value types of <tt class="docutils literal"><span class="pre">X</span></tt></td>
|
|||||||
</tbody>
|
</tbody>
|
||||||
</table>
|
</table>
|
||||||
</div>
|
</div>
|
||||||
<div class="section">
|
<div class="section" id="swappable-iterators-lib-swappable-iterators">
|
||||||
<h4><a class="toc-backref" href="#id13" id="swappable-iterators-lib-swappable-iterators" name="swappable-iterators-lib-swappable-iterators">Swappable Iterators [lib.swappable.iterators]</a></h4>
|
<h4><a class="toc-backref" href="#id13">Swappable Iterators [lib.swappable.iterators]</a></h4>
|
||||||
<p>A class or built-in type <tt class="docutils literal"><span class="pre">X</span></tt> models the <em>Swappable Iterator</em> concept
|
<p>A class or built-in type <tt class="docutils literal"><span class="pre">X</span></tt> models the <em>Swappable Iterator</em> concept
|
||||||
if, in addition to <tt class="docutils literal"><span class="pre">X</span></tt> being Copy Constructible, the following
|
if, in addition to <tt class="docutils literal"><span class="pre">X</span></tt> being Copy Constructible, the following
|
||||||
expressions are valid and respect the stated semantics.</p>
|
expressions are valid and respect the stated semantics.</p>
|
||||||
@ -742,12 +460,12 @@ exchanged</td>
|
|||||||
</tr>
|
</tr>
|
||||||
</tbody>
|
</tbody>
|
||||||
</table>
|
</table>
|
||||||
<p>[<em>Note:</em> An iterator that is a model of the <a class="reference" href="#readable-iterator">Readable Iterator</a> and
|
<p>[<em>Note:</em> An iterator that is a model of the <a class="reference internal" href="#readable-iterator">Readable Iterator</a> and
|
||||||
<a class="reference" href="#writable-iterator">Writable Iterator</a> concepts is also a model of <em>Swappable
|
<a class="reference internal" href="#writable-iterator">Writable Iterator</a> concepts is also a model of <em>Swappable
|
||||||
Iterator</em>. <em>--end note</em>]</p>
|
Iterator</em>. <em>--end note</em>]</p>
|
||||||
</div>
|
</div>
|
||||||
<div class="section">
|
<div class="section" id="lvalue-iterators-lib-lvalue-iterators">
|
||||||
<h4><a class="toc-backref" href="#id14" id="lvalue-iterators-lib-lvalue-iterators" name="lvalue-iterators-lib-lvalue-iterators">Lvalue Iterators [lib.lvalue.iterators]</a></h4>
|
<h4><a class="toc-backref" href="#id14">Lvalue Iterators [lib.lvalue.iterators]</a></h4>
|
||||||
<p>The <em>Lvalue Iterator</em> concept adds the requirement that the return
|
<p>The <em>Lvalue Iterator</em> concept adds the requirement that the return
|
||||||
type of <tt class="docutils literal"><span class="pre">operator*</span></tt> type be a reference to the value type of the
|
type of <tt class="docutils literal"><span class="pre">operator*</span></tt> type be a reference to the value type of the
|
||||||
iterator.</p>
|
iterator.</p>
|
||||||
@ -776,20 +494,20 @@ dereferenceable.</td>
|
|||||||
</tr>
|
</tr>
|
||||||
</tbody>
|
</tbody>
|
||||||
</table>
|
</table>
|
||||||
<p>If <tt class="docutils literal"><span class="pre">X</span></tt> is a <a class="reference" href="#writable-iterator">Writable Iterator</a> then <tt class="docutils literal"><span class="pre">a</span> <span class="pre">==</span> <span class="pre">b</span></tt> if and only if
|
<p>If <tt class="docutils literal"><span class="pre">X</span></tt> is a <a class="reference internal" href="#writable-iterator">Writable Iterator</a> then <tt class="docutils literal"><span class="pre">a</span> <span class="pre">==</span> <span class="pre">b</span></tt> if and only if
|
||||||
<tt class="docutils literal"><span class="pre">*a</span></tt> is the same object as <tt class="docutils literal"><span class="pre">*b</span></tt>. If <tt class="docutils literal"><span class="pre">X</span></tt> is a <a class="reference" href="#readable-iterator">Readable
|
<tt class="docutils literal"><span class="pre">*a</span></tt> is the same object as <tt class="docutils literal"><span class="pre">*b</span></tt>. If <tt class="docutils literal"><span class="pre">X</span></tt> is a <a class="reference internal" href="#readable-iterator">Readable
|
||||||
Iterator</a> then <tt class="docutils literal"><span class="pre">a</span> <span class="pre">==</span> <span class="pre">b</span></tt> implies <tt class="docutils literal"><span class="pre">*a</span></tt> is the same object as
|
Iterator</a> then <tt class="docutils literal"><span class="pre">a</span> <span class="pre">==</span> <span class="pre">b</span></tt> implies <tt class="docutils literal"><span class="pre">*a</span></tt> is the same object as
|
||||||
<tt class="docutils literal"><span class="pre">*b</span></tt>.</p>
|
<tt class="docutils literal"><span class="pre">*b</span></tt>.</p>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="section">
|
<div class="section" id="iterator-traversal-concepts-lib-iterator-traversal">
|
||||||
<h3><a class="toc-backref" href="#id15" id="iterator-traversal-concepts-lib-iterator-traversal" name="iterator-traversal-concepts-lib-iterator-traversal">Iterator Traversal Concepts [lib.iterator.traversal]</a></h3>
|
<h3><a class="toc-backref" href="#id15">Iterator Traversal Concepts [lib.iterator.traversal]</a></h3>
|
||||||
<p>In the tables below, <tt class="docutils literal"><span class="pre">X</span></tt> is an iterator type, <tt class="docutils literal"><span class="pre">a</span></tt> and <tt class="docutils literal"><span class="pre">b</span></tt> are
|
<p>In the tables below, <tt class="docutils literal"><span class="pre">X</span></tt> is an iterator type, <tt class="docutils literal"><span class="pre">a</span></tt> and <tt class="docutils literal"><span class="pre">b</span></tt> are
|
||||||
constant objects of type <tt class="docutils literal"><span class="pre">X</span></tt>, <tt class="docutils literal"><span class="pre">r</span></tt> and <tt class="docutils literal"><span class="pre">s</span></tt> are mutable objects of
|
constant objects of type <tt class="docutils literal"><span class="pre">X</span></tt>, <tt class="docutils literal"><span class="pre">r</span></tt> and <tt class="docutils literal"><span class="pre">s</span></tt> are mutable objects of
|
||||||
type <tt class="docutils literal"><span class="pre">X</span></tt>, <tt class="docutils literal"><span class="pre">T</span></tt> is <tt class="docutils literal"><span class="pre">std::iterator_traits<X>::value_type</span></tt>, and
|
type <tt class="docutils literal"><span class="pre">X</span></tt>, <tt class="docutils literal"><span class="pre">T</span></tt> is <tt class="docutils literal"><span class="pre">std::iterator_traits<X>::value_type</span></tt>, and
|
||||||
<tt class="docutils literal"><span class="pre">v</span></tt> is a constant object of type <tt class="docutils literal"><span class="pre">T</span></tt>.</p>
|
<tt class="docutils literal"><span class="pre">v</span></tt> is a constant object of type <tt class="docutils literal"><span class="pre">T</span></tt>.</p>
|
||||||
<div class="section">
|
<div class="section" id="incrementable-iterators-lib-incrementable-iterators">
|
||||||
<h4><a class="toc-backref" href="#id16" id="incrementable-iterators-lib-incrementable-iterators" name="incrementable-iterators-lib-incrementable-iterators">Incrementable Iterators [lib.incrementable.iterators]</a></h4>
|
<h4><a class="toc-backref" href="#id16">Incrementable Iterators [lib.incrementable.iterators]</a></h4>
|
||||||
<p>A class or built-in type <tt class="docutils literal"><span class="pre">X</span></tt> models the <em>Incrementable Iterator</em>
|
<p>A class or built-in type <tt class="docutils literal"><span class="pre">X</span></tt> models the <em>Incrementable Iterator</em>
|
||||||
concept if, in addition to <tt class="docutils literal"><span class="pre">X</span></tt> being Assignable and Copy
|
concept if, in addition to <tt class="docutils literal"><span class="pre">X</span></tt> being Assignable and Copy
|
||||||
Constructible, the following expressions are valid and respect the
|
Constructible, the following expressions are valid and respect the
|
||||||
@ -828,16 +546,16 @@ stated semantics.</p>
|
|||||||
</tr>
|
</tr>
|
||||||
</tbody>
|
</tbody>
|
||||||
</table>
|
</table>
|
||||||
<p>If <tt class="docutils literal"><span class="pre">X</span></tt> is a <a class="reference" href="#writable-iterator">Writable Iterator</a> then <tt class="docutils literal"><span class="pre">X</span> <span class="pre">a(r++);</span></tt> is equivalent
|
<p>If <tt class="docutils literal"><span class="pre">X</span></tt> is a <a class="reference internal" href="#writable-iterator">Writable Iterator</a> then <tt class="docutils literal"><span class="pre">X</span> <span class="pre">a(r++);</span></tt> is equivalent
|
||||||
to <tt class="docutils literal"><span class="pre">X</span> <span class="pre">a(r);</span> <span class="pre">++r;</span></tt> and <tt class="docutils literal"><span class="pre">*r++</span> <span class="pre">=</span> <span class="pre">o</span></tt> is equivalent
|
to <tt class="docutils literal"><span class="pre">X</span> <span class="pre">a(r);</span> <span class="pre">++r;</span></tt> and <tt class="docutils literal"><span class="pre">*r++</span> <span class="pre">=</span> <span class="pre">o</span></tt> is equivalent
|
||||||
to <tt class="docutils literal"><span class="pre">*r</span> <span class="pre">=</span> <span class="pre">o;</span> <span class="pre">++r</span></tt>.
|
to <tt class="docutils literal"><span class="pre">*r</span> <span class="pre">=</span> <span class="pre">o;</span> <span class="pre">++r</span></tt>.
|
||||||
If <tt class="docutils literal"><span class="pre">X</span></tt> is a <a class="reference" href="#readable-iterator">Readable Iterator</a> then <tt class="docutils literal"><span class="pre">T</span> <span class="pre">z(*r++);</span></tt> is equivalent
|
If <tt class="docutils literal"><span class="pre">X</span></tt> is a <a class="reference internal" href="#readable-iterator">Readable Iterator</a> then <tt class="docutils literal"><span class="pre">T</span> <span class="pre">z(*r++);</span></tt> is equivalent
|
||||||
to <tt class="docutils literal"><span class="pre">T</span> <span class="pre">z(*r);</span> <span class="pre">++r;</span></tt>.</p>
|
to <tt class="docutils literal"><span class="pre">T</span> <span class="pre">z(*r);</span> <span class="pre">++r;</span></tt>.</p>
|
||||||
<!-- TR1: incrementable_iterator_tag changed to
|
<!-- TR1: incrementable_iterator_tag changed to
|
||||||
incrementable_traversal_tag for consistency. -->
|
incrementable_traversal_tag for consistency. -->
|
||||||
</div>
|
</div>
|
||||||
<div class="section">
|
<div class="section" id="single-pass-iterators-lib-single-pass-iterators">
|
||||||
<h4><a class="toc-backref" href="#id17" id="single-pass-iterators-lib-single-pass-iterators" name="single-pass-iterators-lib-single-pass-iterators">Single Pass Iterators [lib.single.pass.iterators]</a></h4>
|
<h4><a class="toc-backref" href="#id17">Single Pass Iterators [lib.single.pass.iterators]</a></h4>
|
||||||
<p>A class or built-in type <tt class="docutils literal"><span class="pre">X</span></tt> models the <em>Single Pass Iterator</em>
|
<p>A class or built-in type <tt class="docutils literal"><span class="pre">X</span></tt> models the <em>Single Pass Iterator</em>
|
||||||
concept if the following expressions are valid and respect the stated
|
concept if the following expressions are valid and respect the stated
|
||||||
semantics.</p>
|
semantics.</p>
|
||||||
@ -849,7 +567,8 @@ semantics.</p>
|
|||||||
<col width="25%" />
|
<col width="25%" />
|
||||||
</colgroup>
|
</colgroup>
|
||||||
<thead valign="bottom">
|
<thead valign="bottom">
|
||||||
<tr><th class="head" colspan="4">Single Pass Iterator Requirements (in addition to Incrementable Iterator and Equality Comparable)</th>
|
<tr><th class="head" colspan="4">Single Pass Iterator Requirements (in addition to Incrementable Iterator and Equality
|
||||||
|
Comparable)</th>
|
||||||
</tr>
|
</tr>
|
||||||
<tr><th class="head">Expression</th>
|
<tr><th class="head">Expression</th>
|
||||||
<th class="head">Return Type</th>
|
<th class="head">Return Type</th>
|
||||||
@ -897,8 +616,8 @@ between iterators</td>
|
|||||||
<!-- TR1: single_pass_iterator_tag changed to
|
<!-- TR1: single_pass_iterator_tag changed to
|
||||||
single_pass_traversal_tag for consistency -->
|
single_pass_traversal_tag for consistency -->
|
||||||
</div>
|
</div>
|
||||||
<div class="section">
|
<div class="section" id="forward-traversal-iterators-lib-forward-traversal-iterators">
|
||||||
<h4><a class="toc-backref" href="#id18" id="forward-traversal-iterators-lib-forward-traversal-iterators" name="forward-traversal-iterators-lib-forward-traversal-iterators">Forward Traversal Iterators [lib.forward.traversal.iterators]</a></h4>
|
<h4><a class="toc-backref" href="#id18">Forward Traversal Iterators [lib.forward.traversal.iterators]</a></h4>
|
||||||
<p>A class or built-in type <tt class="docutils literal"><span class="pre">X</span></tt> models the <em>Forward Traversal Iterator</em>
|
<p>A class or built-in type <tt class="docutils literal"><span class="pre">X</span></tt> models the <em>Forward Traversal Iterator</em>
|
||||||
concept if, in addition to <tt class="docutils literal"><span class="pre">X</span></tt> meeting the requirements of Default
|
concept if, in addition to <tt class="docutils literal"><span class="pre">X</span></tt> meeting the requirements of Default
|
||||||
Constructible and Single Pass Iterator, the following expressions are
|
Constructible and Single Pass Iterator, the following expressions are
|
||||||
@ -939,8 +658,8 @@ dereferenceable implies
|
|||||||
<!-- TR1: forward_traversal_iterator_tag changed to
|
<!-- TR1: forward_traversal_iterator_tag changed to
|
||||||
forward_traversal_tag for consistency -->
|
forward_traversal_tag for consistency -->
|
||||||
</div>
|
</div>
|
||||||
<div class="section">
|
<div class="section" id="bidirectional-traversal-iterators-lib-bidirectional-traversal-iterators">
|
||||||
<h4><a class="toc-backref" href="#id19" id="bidirectional-traversal-iterators-lib-bidirectional-traversal-iterators" name="bidirectional-traversal-iterators-lib-bidirectional-traversal-iterators">Bidirectional Traversal Iterators [lib.bidirectional.traversal.iterators]</a></h4>
|
<h4><a class="toc-backref" href="#id19">Bidirectional Traversal Iterators [lib.bidirectional.traversal.iterators]</a></h4>
|
||||||
<p>A class or built-in type <tt class="docutils literal"><span class="pre">X</span></tt> models the <em>Bidirectional Traversal
|
<p>A class or built-in type <tt class="docutils literal"><span class="pre">X</span></tt> models the <em>Bidirectional Traversal
|
||||||
Iterator</em> concept if, in addition to <tt class="docutils literal"><span class="pre">X</span></tt> meeting the requirements of
|
Iterator</em> concept if, in addition to <tt class="docutils literal"><span class="pre">X</span></tt> meeting the requirements of
|
||||||
Forward Traversal Iterator, the following expressions are valid and
|
Forward Traversal Iterator, the following expressions are valid and
|
||||||
@ -1002,8 +721,8 @@ implies <tt class="docutils literal"><span class="pre">r</span> <span class="pre
|
|||||||
<!-- TR1: bidirectional_traversal_iterator_tag changed to
|
<!-- TR1: bidirectional_traversal_iterator_tag changed to
|
||||||
bidirectional_traversal_tag for consistency -->
|
bidirectional_traversal_tag for consistency -->
|
||||||
</div>
|
</div>
|
||||||
<div class="section">
|
<div class="section" id="random-access-traversal-iterators-lib-random-access-traversal-iterators">
|
||||||
<h4><a class="toc-backref" href="#id20" id="random-access-traversal-iterators-lib-random-access-traversal-iterators" name="random-access-traversal-iterators-lib-random-access-traversal-iterators">Random Access Traversal Iterators [lib.random.access.traversal.iterators]</a></h4>
|
<h4><a class="toc-backref" href="#id20">Random Access Traversal Iterators [lib.random.access.traversal.iterators]</a></h4>
|
||||||
<p>A class or built-in type <tt class="docutils literal"><span class="pre">X</span></tt> models the <em>Random Access Traversal
|
<p>A class or built-in type <tt class="docutils literal"><span class="pre">X</span></tt> models the <em>Random Access Traversal
|
||||||
Iterator</em> concept if the following expressions are valid and respect
|
Iterator</em> concept if the following expressions are valid and respect
|
||||||
the stated semantics. In the table below, <tt class="docutils literal"><span class="pre">Distance</span></tt> is
|
the stated semantics. In the table below, <tt class="docutils literal"><span class="pre">Distance</span></tt> is
|
||||||
@ -1074,13 +793,13 @@ value <tt class="docutils literal"><span class="pre">n</span></tt> of
|
|||||||
<tr><td><tt class="docutils literal"><span class="pre">a[n]</span></tt></td>
|
<tr><td><tt class="docutils literal"><span class="pre">a[n]</span></tt></td>
|
||||||
<td>convertible to T</td>
|
<td>convertible to T</td>
|
||||||
<td><tt class="docutils literal"><span class="pre">*(a</span> <span class="pre">+</span> <span class="pre">n)</span></tt></td>
|
<td><tt class="docutils literal"><span class="pre">*(a</span> <span class="pre">+</span> <span class="pre">n)</span></tt></td>
|
||||||
<td>pre: a is a <a class="reference" href="#readable-iterator">Readable
|
<td>pre: a is a <a class="reference internal" href="#readable-iterator">Readable
|
||||||
Iterator</a></td>
|
Iterator</a></td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr><td><tt class="docutils literal"><span class="pre">a[n]</span> <span class="pre">=</span> <span class="pre">v</span></tt></td>
|
<tr><td><tt class="docutils literal"><span class="pre">a[n]</span> <span class="pre">=</span> <span class="pre">v</span></tt></td>
|
||||||
<td>convertible to T</td>
|
<td>convertible to T</td>
|
||||||
<td><tt class="docutils literal"><span class="pre">*(a</span> <span class="pre">+</span> <span class="pre">n)</span> <span class="pre">=</span> <span class="pre">v</span></tt></td>
|
<td><tt class="docutils literal"><span class="pre">*(a</span> <span class="pre">+</span> <span class="pre">n)</span> <span class="pre">=</span> <span class="pre">v</span></tt></td>
|
||||||
<td>pre: a is a <a class="reference" href="#writable-iterator">Writable
|
<td>pre: a is a <a class="reference internal" href="#writable-iterator">Writable
|
||||||
Iterator</a></td>
|
Iterator</a></td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr><td><tt class="docutils literal"><span class="pre">a</span> <span class="pre"><</span> <span class="pre">b</span></tt></td>
|
<tr><td><tt class="docutils literal"><span class="pre">a</span> <span class="pre"><</span> <span class="pre">b</span></tt></td>
|
||||||
@ -1116,8 +835,8 @@ ordering relation</td>
|
|||||||
<!-- TR1: random_access_traversal_iterator_tag changed to
|
<!-- TR1: random_access_traversal_iterator_tag changed to
|
||||||
random_access_traversal_tag for consistency -->
|
random_access_traversal_tag for consistency -->
|
||||||
</div>
|
</div>
|
||||||
<div class="section">
|
<div class="section" id="interoperable-iterators-lib-interoperable-iterators">
|
||||||
<h4><a class="toc-backref" href="#id21" id="interoperable-iterators-lib-interoperable-iterators" name="interoperable-iterators-lib-interoperable-iterators">Interoperable Iterators [lib.interoperable.iterators]</a></h4>
|
<h4><a class="toc-backref" href="#id21">Interoperable Iterators [lib.interoperable.iterators]</a></h4>
|
||||||
<p>A class or built-in type <tt class="docutils literal"><span class="pre">X</span></tt> that models Single Pass Iterator is
|
<p>A class or built-in type <tt class="docutils literal"><span class="pre">X</span></tt> that models Single Pass Iterator is
|
||||||
<em>interoperable with</em> a class or built-in type <tt class="docutils literal"><span class="pre">Y</span></tt> that also models
|
<em>interoperable with</em> a class or built-in type <tt class="docutils literal"><span class="pre">Y</span></tt> that also models
|
||||||
Single Pass Iterator if the following expressions are valid and
|
Single Pass Iterator if the following expressions are valid and
|
||||||
@ -1240,8 +959,8 @@ the following additional requirements must be met.</p>
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="section">
|
<div class="section" id="addition-to-lib-iterator-synopsis">
|
||||||
<h2><a class="toc-backref" href="#id22" id="addition-to-lib-iterator-synopsis" name="addition-to-lib-iterator-synopsis">Addition to [lib.iterator.synopsis]</a></h2>
|
<h2><a class="toc-backref" href="#id22">Addition to [lib.iterator.synopsis]</a></h2>
|
||||||
<pre class="literal-block">
|
<pre class="literal-block">
|
||||||
// lib.iterator.traits, traits and tags
|
// lib.iterator.traits, traits and tags
|
||||||
template <class Iterator> struct is_readable_iterator;
|
template <class Iterator> struct is_readable_iterator;
|
||||||
@ -1254,10 +973,10 @@ struct bidirectional_traversal_tag : forward_traversal_tag { };
|
|||||||
struct random_access_traversal_tag : bidirectional_traversal_tag { };
|
struct random_access_traversal_tag : bidirectional_traversal_tag { };
|
||||||
</pre>
|
</pre>
|
||||||
</div>
|
</div>
|
||||||
<div class="section">
|
<div class="section" id="addition-to-lib-iterator-traits">
|
||||||
<h2><a class="toc-backref" href="#id23" id="addition-to-lib-iterator-traits" name="addition-to-lib-iterator-traits">Addition to [lib.iterator.traits]</a></h2>
|
<h2><a class="toc-backref" href="#id23">Addition to [lib.iterator.traits]</a></h2>
|
||||||
<p>The <tt class="docutils literal"><span class="pre">is_readable_iterator</span></tt> class
|
<p>The <tt class="docutils literal"><span class="pre">is_readable_iterator</span></tt> class
|
||||||
template satisfies the <a class="reference" href="http://anubis.dkuug.dk/jtc1/sc22/wg21/docs/papers/2003/n1519.htm">UnaryTypeTrait</a> requirements.</p>
|
template satisfies the <a class="reference external" href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2003/n1519.htm">UnaryTypeTrait</a> requirements.</p>
|
||||||
<p>Given an iterator type <tt class="docutils literal"><span class="pre">X</span></tt>, <tt class="docutils literal"><span class="pre">is_readable_iterator<X>::value</span></tt>
|
<p>Given an iterator type <tt class="docutils literal"><span class="pre">X</span></tt>, <tt class="docutils literal"><span class="pre">is_readable_iterator<X>::value</span></tt>
|
||||||
yields <tt class="docutils literal"><span class="pre">true</span></tt> if, for an object <tt class="docutils literal"><span class="pre">a</span></tt> of type <tt class="docutils literal"><span class="pre">X</span></tt>, <tt class="docutils literal"><span class="pre">*a</span></tt> is
|
yields <tt class="docutils literal"><span class="pre">true</span></tt> if, for an object <tt class="docutils literal"><span class="pre">a</span></tt> of type <tt class="docutils literal"><span class="pre">X</span></tt>, <tt class="docutils literal"><span class="pre">*a</span></tt> is
|
||||||
convertible to <tt class="docutils literal"><span class="pre">iterator_traits<X>::value_type</span></tt>, and <tt class="docutils literal"><span class="pre">false</span></tt>
|
convertible to <tt class="docutils literal"><span class="pre">iterator_traits<X>::value_type</span></tt>, and <tt class="docutils literal"><span class="pre">false</span></tt>
|
||||||
@ -1286,9 +1005,9 @@ otherwise.</p>
|
|||||||
</pre>
|
</pre>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="section">
|
<div class="section" id="footnotes">
|
||||||
<h1><a class="toc-backref" href="#id24" id="footnotes" name="footnotes">Footnotes</a></h1>
|
<h1><a class="toc-backref" href="#id24">Footnotes</a></h1>
|
||||||
<p>The UnaryTypeTrait concept is defined in <a class="reference" href="http://anubis.dkuug.dk/jtc1/sc22/wg21/docs/papers/2003/n1519.htm">n1519</a>; the LWG is
|
<p>The UnaryTypeTrait concept is defined in <a class="reference external" href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2003/n1519.htm">n1519</a>; the LWG is
|
||||||
considering adding the requirement that specializations are derived
|
considering adding the requirement that specializations are derived
|
||||||
from their nested <tt class="docutils literal"><span class="pre">::type</span></tt>.</p>
|
from their nested <tt class="docutils literal"><span class="pre">::type</span></tt>.</p>
|
||||||
<!-- LocalWords: Abrahams Siek Witt const bool Sutter's WG int UL LI href Lvalue
|
<!-- LocalWords: Abrahams Siek Witt const bool Sutter's WG int UL LI href Lvalue
|
||||||
@ -1299,6 +1018,12 @@ LocalWords: RandomAccessTraversalIterator dereferenceable Incrementable tmp
|
|||||||
LocalWords: incrementable xxx min prev inplace png oldeqnew AccessTag struct
|
LocalWords: incrementable xxx min prev inplace png oldeqnew AccessTag struct
|
||||||
LocalWords: TraversalTag typename lvalues DWA Hmm JGS mis enum -->
|
LocalWords: TraversalTag typename lvalues DWA Hmm JGS mis enum -->
|
||||||
</div>
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="footer">
|
||||||
|
<hr class="footer" />
|
||||||
|
<a class="reference external" href="new-iter-concepts.rst">View document source</a>.
|
||||||
|
Generated by <a class="reference external" href="http://docutils.sourceforge.net/">Docutils</a> from <a class="reference external" href="http://docutils.sourceforge.net/rst.html">reStructuredText</a> source.
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
</body>
|
</body>
|
||||||
</html>
|
</html>
|
||||||
|
0
doc/new-iter-concepts.pdf
Executable file → Normal file
0
doc/new-iter-concepts.pdf
Executable file → Normal file
@ -38,10 +38,10 @@
|
|||||||
|
|
||||||
.. contents:: Table of Contents
|
.. contents:: Table of Contents
|
||||||
|
|
||||||
.. _n1297: http://anubis.dkuug.dk/jtc1/sc22/wg21/docs/papers/2001/n1297.html
|
.. _n1297: http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2001/n1297.html
|
||||||
.. _n1477: http://anubis.dkuug.dk/jtc1/sc22/wg21/docs/papers/2003/n1477.html
|
.. _n1477: http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2003/n1477.html
|
||||||
.. _n1531: http://anubis.dkuug.dk/jtc1/sc22/wg21/docs/papers/2003/n1531.html
|
.. _n1531: http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2003/n1531.html
|
||||||
.. _n1550: http://anubis.dkuug.dk/jtc1/sc22/wg21/docs/papers/2003/n1550.html
|
.. _n1550: http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2003/n1550.htm
|
||||||
|
|
||||||
============
|
============
|
||||||
Motivation
|
Motivation
|
||||||
@ -76,8 +76,8 @@ requirements in the iterator categories.
|
|||||||
| |is resolved) |
|
| |is resolved) |
|
||||||
+------------------------+-----------------------------------------------------+
|
+------------------------+-----------------------------------------------------+
|
||||||
|
|
||||||
.. _issue 200: http://anubis.dkuug.dk/JTC1/SC22/WG21/docs/lwg-active.html#200
|
.. _issue 200: http://www.open-std.org/JTC1/SC22/WG21/docs/lwg-active.html#200
|
||||||
.. _issue 299: http://anubis.dkuug.dk/JTC1/SC22/WG21/docs/lwg-active.html#299
|
.. _issue 299: http://www.open-std.org/JTC1/SC22/WG21/docs/lwg-active.html#299
|
||||||
|
|
||||||
|
|
||||||
Because iterator traversal and value access are mixed together in a
|
Because iterator traversal and value access are mixed together in a
|
||||||
@ -91,7 +91,7 @@ nonintuitive that the C++ standard contradicts itself on this point.
|
|||||||
In paragraph 23.2.4/1 it says that a ``vector`` is a sequence that
|
In paragraph 23.2.4/1 it says that a ``vector`` is a sequence that
|
||||||
supports random access iterators.
|
supports random access iterators.
|
||||||
|
|
||||||
.. _issue 96: http://anubis.dkuug.dk/JTC1/SC22/WG21/docs/lwg-active.html#96
|
.. _issue 96: http://www.open-std.org/JTC1/SC22/WG21/docs/lwg-active.html#96
|
||||||
|
|
||||||
Another difficult-to-categorize iterator is the transform iterator, an
|
Another difficult-to-categorize iterator is the transform iterator, an
|
||||||
adaptor which applies a unary function object to the dereferenced
|
adaptor which applies a unary function object to the dereferenced
|
||||||
@ -791,7 +791,7 @@ The UnaryTypeTrait concept is defined in n1519_; the LWG is
|
|||||||
considering adding the requirement that specializations are derived
|
considering adding the requirement that specializations are derived
|
||||||
from their nested ``::type``.
|
from their nested ``::type``.
|
||||||
|
|
||||||
.. _n1519: http://anubis.dkuug.dk/jtc1/sc22/wg21/docs/papers/2003/n1519.htm
|
.. _n1519: http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2003/n1519.htm
|
||||||
|
|
||||||
..
|
..
|
||||||
LocalWords: Abrahams Siek Witt const bool Sutter's WG int UL LI href Lvalue
|
LocalWords: Abrahams Siek Witt const bool Sutter's WG int UL LI href Lvalue
|
||||||
|
@ -3,295 +3,13 @@
|
|||||||
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
|
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
|
||||||
<head>
|
<head>
|
||||||
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
|
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
|
||||||
<meta name="generator" content="Docutils 0.4: http://docutils.sourceforge.net/" />
|
<meta name="generator" content="Docutils 0.5: http://docutils.sourceforge.net/" />
|
||||||
<title>Permutation Iterator</title>
|
<title>Permutation Iterator</title>
|
||||||
<meta name="author" content="Toon Knapen, David Abrahams, Roland Richter, Jeremy Siek" />
|
<meta name="author" content="Toon Knapen, David Abrahams, Roland Richter, Jeremy Siek" />
|
||||||
<meta name="organization" content="Boost Consulting, Indiana University Open Systems Lab" />
|
<meta name="organization" content="Boost Consulting, Indiana University Open Systems Lab" />
|
||||||
<meta name="date" content="2004-11-01" />
|
<meta name="date" content="2006-09-11" />
|
||||||
<meta name="copyright" content="Copyright Toon Knapen, David Abrahams, Roland Richter, and Jeremy Siek 2003." />
|
<meta name="copyright" content="Copyright Toon Knapen, David Abrahams, Roland Richter, and Jeremy Siek 2003." />
|
||||||
<style type="text/css">
|
<link rel="stylesheet" href="../../../rst.css" type="text/css" />
|
||||||
|
|
||||||
/*
|
|
||||||
:Author: David Goodger
|
|
||||||
:Contact: goodger@users.sourceforge.net
|
|
||||||
:Date: $Date$
|
|
||||||
:Revision: $Revision$
|
|
||||||
:Copyright: This stylesheet has been placed in the public domain.
|
|
||||||
|
|
||||||
Default cascading style sheet for the HTML output of Docutils.
|
|
||||||
|
|
||||||
See http://docutils.sf.net/docs/howto/html-stylesheets.html for how to
|
|
||||||
customize this style sheet.
|
|
||||||
*/
|
|
||||||
|
|
||||||
/* used to remove borders from tables and images */
|
|
||||||
.borderless, table.borderless td, table.borderless th {
|
|
||||||
border: 0 }
|
|
||||||
|
|
||||||
table.borderless td, table.borderless th {
|
|
||||||
/* Override padding for "table.docutils td" with "! important".
|
|
||||||
The right padding separates the table cells. */
|
|
||||||
padding: 0 0.5em 0 0 ! important }
|
|
||||||
|
|
||||||
.first {
|
|
||||||
/* Override more specific margin styles with "! important". */
|
|
||||||
margin-top: 0 ! important }
|
|
||||||
|
|
||||||
.last, .with-subtitle {
|
|
||||||
margin-bottom: 0 ! important }
|
|
||||||
|
|
||||||
.hidden {
|
|
||||||
display: none }
|
|
||||||
|
|
||||||
a.toc-backref {
|
|
||||||
text-decoration: none ;
|
|
||||||
color: black }
|
|
||||||
|
|
||||||
blockquote.epigraph {
|
|
||||||
margin: 2em 5em ; }
|
|
||||||
|
|
||||||
dl.docutils dd {
|
|
||||||
margin-bottom: 0.5em }
|
|
||||||
|
|
||||||
/* Uncomment (and remove this text!) to get bold-faced definition list terms
|
|
||||||
dl.docutils dt {
|
|
||||||
font-weight: bold }
|
|
||||||
*/
|
|
||||||
|
|
||||||
div.abstract {
|
|
||||||
margin: 2em 5em }
|
|
||||||
|
|
||||||
div.abstract p.topic-title {
|
|
||||||
font-weight: bold ;
|
|
||||||
text-align: center }
|
|
||||||
|
|
||||||
div.admonition, div.attention, div.caution, div.danger, div.error,
|
|
||||||
div.hint, div.important, div.note, div.tip, div.warning {
|
|
||||||
margin: 2em ;
|
|
||||||
border: medium outset ;
|
|
||||||
padding: 1em }
|
|
||||||
|
|
||||||
div.admonition p.admonition-title, div.hint p.admonition-title,
|
|
||||||
div.important p.admonition-title, div.note p.admonition-title,
|
|
||||||
div.tip p.admonition-title {
|
|
||||||
font-weight: bold ;
|
|
||||||
font-family: sans-serif }
|
|
||||||
|
|
||||||
div.attention p.admonition-title, div.caution p.admonition-title,
|
|
||||||
div.danger p.admonition-title, div.error p.admonition-title,
|
|
||||||
div.warning p.admonition-title {
|
|
||||||
color: red ;
|
|
||||||
font-weight: bold ;
|
|
||||||
font-family: sans-serif }
|
|
||||||
|
|
||||||
/* Uncomment (and remove this text!) to get reduced vertical space in
|
|
||||||
compound paragraphs.
|
|
||||||
div.compound .compound-first, div.compound .compound-middle {
|
|
||||||
margin-bottom: 0.5em }
|
|
||||||
|
|
||||||
div.compound .compound-last, div.compound .compound-middle {
|
|
||||||
margin-top: 0.5em }
|
|
||||||
*/
|
|
||||||
|
|
||||||
div.dedication {
|
|
||||||
margin: 2em 5em ;
|
|
||||||
text-align: center ;
|
|
||||||
font-style: italic }
|
|
||||||
|
|
||||||
div.dedication p.topic-title {
|
|
||||||
font-weight: bold ;
|
|
||||||
font-style: normal }
|
|
||||||
|
|
||||||
div.figure {
|
|
||||||
margin-left: 2em ;
|
|
||||||
margin-right: 2em }
|
|
||||||
|
|
||||||
div.footer, div.header {
|
|
||||||
clear: both;
|
|
||||||
font-size: smaller }
|
|
||||||
|
|
||||||
div.line-block {
|
|
||||||
display: block ;
|
|
||||||
margin-top: 1em ;
|
|
||||||
margin-bottom: 1em }
|
|
||||||
|
|
||||||
div.line-block div.line-block {
|
|
||||||
margin-top: 0 ;
|
|
||||||
margin-bottom: 0 ;
|
|
||||||
margin-left: 1.5em }
|
|
||||||
|
|
||||||
div.sidebar {
|
|
||||||
margin-left: 1em ;
|
|
||||||
border: medium outset ;
|
|
||||||
padding: 1em ;
|
|
||||||
background-color: #ffffee ;
|
|
||||||
width: 40% ;
|
|
||||||
float: right ;
|
|
||||||
clear: right }
|
|
||||||
|
|
||||||
div.sidebar p.rubric {
|
|
||||||
font-family: sans-serif ;
|
|
||||||
font-size: medium }
|
|
||||||
|
|
||||||
div.system-messages {
|
|
||||||
margin: 5em }
|
|
||||||
|
|
||||||
div.system-messages h1 {
|
|
||||||
color: red }
|
|
||||||
|
|
||||||
div.system-message {
|
|
||||||
border: medium outset ;
|
|
||||||
padding: 1em }
|
|
||||||
|
|
||||||
div.system-message p.system-message-title {
|
|
||||||
color: red ;
|
|
||||||
font-weight: bold }
|
|
||||||
|
|
||||||
div.topic {
|
|
||||||
margin: 2em }
|
|
||||||
|
|
||||||
h1.section-subtitle, h2.section-subtitle, h3.section-subtitle,
|
|
||||||
h4.section-subtitle, h5.section-subtitle, h6.section-subtitle {
|
|
||||||
margin-top: 0.4em }
|
|
||||||
|
|
||||||
h1.title {
|
|
||||||
text-align: center }
|
|
||||||
|
|
||||||
h2.subtitle {
|
|
||||||
text-align: center }
|
|
||||||
|
|
||||||
hr.docutils {
|
|
||||||
width: 75% }
|
|
||||||
|
|
||||||
img.align-left {
|
|
||||||
clear: left }
|
|
||||||
|
|
||||||
img.align-right {
|
|
||||||
clear: right }
|
|
||||||
|
|
||||||
ol.simple, ul.simple {
|
|
||||||
margin-bottom: 1em }
|
|
||||||
|
|
||||||
ol.arabic {
|
|
||||||
list-style: decimal }
|
|
||||||
|
|
||||||
ol.loweralpha {
|
|
||||||
list-style: lower-alpha }
|
|
||||||
|
|
||||||
ol.upperalpha {
|
|
||||||
list-style: upper-alpha }
|
|
||||||
|
|
||||||
ol.lowerroman {
|
|
||||||
list-style: lower-roman }
|
|
||||||
|
|
||||||
ol.upperroman {
|
|
||||||
list-style: upper-roman }
|
|
||||||
|
|
||||||
p.attribution {
|
|
||||||
text-align: right ;
|
|
||||||
margin-left: 50% }
|
|
||||||
|
|
||||||
p.caption {
|
|
||||||
font-style: italic }
|
|
||||||
|
|
||||||
p.credits {
|
|
||||||
font-style: italic ;
|
|
||||||
font-size: smaller }
|
|
||||||
|
|
||||||
p.label {
|
|
||||||
white-space: nowrap }
|
|
||||||
|
|
||||||
p.rubric {
|
|
||||||
font-weight: bold ;
|
|
||||||
font-size: larger ;
|
|
||||||
color: maroon ;
|
|
||||||
text-align: center }
|
|
||||||
|
|
||||||
p.sidebar-title {
|
|
||||||
font-family: sans-serif ;
|
|
||||||
font-weight: bold ;
|
|
||||||
font-size: larger }
|
|
||||||
|
|
||||||
p.sidebar-subtitle {
|
|
||||||
font-family: sans-serif ;
|
|
||||||
font-weight: bold }
|
|
||||||
|
|
||||||
p.topic-title {
|
|
||||||
font-weight: bold }
|
|
||||||
|
|
||||||
pre.address {
|
|
||||||
margin-bottom: 0 ;
|
|
||||||
margin-top: 0 ;
|
|
||||||
font-family: serif ;
|
|
||||||
font-size: 100% }
|
|
||||||
|
|
||||||
pre.literal-block, pre.doctest-block {
|
|
||||||
margin-left: 2em ;
|
|
||||||
margin-right: 2em ;
|
|
||||||
background-color: #eeeeee }
|
|
||||||
|
|
||||||
span.classifier {
|
|
||||||
font-family: sans-serif ;
|
|
||||||
font-style: oblique }
|
|
||||||
|
|
||||||
span.classifier-delimiter {
|
|
||||||
font-family: sans-serif ;
|
|
||||||
font-weight: bold }
|
|
||||||
|
|
||||||
span.interpreted {
|
|
||||||
font-family: sans-serif }
|
|
||||||
|
|
||||||
span.option {
|
|
||||||
white-space: nowrap }
|
|
||||||
|
|
||||||
span.pre {
|
|
||||||
white-space: pre }
|
|
||||||
|
|
||||||
span.problematic {
|
|
||||||
color: red }
|
|
||||||
|
|
||||||
span.section-subtitle {
|
|
||||||
/* font-size relative to parent (h1..h6 element) */
|
|
||||||
font-size: 80% }
|
|
||||||
|
|
||||||
table.citation {
|
|
||||||
border-left: solid 1px gray;
|
|
||||||
margin-left: 1px }
|
|
||||||
|
|
||||||
table.docinfo {
|
|
||||||
margin: 2em 4em }
|
|
||||||
|
|
||||||
table.docutils {
|
|
||||||
margin-top: 0.5em ;
|
|
||||||
margin-bottom: 0.5em }
|
|
||||||
|
|
||||||
table.footnote {
|
|
||||||
border-left: solid 1px black;
|
|
||||||
margin-left: 1px }
|
|
||||||
|
|
||||||
table.docutils td, table.docutils th,
|
|
||||||
table.docinfo td, table.docinfo th {
|
|
||||||
padding-left: 0.5em ;
|
|
||||||
padding-right: 0.5em ;
|
|
||||||
vertical-align: top }
|
|
||||||
|
|
||||||
table.docutils th.field-name, table.docinfo th.docinfo-name {
|
|
||||||
font-weight: bold ;
|
|
||||||
text-align: left ;
|
|
||||||
white-space: nowrap ;
|
|
||||||
padding-left: 0 }
|
|
||||||
|
|
||||||
h1 tt.docutils, h2 tt.docutils, h3 tt.docutils,
|
|
||||||
h4 tt.docutils, h5 tt.docutils, h6 tt.docutils {
|
|
||||||
font-size: 100% }
|
|
||||||
|
|
||||||
tt.docutils {
|
|
||||||
background-color: #eeeeee }
|
|
||||||
|
|
||||||
ul.auto-toc {
|
|
||||||
list-style-type: none }
|
|
||||||
|
|
||||||
</style>
|
|
||||||
</head>
|
</head>
|
||||||
<body>
|
<body>
|
||||||
<div class="document" id="permutation-iterator">
|
<div class="document" id="permutation-iterator">
|
||||||
@ -303,12 +21,12 @@ ul.auto-toc {
|
|||||||
<tr><th class="docinfo-name">Author:</th>
|
<tr><th class="docinfo-name">Author:</th>
|
||||||
<td>Toon Knapen, David Abrahams, Roland Richter, Jeremy Siek</td></tr>
|
<td>Toon Knapen, David Abrahams, Roland Richter, Jeremy Siek</td></tr>
|
||||||
<tr><th class="docinfo-name">Contact:</th>
|
<tr><th class="docinfo-name">Contact:</th>
|
||||||
<td><a class="first reference" href="mailto:dave@boost-consulting.com">dave@boost-consulting.com</a>, <a class="last reference" href="mailto:jsiek@osl.iu.edu">jsiek@osl.iu.edu</a></td></tr>
|
<td><a class="first reference external" href="mailto:dave@boost-consulting.com">dave@boost-consulting.com</a>, <a class="last reference external" href="mailto:jsiek@osl.iu.edu">jsiek@osl.iu.edu</a></td></tr>
|
||||||
<tr><th class="docinfo-name">Organization:</th>
|
<tr><th class="docinfo-name">Organization:</th>
|
||||||
<td><a class="first reference" href="http://www.boost-consulting.com">Boost Consulting</a>, Indiana University <a class="last reference" href="http://www.osl.iu.edu">Open Systems
|
<td><a class="first reference external" href="http://www.boost-consulting.com">Boost Consulting</a>, Indiana University <a class="last reference external" href="http://www.osl.iu.edu">Open Systems
|
||||||
Lab</a></td></tr>
|
Lab</a></td></tr>
|
||||||
<tr><th class="docinfo-name">Date:</th>
|
<tr><th class="docinfo-name">Date:</th>
|
||||||
<td>2004-11-01</td></tr>
|
<td>2006-09-11</td></tr>
|
||||||
<tr><th class="docinfo-name">Copyright:</th>
|
<tr><th class="docinfo-name">Copyright:</th>
|
||||||
<td>Copyright Toon Knapen, David Abrahams, Roland Richter, and Jeremy Siek 2003.</td></tr>
|
<td>Copyright Toon Knapen, David Abrahams, Roland Richter, and Jeremy Siek 2003.</td></tr>
|
||||||
</tbody>
|
</tbody>
|
||||||
@ -329,21 +47,21 @@ in a potentially different order.</td>
|
|||||||
</tr>
|
</tr>
|
||||||
</tbody>
|
</tbody>
|
||||||
</table>
|
</table>
|
||||||
<div class="contents topic">
|
<div class="contents topic" id="table-of-contents">
|
||||||
<p class="topic-title first"><a id="table-of-contents" name="table-of-contents">Table of Contents</a></p>
|
<p class="topic-title first">Table of Contents</p>
|
||||||
<ul class="simple">
|
<ul class="simple">
|
||||||
<li><a class="reference" href="#introduction" id="id2" name="id2">Introduction</a></li>
|
<li><a class="reference internal" href="#introduction" id="id2">Introduction</a></li>
|
||||||
<li><a class="reference" href="#reference" id="id3" name="id3">Reference</a><ul>
|
<li><a class="reference internal" href="#reference" id="id3">Reference</a><ul>
|
||||||
<li><a class="reference" href="#permutation-iterator-requirements" id="id4" name="id4"><tt class="docutils literal"><span class="pre">permutation_iterator</span></tt> requirements</a></li>
|
<li><a class="reference internal" href="#permutation-iterator-requirements" id="id4"><tt class="docutils literal"><span class="pre">permutation_iterator</span></tt> requirements</a></li>
|
||||||
<li><a class="reference" href="#permutation-iterator-models" id="id5" name="id5"><tt class="docutils literal"><span class="pre">permutation_iterator</span></tt> models</a></li>
|
<li><a class="reference internal" href="#permutation-iterator-models" id="id5"><tt class="docutils literal"><span class="pre">permutation_iterator</span></tt> models</a></li>
|
||||||
<li><a class="reference" href="#permutation-iterator-operations" id="id6" name="id6"><tt class="docutils literal"><span class="pre">permutation_iterator</span></tt> operations</a></li>
|
<li><a class="reference internal" href="#permutation-iterator-operations" id="id6"><tt class="docutils literal"><span class="pre">permutation_iterator</span></tt> operations</a></li>
|
||||||
</ul>
|
</ul>
|
||||||
</li>
|
</li>
|
||||||
<li><a class="reference" href="#example" id="id7" name="id7">Example</a></li>
|
<li><a class="reference internal" href="#example" id="id7">Example</a></li>
|
||||||
</ul>
|
</ul>
|
||||||
</div>
|
</div>
|
||||||
<div class="section">
|
<div class="section" id="introduction">
|
||||||
<h1><a class="toc-backref" href="#id2" id="introduction" name="introduction">Introduction</a></h1>
|
<h1><a class="toc-backref" href="#id2">Introduction</a></h1>
|
||||||
<!-- Copyright David Abrahams 2006. Distributed under the Boost -->
|
<!-- Copyright David Abrahams 2006. Distributed under the Boost -->
|
||||||
<!-- Software License, Version 1.0. (See accompanying -->
|
<!-- Software License, Version 1.0. (See accompanying -->
|
||||||
<!-- file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) -->
|
<!-- file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) -->
|
||||||
@ -365,8 +83,8 @@ to be unique. In this same context, it must be noted that the past the
|
|||||||
end permutation iterator is completely defined by means of the
|
end permutation iterator is completely defined by means of the
|
||||||
past-the-end iterator to the indices.</p>
|
past-the-end iterator to the indices.</p>
|
||||||
</div>
|
</div>
|
||||||
<div class="section">
|
<div class="section" id="reference">
|
||||||
<h1><a class="toc-backref" href="#id3" id="reference" name="reference">Reference</a></h1>
|
<h1><a class="toc-backref" href="#id3">Reference</a></h1>
|
||||||
<!-- Copyright David Abrahams 2006. Distributed under the Boost -->
|
<!-- Copyright David Abrahams 2006. Distributed under the Boost -->
|
||||||
<!-- Software License, Version 1.0. (See accompanying -->
|
<!-- Software License, Version 1.0. (See accompanying -->
|
||||||
<!-- file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) -->
|
<!-- file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) -->
|
||||||
@ -401,15 +119,15 @@ template <class ElementIterator, class IndexIterator>
|
|||||||
permutation_iterator<ElementIterator, IndexIterator>
|
permutation_iterator<ElementIterator, IndexIterator>
|
||||||
make_permutation_iterator( ElementIterator e, IndexIterator i);
|
make_permutation_iterator( ElementIterator e, IndexIterator i);
|
||||||
</pre>
|
</pre>
|
||||||
<div class="section">
|
<div class="section" id="permutation-iterator-requirements">
|
||||||
<h2><a class="toc-backref" href="#id4" id="permutation-iterator-requirements" name="permutation-iterator-requirements"><tt class="docutils literal"><span class="pre">permutation_iterator</span></tt> requirements</a></h2>
|
<h2><a class="toc-backref" href="#id4"><tt class="docutils literal"><span class="pre">permutation_iterator</span></tt> requirements</a></h2>
|
||||||
<p><tt class="docutils literal"><span class="pre">ElementIterator</span></tt> shall model Random Access Traversal Iterator.
|
<p><tt class="docutils literal"><span class="pre">ElementIterator</span></tt> shall model Random Access Traversal Iterator.
|
||||||
<tt class="docutils literal"><span class="pre">IndexIterator</span></tt> shall model Readable Iterator. The value type of
|
<tt class="docutils literal"><span class="pre">IndexIterator</span></tt> shall model Readable Iterator. The value type of
|
||||||
the <tt class="docutils literal"><span class="pre">IndexIterator</span></tt> must be convertible to the difference type of
|
the <tt class="docutils literal"><span class="pre">IndexIterator</span></tt> must be convertible to the difference type of
|
||||||
<tt class="docutils literal"><span class="pre">ElementIterator</span></tt>.</p>
|
<tt class="docutils literal"><span class="pre">ElementIterator</span></tt>.</p>
|
||||||
</div>
|
</div>
|
||||||
<div class="section">
|
<div class="section" id="permutation-iterator-models">
|
||||||
<h2><a class="toc-backref" href="#id5" id="permutation-iterator-models" name="permutation-iterator-models"><tt class="docutils literal"><span class="pre">permutation_iterator</span></tt> models</a></h2>
|
<h2><a class="toc-backref" href="#id5"><tt class="docutils literal"><span class="pre">permutation_iterator</span></tt> models</a></h2>
|
||||||
<p><tt class="docutils literal"><span class="pre">permutation_iterator</span></tt> models the same iterator traversal concepts
|
<p><tt class="docutils literal"><span class="pre">permutation_iterator</span></tt> models the same iterator traversal concepts
|
||||||
as <tt class="docutils literal"><span class="pre">IndexIterator</span></tt> and the same iterator access concepts as
|
as <tt class="docutils literal"><span class="pre">IndexIterator</span></tt> and the same iterator access concepts as
|
||||||
<tt class="docutils literal"><span class="pre">ElementIterator</span></tt>.</p>
|
<tt class="docutils literal"><span class="pre">ElementIterator</span></tt>.</p>
|
||||||
@ -430,8 +148,8 @@ with <tt class="docutils literal"><span class="pre">permutation_iterator<E2,<
|
|||||||
<tt class="docutils literal"><span class="pre">X</span></tt> is interoperable with <tt class="docutils literal"><span class="pre">Y</span></tt> and <tt class="docutils literal"><span class="pre">E1</span></tt> is convertible
|
<tt class="docutils literal"><span class="pre">X</span></tt> is interoperable with <tt class="docutils literal"><span class="pre">Y</span></tt> and <tt class="docutils literal"><span class="pre">E1</span></tt> is convertible
|
||||||
to <tt class="docutils literal"><span class="pre">E2</span></tt>.</p>
|
to <tt class="docutils literal"><span class="pre">E2</span></tt>.</p>
|
||||||
</div>
|
</div>
|
||||||
<div class="section">
|
<div class="section" id="permutation-iterator-operations">
|
||||||
<h2><a class="toc-backref" href="#id6" id="permutation-iterator-operations" name="permutation-iterator-operations"><tt class="docutils literal"><span class="pre">permutation_iterator</span></tt> operations</a></h2>
|
<h2><a class="toc-backref" href="#id6"><tt class="docutils literal"><span class="pre">permutation_iterator</span></tt> operations</a></h2>
|
||||||
<p>In addition to those operations required by the concepts that
|
<p>In addition to those operations required by the concepts that
|
||||||
<tt class="docutils literal"><span class="pre">permutation_iterator</span></tt> models, <tt class="docutils literal"><span class="pre">permutation_iterator</span></tt> provides the
|
<tt class="docutils literal"><span class="pre">permutation_iterator</span></tt> models, <tt class="docutils literal"><span class="pre">permutation_iterator</span></tt> provides the
|
||||||
following operations.</p>
|
following operations.</p>
|
||||||
@ -514,8 +232,8 @@ make_permutation_iterator(ElementIterator e, IndexIterator i);
|
|||||||
</table>
|
</table>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="section">
|
<div class="section" id="example">
|
||||||
<h1><a class="toc-backref" href="#id7" id="example" name="example">Example</a></h1>
|
<h1><a class="toc-backref" href="#id7">Example</a></h1>
|
||||||
<!-- Copyright David Abrahams 2006. Distributed under the Boost -->
|
<!-- Copyright David Abrahams 2006. Distributed under the Boost -->
|
||||||
<!-- Software License, Version 1.0. (See accompanying -->
|
<!-- Software License, Version 1.0. (See accompanying -->
|
||||||
<!-- file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) -->
|
<!-- file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) -->
|
||||||
@ -580,8 +298,14 @@ Elements at even indices in the permutation : 9 7
|
|||||||
Permutation backwards : 6 7 8 9
|
Permutation backwards : 6 7 8 9
|
||||||
Iterate backward with stride 2 : 6 8
|
Iterate backward with stride 2 : 6 8
|
||||||
</pre>
|
</pre>
|
||||||
<p>The source code for this example can be found <a class="reference" href="../example/permutation_iter_example.cpp">here</a>.</p>
|
<p>The source code for this example can be found <a class="reference external" href="../example/permutation_iter_example.cpp">here</a>.</p>
|
||||||
</div>
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="footer">
|
||||||
|
<hr class="footer" />
|
||||||
|
<a class="reference external" href="permutation_iterator.rst">View document source</a>.
|
||||||
|
Generated by <a class="reference external" href="http://docutils.sourceforge.net/">Docutils</a> from <a class="reference external" href="http://docutils.sourceforge.net/rst.html">reStructuredText</a> source.
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
</body>
|
</body>
|
||||||
</html>
|
</html>
|
||||||
|
0
doc/permutation_iterator.pdf
Executable file → Normal file
0
doc/permutation_iterator.pdf
Executable file → Normal file
326
doc/pointee.html
Executable file → Normal file
326
doc/pointee.html
Executable file → Normal file
@ -3,295 +3,13 @@
|
|||||||
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
|
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
|
||||||
<head>
|
<head>
|
||||||
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
|
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
|
||||||
<meta name="generator" content="Docutils 0.4: http://docutils.sourceforge.net/" />
|
<meta name="generator" content="Docutils 0.5: http://docutils.sourceforge.net/" />
|
||||||
<title>pointee and indirect_reference</title>
|
<title>pointee and indirect_reference</title>
|
||||||
<meta name="author" content="David Abrahams" />
|
<meta name="author" content="David Abrahams" />
|
||||||
<meta name="organization" content="Boost Consulting" />
|
<meta name="organization" content="Boost Consulting" />
|
||||||
<meta name="date" content="2005-02-27" />
|
<meta name="date" content="2006-09-11" />
|
||||||
<meta name="copyright" content="Copyright David Abrahams 2004." />
|
<meta name="copyright" content="Copyright David Abrahams 2004." />
|
||||||
<style type="text/css">
|
<link rel="stylesheet" href="../../../rst.css" type="text/css" />
|
||||||
|
|
||||||
/*
|
|
||||||
:Author: David Goodger
|
|
||||||
:Contact: goodger@users.sourceforge.net
|
|
||||||
:Date: $Date$
|
|
||||||
:Revision: $Revision$
|
|
||||||
:Copyright: This stylesheet has been placed in the public domain.
|
|
||||||
|
|
||||||
Default cascading style sheet for the HTML output of Docutils.
|
|
||||||
|
|
||||||
See http://docutils.sf.net/docs/howto/html-stylesheets.html for how to
|
|
||||||
customize this style sheet.
|
|
||||||
*/
|
|
||||||
|
|
||||||
/* used to remove borders from tables and images */
|
|
||||||
.borderless, table.borderless td, table.borderless th {
|
|
||||||
border: 0 }
|
|
||||||
|
|
||||||
table.borderless td, table.borderless th {
|
|
||||||
/* Override padding for "table.docutils td" with "! important".
|
|
||||||
The right padding separates the table cells. */
|
|
||||||
padding: 0 0.5em 0 0 ! important }
|
|
||||||
|
|
||||||
.first {
|
|
||||||
/* Override more specific margin styles with "! important". */
|
|
||||||
margin-top: 0 ! important }
|
|
||||||
|
|
||||||
.last, .with-subtitle {
|
|
||||||
margin-bottom: 0 ! important }
|
|
||||||
|
|
||||||
.hidden {
|
|
||||||
display: none }
|
|
||||||
|
|
||||||
a.toc-backref {
|
|
||||||
text-decoration: none ;
|
|
||||||
color: black }
|
|
||||||
|
|
||||||
blockquote.epigraph {
|
|
||||||
margin: 2em 5em ; }
|
|
||||||
|
|
||||||
dl.docutils dd {
|
|
||||||
margin-bottom: 0.5em }
|
|
||||||
|
|
||||||
/* Uncomment (and remove this text!) to get bold-faced definition list terms
|
|
||||||
dl.docutils dt {
|
|
||||||
font-weight: bold }
|
|
||||||
*/
|
|
||||||
|
|
||||||
div.abstract {
|
|
||||||
margin: 2em 5em }
|
|
||||||
|
|
||||||
div.abstract p.topic-title {
|
|
||||||
font-weight: bold ;
|
|
||||||
text-align: center }
|
|
||||||
|
|
||||||
div.admonition, div.attention, div.caution, div.danger, div.error,
|
|
||||||
div.hint, div.important, div.note, div.tip, div.warning {
|
|
||||||
margin: 2em ;
|
|
||||||
border: medium outset ;
|
|
||||||
padding: 1em }
|
|
||||||
|
|
||||||
div.admonition p.admonition-title, div.hint p.admonition-title,
|
|
||||||
div.important p.admonition-title, div.note p.admonition-title,
|
|
||||||
div.tip p.admonition-title {
|
|
||||||
font-weight: bold ;
|
|
||||||
font-family: sans-serif }
|
|
||||||
|
|
||||||
div.attention p.admonition-title, div.caution p.admonition-title,
|
|
||||||
div.danger p.admonition-title, div.error p.admonition-title,
|
|
||||||
div.warning p.admonition-title {
|
|
||||||
color: red ;
|
|
||||||
font-weight: bold ;
|
|
||||||
font-family: sans-serif }
|
|
||||||
|
|
||||||
/* Uncomment (and remove this text!) to get reduced vertical space in
|
|
||||||
compound paragraphs.
|
|
||||||
div.compound .compound-first, div.compound .compound-middle {
|
|
||||||
margin-bottom: 0.5em }
|
|
||||||
|
|
||||||
div.compound .compound-last, div.compound .compound-middle {
|
|
||||||
margin-top: 0.5em }
|
|
||||||
*/
|
|
||||||
|
|
||||||
div.dedication {
|
|
||||||
margin: 2em 5em ;
|
|
||||||
text-align: center ;
|
|
||||||
font-style: italic }
|
|
||||||
|
|
||||||
div.dedication p.topic-title {
|
|
||||||
font-weight: bold ;
|
|
||||||
font-style: normal }
|
|
||||||
|
|
||||||
div.figure {
|
|
||||||
margin-left: 2em ;
|
|
||||||
margin-right: 2em }
|
|
||||||
|
|
||||||
div.footer, div.header {
|
|
||||||
clear: both;
|
|
||||||
font-size: smaller }
|
|
||||||
|
|
||||||
div.line-block {
|
|
||||||
display: block ;
|
|
||||||
margin-top: 1em ;
|
|
||||||
margin-bottom: 1em }
|
|
||||||
|
|
||||||
div.line-block div.line-block {
|
|
||||||
margin-top: 0 ;
|
|
||||||
margin-bottom: 0 ;
|
|
||||||
margin-left: 1.5em }
|
|
||||||
|
|
||||||
div.sidebar {
|
|
||||||
margin-left: 1em ;
|
|
||||||
border: medium outset ;
|
|
||||||
padding: 1em ;
|
|
||||||
background-color: #ffffee ;
|
|
||||||
width: 40% ;
|
|
||||||
float: right ;
|
|
||||||
clear: right }
|
|
||||||
|
|
||||||
div.sidebar p.rubric {
|
|
||||||
font-family: sans-serif ;
|
|
||||||
font-size: medium }
|
|
||||||
|
|
||||||
div.system-messages {
|
|
||||||
margin: 5em }
|
|
||||||
|
|
||||||
div.system-messages h1 {
|
|
||||||
color: red }
|
|
||||||
|
|
||||||
div.system-message {
|
|
||||||
border: medium outset ;
|
|
||||||
padding: 1em }
|
|
||||||
|
|
||||||
div.system-message p.system-message-title {
|
|
||||||
color: red ;
|
|
||||||
font-weight: bold }
|
|
||||||
|
|
||||||
div.topic {
|
|
||||||
margin: 2em }
|
|
||||||
|
|
||||||
h1.section-subtitle, h2.section-subtitle, h3.section-subtitle,
|
|
||||||
h4.section-subtitle, h5.section-subtitle, h6.section-subtitle {
|
|
||||||
margin-top: 0.4em }
|
|
||||||
|
|
||||||
h1.title {
|
|
||||||
text-align: center }
|
|
||||||
|
|
||||||
h2.subtitle {
|
|
||||||
text-align: center }
|
|
||||||
|
|
||||||
hr.docutils {
|
|
||||||
width: 75% }
|
|
||||||
|
|
||||||
img.align-left {
|
|
||||||
clear: left }
|
|
||||||
|
|
||||||
img.align-right {
|
|
||||||
clear: right }
|
|
||||||
|
|
||||||
ol.simple, ul.simple {
|
|
||||||
margin-bottom: 1em }
|
|
||||||
|
|
||||||
ol.arabic {
|
|
||||||
list-style: decimal }
|
|
||||||
|
|
||||||
ol.loweralpha {
|
|
||||||
list-style: lower-alpha }
|
|
||||||
|
|
||||||
ol.upperalpha {
|
|
||||||
list-style: upper-alpha }
|
|
||||||
|
|
||||||
ol.lowerroman {
|
|
||||||
list-style: lower-roman }
|
|
||||||
|
|
||||||
ol.upperroman {
|
|
||||||
list-style: upper-roman }
|
|
||||||
|
|
||||||
p.attribution {
|
|
||||||
text-align: right ;
|
|
||||||
margin-left: 50% }
|
|
||||||
|
|
||||||
p.caption {
|
|
||||||
font-style: italic }
|
|
||||||
|
|
||||||
p.credits {
|
|
||||||
font-style: italic ;
|
|
||||||
font-size: smaller }
|
|
||||||
|
|
||||||
p.label {
|
|
||||||
white-space: nowrap }
|
|
||||||
|
|
||||||
p.rubric {
|
|
||||||
font-weight: bold ;
|
|
||||||
font-size: larger ;
|
|
||||||
color: maroon ;
|
|
||||||
text-align: center }
|
|
||||||
|
|
||||||
p.sidebar-title {
|
|
||||||
font-family: sans-serif ;
|
|
||||||
font-weight: bold ;
|
|
||||||
font-size: larger }
|
|
||||||
|
|
||||||
p.sidebar-subtitle {
|
|
||||||
font-family: sans-serif ;
|
|
||||||
font-weight: bold }
|
|
||||||
|
|
||||||
p.topic-title {
|
|
||||||
font-weight: bold }
|
|
||||||
|
|
||||||
pre.address {
|
|
||||||
margin-bottom: 0 ;
|
|
||||||
margin-top: 0 ;
|
|
||||||
font-family: serif ;
|
|
||||||
font-size: 100% }
|
|
||||||
|
|
||||||
pre.literal-block, pre.doctest-block {
|
|
||||||
margin-left: 2em ;
|
|
||||||
margin-right: 2em ;
|
|
||||||
background-color: #eeeeee }
|
|
||||||
|
|
||||||
span.classifier {
|
|
||||||
font-family: sans-serif ;
|
|
||||||
font-style: oblique }
|
|
||||||
|
|
||||||
span.classifier-delimiter {
|
|
||||||
font-family: sans-serif ;
|
|
||||||
font-weight: bold }
|
|
||||||
|
|
||||||
span.interpreted {
|
|
||||||
font-family: sans-serif }
|
|
||||||
|
|
||||||
span.option {
|
|
||||||
white-space: nowrap }
|
|
||||||
|
|
||||||
span.pre {
|
|
||||||
white-space: pre }
|
|
||||||
|
|
||||||
span.problematic {
|
|
||||||
color: red }
|
|
||||||
|
|
||||||
span.section-subtitle {
|
|
||||||
/* font-size relative to parent (h1..h6 element) */
|
|
||||||
font-size: 80% }
|
|
||||||
|
|
||||||
table.citation {
|
|
||||||
border-left: solid 1px gray;
|
|
||||||
margin-left: 1px }
|
|
||||||
|
|
||||||
table.docinfo {
|
|
||||||
margin: 2em 4em }
|
|
||||||
|
|
||||||
table.docutils {
|
|
||||||
margin-top: 0.5em ;
|
|
||||||
margin-bottom: 0.5em }
|
|
||||||
|
|
||||||
table.footnote {
|
|
||||||
border-left: solid 1px black;
|
|
||||||
margin-left: 1px }
|
|
||||||
|
|
||||||
table.docutils td, table.docutils th,
|
|
||||||
table.docinfo td, table.docinfo th {
|
|
||||||
padding-left: 0.5em ;
|
|
||||||
padding-right: 0.5em ;
|
|
||||||
vertical-align: top }
|
|
||||||
|
|
||||||
table.docutils th.field-name, table.docinfo th.docinfo-name {
|
|
||||||
font-weight: bold ;
|
|
||||||
text-align: left ;
|
|
||||||
white-space: nowrap ;
|
|
||||||
padding-left: 0 }
|
|
||||||
|
|
||||||
h1 tt.docutils, h2 tt.docutils, h3 tt.docutils,
|
|
||||||
h4 tt.docutils, h5 tt.docutils, h6 tt.docutils {
|
|
||||||
font-size: 100% }
|
|
||||||
|
|
||||||
tt.docutils {
|
|
||||||
background-color: #eeeeee }
|
|
||||||
|
|
||||||
ul.auto-toc {
|
|
||||||
list-style-type: none }
|
|
||||||
|
|
||||||
</style>
|
|
||||||
</head>
|
</head>
|
||||||
<body>
|
<body>
|
||||||
<div class="document" id="pointee-and-indirect-reference">
|
<div class="document" id="pointee-and-indirect-reference">
|
||||||
@ -303,11 +21,11 @@ ul.auto-toc {
|
|||||||
<tr><th class="docinfo-name">Author:</th>
|
<tr><th class="docinfo-name">Author:</th>
|
||||||
<td>David Abrahams</td></tr>
|
<td>David Abrahams</td></tr>
|
||||||
<tr><th class="docinfo-name">Contact:</th>
|
<tr><th class="docinfo-name">Contact:</th>
|
||||||
<td><a class="first last reference" href="mailto:dave@boost-consulting.com">dave@boost-consulting.com</a></td></tr>
|
<td><a class="first last reference external" href="mailto:dave@boost-consulting.com">dave@boost-consulting.com</a></td></tr>
|
||||||
<tr><th class="docinfo-name">Organization:</th>
|
<tr><th class="docinfo-name">Organization:</th>
|
||||||
<td><a class="first last reference" href="http://www.boost-consulting.com">Boost Consulting</a></td></tr>
|
<td><a class="first last reference external" href="http://www.boost-consulting.com">Boost Consulting</a></td></tr>
|
||||||
<tr><th class="docinfo-name">Date:</th>
|
<tr><th class="docinfo-name">Date:</th>
|
||||||
<td>2005-02-27</td></tr>
|
<td>2006-09-11</td></tr>
|
||||||
<tr><th class="docinfo-name">Copyright:</th>
|
<tr><th class="docinfo-name">Copyright:</th>
|
||||||
<td>Copyright David Abrahams 2004.</td></tr>
|
<td>Copyright David Abrahams 2004.</td></tr>
|
||||||
</tbody>
|
</tbody>
|
||||||
@ -324,8 +42,8 @@ pointers, smart pointers and iterators in generic code.</td>
|
|||||||
</tr>
|
</tr>
|
||||||
</tbody>
|
</tbody>
|
||||||
</table>
|
</table>
|
||||||
<div class="section">
|
<div class="section" id="overview">
|
||||||
<h1><a id="overview" name="overview">Overview</a></h1>
|
<h1>Overview</h1>
|
||||||
<p>Have you ever wanted to write a generic function that can operate
|
<p>Have you ever wanted to write a generic function that can operate
|
||||||
on any kind of dereferenceable object? If you have, you've
|
on any kind of dereferenceable object? If you have, you've
|
||||||
probably run into the problem of how to determine the type that the
|
probably run into the problem of how to determine the type that the
|
||||||
@ -338,8 +56,8 @@ void f(Dereferenceable p)
|
|||||||
...
|
...
|
||||||
}
|
}
|
||||||
</pre>
|
</pre>
|
||||||
<div class="section">
|
<div class="section" id="pointee">
|
||||||
<h2><a id="pointee" name="pointee"><tt class="docutils literal"><span class="pre">pointee</span></tt></a></h2>
|
<h2><tt class="docutils literal"><span class="pre">pointee</span></tt></h2>
|
||||||
<p>It turns out to be impossible to come up with a fully-general
|
<p>It turns out to be impossible to come up with a fully-general
|
||||||
algorithm to do determine <em>what-goes-here</em> directly, but it is
|
algorithm to do determine <em>what-goes-here</em> directly, but it is
|
||||||
possible to require that <tt class="docutils literal"><span class="pre">pointee<Dereferenceable>::type</span></tt> is
|
possible to require that <tt class="docutils literal"><span class="pre">pointee<Dereferenceable>::type</span></tt> is
|
||||||
@ -360,8 +78,8 @@ namespace boost
|
|||||||
}
|
}
|
||||||
</pre>
|
</pre>
|
||||||
</div>
|
</div>
|
||||||
<div class="section">
|
<div class="section" id="indirect-reference">
|
||||||
<h2><a id="indirect-reference" name="indirect-reference"><tt class="docutils literal"><span class="pre">indirect_reference</span></tt></a></h2>
|
<h2><tt class="docutils literal"><span class="pre">indirect_reference</span></tt></h2>
|
||||||
<p><tt class="docutils literal"><span class="pre">indirect_reference<T>::type</span></tt> is rather more specialized than
|
<p><tt class="docutils literal"><span class="pre">indirect_reference<T>::type</span></tt> is rather more specialized than
|
||||||
<tt class="docutils literal"><span class="pre">pointee</span></tt>, and is meant to be used to forward the result of
|
<tt class="docutils literal"><span class="pre">pointee</span></tt>, and is meant to be used to forward the result of
|
||||||
dereferencing an object of its argument type. Most dereferenceable
|
dereferencing an object of its argument type. Most dereferenceable
|
||||||
@ -369,13 +87,13 @@ types just return a reference to their pointee, but some return
|
|||||||
proxy references or return the pointee by value. When that
|
proxy references or return the pointee by value. When that
|
||||||
information is needed, call on <tt class="docutils literal"><span class="pre">indirect_reference</span></tt>.</p>
|
information is needed, call on <tt class="docutils literal"><span class="pre">indirect_reference</span></tt>.</p>
|
||||||
<p>Both of these templates are essential to the correct functioning of
|
<p>Both of these templates are essential to the correct functioning of
|
||||||
<a class="reference" href="indirect_iterator.html"><tt class="docutils literal"><span class="pre">indirect_iterator</span></tt></a>.</p>
|
<a class="reference external" href="indirect_iterator.html"><tt class="docutils literal"><span class="pre">indirect_iterator</span></tt></a>.</p>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="section">
|
<div class="section" id="reference">
|
||||||
<h1><a id="reference" name="reference">Reference</a></h1>
|
<h1>Reference</h1>
|
||||||
<div class="section">
|
<div class="section" id="id1">
|
||||||
<h2><a id="id1" name="id1"><tt class="docutils literal"><span class="pre">pointee</span></tt></a></h2>
|
<h2><tt class="docutils literal"><span class="pre">pointee</span></tt></h2>
|
||||||
<!-- Copyright David Abrahams 2004. Use, modification and distribution is -->
|
<!-- Copyright David Abrahams 2004. Use, modification and distribution is -->
|
||||||
<!-- subject to the Boost Software License, Version 1.0. (See accompanying -->
|
<!-- subject to 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) -->
|
<!-- file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) -->
|
||||||
@ -418,8 +136,8 @@ else
|
|||||||
}
|
}
|
||||||
</pre>
|
</pre>
|
||||||
</div>
|
</div>
|
||||||
<div class="section">
|
<div class="section" id="id2">
|
||||||
<h2><a id="id2" name="id2"><tt class="docutils literal"><span class="pre">indirect_reference</span></tt></a></h2>
|
<h2><tt class="docutils literal"><span class="pre">indirect_reference</span></tt></h2>
|
||||||
<!-- Copyright David Abrahams 2004. Use, modification and distribution is -->
|
<!-- Copyright David Abrahams 2004. Use, modification and distribution is -->
|
||||||
<!-- subject to the Boost Software License, Version 1.0. (See accompanying -->
|
<!-- subject to 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) -->
|
<!-- file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) -->
|
||||||
@ -454,6 +172,12 @@ else
|
|||||||
</pre>
|
</pre>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="footer">
|
||||||
|
<hr class="footer" />
|
||||||
|
<a class="reference external" href="pointee.rst">View document source</a>.
|
||||||
|
Generated by <a class="reference external" href="http://docutils.sourceforge.net/">Docutils</a> from <a class="reference external" href="http://docutils.sourceforge.net/rst.html">reStructuredText</a> source.
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
</body>
|
</body>
|
||||||
</html>
|
</html>
|
||||||
|
0
doc/pointee.pdf
Executable file → Normal file
0
doc/pointee.pdf
Executable file → Normal file
0
doc/pointee.rst
Executable file → Normal file
0
doc/pointee.rst
Executable file → Normal file
0
doc/pointee_ref.rst
Executable file → Normal file
0
doc/pointee_ref.rst
Executable file → Normal file
@ -1,4 +1,3 @@
|
|||||||
|
|
||||||
[section:adaptor Iterator Adaptor]
|
[section:adaptor Iterator Adaptor]
|
||||||
|
|
||||||
The `iterator_adaptor` class template adapts some `Base` [#base]_
|
The `iterator_adaptor` class template adapts some `Base` [#base]_
|
||||||
@ -47,7 +46,7 @@ that assumption.
|
|||||||
, class Reference = use_default
|
, class Reference = use_default
|
||||||
, class Difference = use_default
|
, class Difference = use_default
|
||||||
>
|
>
|
||||||
class iterator_adaptor
|
class iterator_adaptor
|
||||||
: public iterator_facade<Derived, *V'*, *C'*, *R'*, *D'*> // see details
|
: public iterator_facade<Derived, *V'*, *C'*, *R'*, *D'*> // see details
|
||||||
{
|
{
|
||||||
friend class iterator_core_access;
|
friend class iterator_core_access;
|
||||||
@ -60,21 +59,21 @@ that assumption.
|
|||||||
typedef iterator_adaptor iterator_adaptor\_;
|
typedef iterator_adaptor iterator_adaptor\_;
|
||||||
Base const& base_reference() const;
|
Base const& base_reference() const;
|
||||||
Base& base_reference();
|
Base& base_reference();
|
||||||
private: // Core iterator interface for iterator_facade.
|
private: // Core iterator interface for iterator_facade.
|
||||||
typename iterator_adaptor::reference dereference() const;
|
typename iterator_adaptor::reference dereference() const;
|
||||||
|
|
||||||
template <
|
template <
|
||||||
class OtherDerived, class OtherIterator, class V, class C, class R, class D
|
class OtherDerived, class OtherIterator, class V, class C, class R, class D
|
||||||
>
|
>
|
||||||
bool equal(iterator_adaptor<OtherDerived, OtherIterator, V, C, R, D> const& x) const;
|
bool equal(iterator_adaptor<OtherDerived, OtherIterator, V, C, R, D> const& x) const;
|
||||||
|
|
||||||
void advance(typename iterator_adaptor::difference_type n);
|
void advance(typename iterator_adaptor::difference_type n);
|
||||||
void increment();
|
void increment();
|
||||||
void decrement();
|
void decrement();
|
||||||
|
|
||||||
template <
|
template <
|
||||||
class OtherDerived, class OtherIterator, class V, class C, class R, class D
|
class OtherDerived, class OtherIterator, class V, class C, class R, class D
|
||||||
>
|
>
|
||||||
typename iterator_adaptor::difference_type distance_to(
|
typename iterator_adaptor::difference_type distance_to(
|
||||||
iterator_adaptor<OtherDerived, OtherIterator, V, C, R, D> const& y) const;
|
iterator_adaptor<OtherDerived, OtherIterator, V, C, R, D> const& y) const;
|
||||||
|
|
||||||
@ -132,8 +131,8 @@ above are defined as follows:
|
|||||||
|
|
||||||
iterator_adaptor();
|
iterator_adaptor();
|
||||||
|
|
||||||
[*Requires:] The `Base` type must be Default Constructible.\n
|
[*Requires:] The `Base` type must be Default Constructible.[br]
|
||||||
[*Returns:] An instance of `iterator_adaptor` with
|
[*Returns:] An instance of `iterator_adaptor` with
|
||||||
`m_iterator` default constructed.
|
`m_iterator` default constructed.
|
||||||
|
|
||||||
|
|
||||||
@ -167,7 +166,7 @@ above are defined as follows:
|
|||||||
|
|
||||||
template <
|
template <
|
||||||
class OtherDerived, class OtherIterator, class V, class C, class R, class D
|
class OtherDerived, class OtherIterator, class V, class C, class R, class D
|
||||||
>
|
>
|
||||||
bool equal(iterator_adaptor<OtherDerived, OtherIterator, V, C, R, D> const& x) const;
|
bool equal(iterator_adaptor<OtherDerived, OtherIterator, V, C, R, D> const& x) const;
|
||||||
|
|
||||||
[*Returns:] `m_iterator == x.base()`
|
[*Returns:] `m_iterator == x.base()`
|
||||||
@ -188,7 +187,7 @@ above are defined as follows:
|
|||||||
|
|
||||||
template <
|
template <
|
||||||
class OtherDerived, class OtherIterator, class V, class C, class R, class D
|
class OtherDerived, class OtherIterator, class V, class C, class R, class D
|
||||||
>
|
>
|
||||||
typename iterator_adaptor::difference_type distance_to(
|
typename iterator_adaptor::difference_type distance_to(
|
||||||
iterator_adaptor<OtherDerived, OtherIterator, V, C, R, D> const& y) const;
|
iterator_adaptor<OtherDerived, OtherIterator, V, C, R, D> const& y) const;
|
||||||
|
|
||||||
@ -206,7 +205,7 @@ we're going to pick up right where it left off.
|
|||||||
.. |fac_tut| replace:: `iterator_facade` tutorial
|
.. |fac_tut| replace:: `iterator_facade` tutorial
|
||||||
.. _fac_tut: iterator_facade.html#tutorial-example
|
.. _fac_tut: iterator_facade.html#tutorial-example
|
||||||
|
|
||||||
[blurb [*`node_base*` really *is* an iterator]\n\n
|
[blurb [*`node_base*` really *is* an iterator][br][br]
|
||||||
It's not really a very interesting iterator, since `node_base`
|
It's not really a very interesting iterator, since `node_base`
|
||||||
is an abstract class: a pointer to a `node_base` just points
|
is an abstract class: a pointer to a `node_base` just points
|
||||||
at some base subobject of an instance of some other class, and
|
at some base subobject of an instance of some other class, and
|
||||||
@ -229,7 +228,7 @@ operations on the underlying pointer, via the `node_iterator`\ 's
|
|||||||
|dereference_and_equal|_). The only real behavioral difference
|
|dereference_and_equal|_). The only real behavioral difference
|
||||||
between `node_base*` and `node_iterator` can be observed when
|
between `node_base*` and `node_iterator` can be observed when
|
||||||
they are incremented: `node_iterator` follows the
|
they are incremented: `node_iterator` follows the
|
||||||
`m_next` pointer, while `node_base*` just applies an address offset.
|
`m_next` pointer, while `node_base*` just applies an address offset.
|
||||||
|
|
||||||
.. |dereference_and_equal| replace:: `dereference` and `equal` member functions
|
.. |dereference_and_equal| replace:: `dereference` and `equal` member functions
|
||||||
.. _dereference_and_equal: iterator_facade.html#implementing-the-core-operations
|
.. _dereference_and_equal: iterator_facade.html#implementing-the-core-operations
|
||||||
@ -287,8 +286,8 @@ this technique is known not to work with Borland C++ 5.6.4 and
|
|||||||
Metrowerks CodeWarrior versions prior to 9.0]
|
Metrowerks CodeWarrior versions prior to 9.0]
|
||||||
|
|
||||||
You can see an example program that exercises this version of the
|
You can see an example program that exercises this version of the
|
||||||
node iterators
|
node iterators
|
||||||
[@../example/node_iterator3.cpp `here`].
|
[example_link node_iterator3.cpp..here].
|
||||||
|
|
||||||
|
|
||||||
In the case of `node_iter`, it's not very compelling to pass
|
In the case of `node_iter`, it's not very compelling to pass
|
||||||
@ -306,7 +305,7 @@ types to its `Base` saves the implementor of
|
|||||||
|
|
||||||
std::iterator_traits<Iterator>::*some-associated-type*
|
std::iterator_traits<Iterator>::*some-associated-type*
|
||||||
|
|
||||||
at least four times.
|
at least four times.
|
||||||
|
|
||||||
We urge you to review the documentation and implementations of
|
We urge you to review the documentation and implementations of
|
||||||
|reverse_iterator|_ and the other Boost `specialized iterator
|
|reverse_iterator|_ and the other Boost `specialized iterator
|
||||||
@ -330,4 +329,4 @@ __ index.html#specialized-adaptors
|
|||||||
|
|
||||||
[endsect]
|
[endsect]
|
||||||
|
|
||||||
[endsect]
|
[endsect]
|
||||||
|
149
doc/quickbook/algorithms.qbk
Normal file
149
doc/quickbook/algorithms.qbk
Normal file
@ -0,0 +1,149 @@
|
|||||||
|
[section:algorithms Algorithms]
|
||||||
|
|
||||||
|
[section:advance Function template `advance()`]
|
||||||
|
|
||||||
|
The `boost::iterators::advance` function template is an adapted version of `std::advance` for the Boost iterator [link iterator.concepts.traversal traversal concepts].
|
||||||
|
|
||||||
|
[heading Header]
|
||||||
|
|
||||||
|
<boost/iterator/advance.hpp>
|
||||||
|
|
||||||
|
[heading Synopsis]
|
||||||
|
|
||||||
|
template <typename Iterator, typename Distance>
|
||||||
|
constexpr void advance(Iterator& it, Distance n);
|
||||||
|
|
||||||
|
|
||||||
|
[heading Description]
|
||||||
|
|
||||||
|
Moves `it` forward by `n` increments (or backward by `|n|` decrements if `n` is negative).
|
||||||
|
|
||||||
|
[heading Requirements]
|
||||||
|
|
||||||
|
`Iterator` should model Incrementable Iterator.
|
||||||
|
|
||||||
|
[heading Preconditions]
|
||||||
|
|
||||||
|
Let `it`[sub `i`] be the iterator obtained by incrementing (or decrementing if `n` is negative) `it` by `i`. All the iterators `it`[sub `i`] for `i` = 0, 1, 2, ..., `|n|` should be valid.
|
||||||
|
|
||||||
|
If `Iterator` does not model [link iterator.concepts.traversal.bidirectional Bidirectional Traversal Iterator], `n` should be non-negative.
|
||||||
|
|
||||||
|
[heading Complexity]
|
||||||
|
|
||||||
|
If `Iterator` models [link iterator.concepts.traversal.random_access Random Access Traversal Iterator], it takes constant time; otherwise it takes linear time.
|
||||||
|
|
||||||
|
[heading Notes]
|
||||||
|
|
||||||
|
* This function is not a customization point and is protected against being found by argument-dependent lookup (ADL).
|
||||||
|
* This function is `constexpr` only in C++14 or later.
|
||||||
|
|
||||||
|
[heading Acknowledgements]
|
||||||
|
|
||||||
|
Contributed by Michel Morin.
|
||||||
|
|
||||||
|
[endsect]
|
||||||
|
|
||||||
|
[section:distance Function template `distance()`]
|
||||||
|
|
||||||
|
The `boost::iterators::distance` function template is an adapted version of `std::distance` for the Boost iterator [link iterator.concepts.traversal traversal concepts].
|
||||||
|
|
||||||
|
[heading Header]
|
||||||
|
|
||||||
|
<boost/iterator/distance.hpp>
|
||||||
|
|
||||||
|
[heading Synopsis]
|
||||||
|
|
||||||
|
template <typename Iterator>
|
||||||
|
constexpr typename iterator_difference<Iterator>::type
|
||||||
|
distance(Iterator first, Iterator last);
|
||||||
|
|
||||||
|
[heading Description]
|
||||||
|
|
||||||
|
Computes the (signed) distance from `first` to `last`.
|
||||||
|
|
||||||
|
[heading Requirements]
|
||||||
|
|
||||||
|
`Iterator` should model [link iterator.concepts.traversal.single_pass Single Pass Iterator].
|
||||||
|
|
||||||
|
[heading Preconditions]
|
||||||
|
|
||||||
|
If `Iterator` models [link iterator.concepts.traversal.random_access Random Access Traversal Iterator], `[first, last)` or `[last, first)` should be valid; otherwise `[first, last)` should be valid.
|
||||||
|
|
||||||
|
[heading Complexity]
|
||||||
|
|
||||||
|
If `Iterator` models [link iterator.concepts.traversal.random_access Random Access Traversal Iterator], it takes constant time; otherwise it takes linear time.
|
||||||
|
|
||||||
|
[heading Notes]
|
||||||
|
|
||||||
|
* This function is not a customization point and is protected against being found by argument-dependent lookup (ADL).
|
||||||
|
* This function is `constexpr` only in C++14 or later.
|
||||||
|
|
||||||
|
[heading Acknowledgements]
|
||||||
|
|
||||||
|
Contributed by Michel Morin.
|
||||||
|
|
||||||
|
[endsect]
|
||||||
|
|
||||||
|
[section:next_prior Function templates `next()` and `prior()`]
|
||||||
|
|
||||||
|
Certain data types, such as the C++ Standard Library's forward and bidirectional iterators, do not provide addition and subtraction via `operator+()` or `operator-()`. This means that non-modifying computation of the next or prior value requires a temporary, even though `operator++()` or `operator--()` is provided. It also means that writing code like `itr+1` inside a template restricts the iterator category to random access iterators.
|
||||||
|
|
||||||
|
The `next()` and `prior()` functions defined in `boost/next_prior.hpp` provide a simple way around these problems.
|
||||||
|
|
||||||
|
[heading Synopsis]
|
||||||
|
|
||||||
|
template <class T>
|
||||||
|
T next(T x)
|
||||||
|
{
|
||||||
|
return ++x;
|
||||||
|
}
|
||||||
|
|
||||||
|
template <class T, class Distance>
|
||||||
|
T next(T x, Distance n)
|
||||||
|
{
|
||||||
|
std::advance(x, n);
|
||||||
|
return x;
|
||||||
|
}
|
||||||
|
|
||||||
|
template <class T>
|
||||||
|
T prior(T x)
|
||||||
|
{
|
||||||
|
return --x;
|
||||||
|
}
|
||||||
|
|
||||||
|
template <class T, class Distance>
|
||||||
|
T prior(T x, Distance n)
|
||||||
|
{
|
||||||
|
std::advance(x, -n);
|
||||||
|
return x;
|
||||||
|
}
|
||||||
|
|
||||||
|
[note Function implementations above are given for exposition only. The actual implementation has the same effect for iterators, but has different properties, as documented later.]
|
||||||
|
|
||||||
|
[heading Usage]
|
||||||
|
|
||||||
|
Usage is simple:
|
||||||
|
|
||||||
|
const std::list<T>::iterator p = get_some_iterator();
|
||||||
|
const std::list<T>::iterator prev = boost::prior(p);
|
||||||
|
const std::list<T>::iterator next = boost::next(prev, 2);
|
||||||
|
|
||||||
|
The distance from the given iterator should be supplied as an absolute value. For example, the iterator four iterators prior to the given iterator `p` may be obtained by `prior(p, 4)`.
|
||||||
|
|
||||||
|
With C++11, the Standard Library provides `std::next()` and `std::prev()` function templates, which serve the same purpose. However, there are advantages to `boost::next()` and `boost::prior()`.
|
||||||
|
|
||||||
|
First, `boost::next()` and `boost::prior()` are compatible not only with iterators but with any type that provides arithmetic operators `operator++()`, `operator--()`, `operator+()`, `operator-()`, `operator+=()` or `operator-=()`. For example, this is possible:
|
||||||
|
|
||||||
|
int x = 10;
|
||||||
|
int y = boost::next(x, 5);
|
||||||
|
assert(y == 15);
|
||||||
|
|
||||||
|
Second, `boost::next()` and `boost::prior()` use [link iterator.concepts.traversal traversal categories] to select the most efficient implementation. For some kinds of iterators, such as [link iterator.specialized.transform transform iterators], the standard iterator category does not reflect the traversal category correctly and therefore `std::next()` and `std::prev()` will fall back to linear complexity.
|
||||||
|
|
||||||
|
[heading Acknowledgements]
|
||||||
|
|
||||||
|
Contributed by [@http://www.boost.org/people/dave_abrahams.htm Dave Abrahams]. Two-argument versions by Daniel Walker.
|
||||||
|
|
||||||
|
[endsect]
|
||||||
|
|
||||||
|
[endsect]
|
@ -1,4 +1,3 @@
|
|||||||
|
|
||||||
[section:archetypes Iterator Archetypes]
|
[section:archetypes Iterator Archetypes]
|
||||||
|
|
||||||
The `iterator_archetype` class constructs a minimal implementation of
|
The `iterator_archetype` class constructs a minimal implementation of
|
||||||
@ -41,23 +40,23 @@ The access category types provided correspond to the following
|
|||||||
standard iterator access concept combinations:
|
standard iterator access concept combinations:
|
||||||
|
|
||||||
readable_iterator_t :=
|
readable_iterator_t :=
|
||||||
|
|
||||||
Readable Iterator
|
Readable Iterator
|
||||||
|
|
||||||
writable_iterator_t :=
|
writable_iterator_t :=
|
||||||
|
|
||||||
Writeable Iterator
|
Writeable Iterator
|
||||||
|
|
||||||
readable_writable_iterator_t :=
|
readable_writable_iterator_t :=
|
||||||
|
|
||||||
Readable Iterator & Writeable Iterator & Swappable Iterator
|
Readable Iterator & Writeable Iterator & Swappable Iterator
|
||||||
|
|
||||||
readable_lvalue_iterator_t :=
|
readable_lvalue_iterator_t :=
|
||||||
|
|
||||||
Readable Iterator & Lvalue Iterator
|
Readable Iterator & Lvalue Iterator
|
||||||
|
|
||||||
writeable_lvalue_iterator_t :=
|
writeable_lvalue_iterator_t :=
|
||||||
|
|
||||||
Readable Iterator & Writeable Iterator & Swappable Iterator & Lvalue Iterator
|
Readable Iterator & Writeable Iterator & Swappable Iterator & Lvalue Iterator
|
||||||
|
|
||||||
[h3 Traits]
|
[h3 Traits]
|
||||||
@ -66,25 +65,25 @@ The nested trait types are defined as follows:
|
|||||||
|
|
||||||
|
|
||||||
if (AccessCategory == readable_iterator_t)
|
if (AccessCategory == readable_iterator_t)
|
||||||
|
|
||||||
value_type = Value
|
value_type = Value
|
||||||
reference = Value
|
reference = Value
|
||||||
pointer = Value*
|
pointer = Value*
|
||||||
|
|
||||||
else if (AccessCategory == writable_iterator_t)
|
else if (AccessCategory == writable_iterator_t)
|
||||||
|
|
||||||
value_type = void
|
value_type = void
|
||||||
reference = void
|
reference = void
|
||||||
pointer = void
|
pointer = void
|
||||||
|
|
||||||
else if (AccessCategory == readable_writable_iterator_t)
|
else if (AccessCategory == readable_writable_iterator_t)
|
||||||
|
|
||||||
value_type = Value
|
value_type = Value
|
||||||
|
|
||||||
reference :=
|
reference :=
|
||||||
|
|
||||||
A type X that is convertible to Value for which the following
|
A type X that is convertible to Value for which the following
|
||||||
expression is valid. Given an object x of type X and v of type
|
expression is valid. Given an object x of type X and v of type
|
||||||
Value.
|
Value.
|
||||||
|
|
||||||
x = v
|
x = v
|
||||||
@ -92,13 +91,13 @@ The nested trait types are defined as follows:
|
|||||||
pointer = Value*
|
pointer = Value*
|
||||||
|
|
||||||
else if (AccessCategory == readable_lvalue_iterator_t)
|
else if (AccessCategory == readable_lvalue_iterator_t)
|
||||||
|
|
||||||
value_type = Value
|
value_type = Value
|
||||||
reference = Value const&
|
reference = Value const&
|
||||||
pointer = Value const*
|
pointer = Value const*
|
||||||
|
|
||||||
else if (AccessCategory == writable_lvalue_iterator_t)
|
else if (AccessCategory == writable_lvalue_iterator_t)
|
||||||
|
|
||||||
value_type = Value
|
value_type = Value
|
||||||
reference = Value&
|
reference = Value&
|
||||||
pointer = Value*
|
pointer = Value*
|
||||||
@ -108,11 +107,11 @@ The nested trait types are defined as follows:
|
|||||||
difference_type := ptrdiff_t
|
difference_type := ptrdiff_t
|
||||||
|
|
||||||
else
|
else
|
||||||
|
|
||||||
difference_type := unspecified type
|
difference_type := unspecified type
|
||||||
|
|
||||||
|
|
||||||
iterator_category :=
|
iterator_category :=
|
||||||
|
|
||||||
A type X satisfying the following two constraints:
|
A type X satisfying the following two constraints:
|
||||||
|
|
||||||
@ -156,5 +155,4 @@ the iterator concept specified by `AccessCategory` and
|
|||||||
arguments. `iterator_archetype` does not model any other access
|
arguments. `iterator_archetype` does not model any other access
|
||||||
concepts or any more derived traversal concepts.
|
concepts or any more derived traversal concepts.
|
||||||
|
|
||||||
|
[endsect]
|
||||||
[endsect]
|
|
||||||
|
@ -4,7 +4,7 @@ The iterator concept checking classes provide a mechanism for a
|
|||||||
template to report better error messages when a user instantiates the
|
template to report better error messages when a user instantiates the
|
||||||
template with a type that does not meet the requirements of the
|
template with a type that does not meet the requirements of the
|
||||||
template. For an introduction to using concept checking classes, see
|
template. For an introduction to using concept checking classes, see
|
||||||
the documentation for the boost::concept_check library.
|
the documentation for the _concept_check_ library.
|
||||||
|
|
||||||
[h2 `iterator_concepts.hpp` Synopsis]
|
[h2 `iterator_concepts.hpp` Synopsis]
|
||||||
|
|
||||||
@ -51,4 +51,4 @@ the documentation for the boost::concept_check library.
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
[endsect]
|
[endsect]
|
||||||
|
@ -1,9 +1,8 @@
|
|||||||
|
|
||||||
[section:concepts Iterator Concepts]
|
[section:concepts Iterator Concepts]
|
||||||
|
|
||||||
[section:concepts_access Access]
|
[section:access Access]
|
||||||
|
|
||||||
[h2 Readable Iterator Concept]
|
[section:readable Readable Iterator Concept]
|
||||||
|
|
||||||
A class or built-in type `X` models the *Readable Iterator* concept
|
A class or built-in type `X` models the *Readable Iterator* concept
|
||||||
for value type `T` if, in addition to `X` being Assignable and
|
for value type `T` if, in addition to `X` being Assignable and
|
||||||
@ -32,17 +31,18 @@ type `T`.
|
|||||||
[`U&`]
|
[`U&`]
|
||||||
[pre: `(*a).m` is well-defined. Equivalent to `(*a).m`.]
|
[pre: `(*a).m` is well-defined. Equivalent to `(*a).m`.]
|
||||||
]
|
]
|
||||||
]
|
]
|
||||||
|
|
||||||
[h2 Writable Iterator Concept ]
|
[endsect]
|
||||||
|
|
||||||
|
[section:writable Writable Iterator Concept]
|
||||||
|
|
||||||
A class or built-in type `X` models the *Writable Iterator* concept
|
A class or built-in type `X` models the *Writable Iterator* concept
|
||||||
if, in addition to `X` being Copy Constructible, the following
|
if, in addition to `X` being Copy Constructible, the following
|
||||||
expressions are valid and respect the stated semantics. Writable
|
expressions are valid and respect the stated semantics. Writable
|
||||||
Iterators have an associated *set of value types*.
|
Iterators have an associated *set of value types*.
|
||||||
|
|
||||||
[table Writable Iterator Requirements (in addition to Copy Constructible)
|
[table Writable Iterator Requirements (in addition to Copy Constructible)
|
||||||
[
|
[
|
||||||
[Expression]
|
[Expression]
|
||||||
[Return Type]
|
[Return Type]
|
||||||
@ -55,13 +55,15 @@ Iterators have an associated *set of value types*.
|
|||||||
]
|
]
|
||||||
]
|
]
|
||||||
|
|
||||||
[h2 Swappable Iterator Concept]
|
[endsect]
|
||||||
|
|
||||||
|
[section:swappable Swappable Iterator Concept]
|
||||||
|
|
||||||
A class or built-in type `X` models the *Swappable Iterator* concept
|
A class or built-in type `X` models the *Swappable Iterator* concept
|
||||||
if, in addition to `X` being Copy Constructible, the following
|
if, in addition to `X` being Copy Constructible, the following
|
||||||
expressions are valid and respect the stated semantics.
|
expressions are valid and respect the stated semantics.
|
||||||
|
|
||||||
[table Swappable Iterator Requirements (in addition to Copy Constructible)
|
[table Swappable Iterator Requirements (in addition to Copy Constructible)
|
||||||
[
|
[
|
||||||
[Expression]
|
[Expression]
|
||||||
[Return Type]
|
[Return Type]
|
||||||
@ -77,7 +79,9 @@ expressions are valid and respect the stated semantics.
|
|||||||
[blurb *Note:* An iterator that is a model of the *Readable* and *Writable Iterator* concepts
|
[blurb *Note:* An iterator that is a model of the *Readable* and *Writable Iterator* concepts
|
||||||
is also a model of *Swappable Iterator*. *--end note*]
|
is also a model of *Swappable Iterator*. *--end note*]
|
||||||
|
|
||||||
[h2 Lvalue Iterator Concept]
|
[endsect]
|
||||||
|
|
||||||
|
[section:lvalue Lvalue Iterator Concept]
|
||||||
|
|
||||||
The *Lvalue Iterator* concept adds the requirement that the return
|
The *Lvalue Iterator* concept adds the requirement that the return
|
||||||
type of `operator*` type be a reference to the value type of the
|
type of `operator*` type be a reference to the value type of the
|
||||||
@ -101,17 +105,17 @@ iterator.
|
|||||||
|
|
||||||
[endsect]
|
[endsect]
|
||||||
|
|
||||||
[section:concepts_traversal Traversal]
|
[endsect]
|
||||||
|
|
||||||
[h2 Incrementable Iterator Concept]
|
[section:traversal Traversal]
|
||||||
|
|
||||||
|
[section:incrementable Incrementable Iterator Concept]
|
||||||
|
|
||||||
A class or built-in type `X` models the *Incrementable Iterator*
|
A class or built-in type `X` models the *Incrementable Iterator*
|
||||||
concept if, in addition to `X` being Assignable and Copy
|
concept if, in addition to `X` being Assignable and Copy
|
||||||
Constructible, the following expressions are valid and respect the
|
Constructible, the following expressions are valid and respect the
|
||||||
stated semantics.
|
stated semantics.
|
||||||
|
|
||||||
|
|
||||||
[table Incrementable Iterator Requirements (in addition to Assignable, Copy Constructible)
|
[table Incrementable Iterator Requirements (in addition to Assignable, Copy Constructible)
|
||||||
[
|
[
|
||||||
[Expression ]
|
[Expression ]
|
||||||
@ -129,7 +133,7 @@ stated semantics.
|
|||||||
[``
|
[``
|
||||||
{
|
{
|
||||||
X tmp = r;
|
X tmp = r;
|
||||||
++r;
|
++r;
|
||||||
return tmp;
|
return tmp;
|
||||||
}
|
}
|
||||||
``]
|
``]
|
||||||
@ -141,7 +145,9 @@ stated semantics.
|
|||||||
]
|
]
|
||||||
]
|
]
|
||||||
|
|
||||||
[h2 Single Pass Iterator Concept]
|
[endsect]
|
||||||
|
|
||||||
|
[section:single_pass Single Pass Iterator Concept]
|
||||||
|
|
||||||
A class or built-in type `X` models the *Single Pass Iterator*
|
A class or built-in type `X` models the *Single Pass Iterator*
|
||||||
concept if the following expressions are valid and respect the stated
|
concept if the following expressions are valid and respect the stated
|
||||||
@ -156,7 +162,7 @@ semantics.
|
|||||||
[
|
[
|
||||||
[`++r`]
|
[`++r`]
|
||||||
[`X&`]
|
[`X&`]
|
||||||
[pre:\n`r` is dereferenceable;\npost:\n`r` is dereferenceable or\n`r` is past-the-end]
|
[pre:[br]`r` is dereferenceable;[br]post:[br]`r` is dereferenceable or[br]`r` is past-the-end]
|
||||||
]
|
]
|
||||||
[
|
[
|
||||||
[`a == b`]
|
[`a == b`]
|
||||||
@ -168,6 +174,11 @@ semantics.
|
|||||||
[convertible to `bool`]
|
[convertible to `bool`]
|
||||||
[`!(a == b)`]
|
[`!(a == b)`]
|
||||||
]
|
]
|
||||||
|
[
|
||||||
|
[`iterator_traits<X>::difference_type`]
|
||||||
|
[A signed integral type representing the distance between iterators]
|
||||||
|
[]
|
||||||
|
]
|
||||||
[
|
[
|
||||||
[`iterator_traversal<X>::type`]
|
[`iterator_traversal<X>::type`]
|
||||||
[Convertible to`single_pass_traversal_tag`]
|
[Convertible to`single_pass_traversal_tag`]
|
||||||
@ -175,8 +186,9 @@ semantics.
|
|||||||
]
|
]
|
||||||
]
|
]
|
||||||
|
|
||||||
|
[endsect]
|
||||||
|
|
||||||
[h2 Forward Traversal Concept]
|
[section:forward Forward Traversal Concept]
|
||||||
|
|
||||||
A class or built-in type `X` models the *Forward Traversal*
|
A class or built-in type `X` models the *Forward Traversal*
|
||||||
concept if, in addition to `X` meeting the requirements of Default
|
concept if, in addition to `X` meeting the requirements of Default
|
||||||
@ -199,11 +211,6 @@ valid and respect the stated semantics.
|
|||||||
[`X&`]
|
[`X&`]
|
||||||
[`r == s` and `r` is dereferenceable implies `++r == ++s.`]
|
[`r == s` and `r` is dereferenceable implies `++r == ++s.`]
|
||||||
]
|
]
|
||||||
[
|
|
||||||
[`iterator_traits<X>::difference_type`]
|
|
||||||
[A signed integral type representing the distance between iterators]
|
|
||||||
[]
|
|
||||||
]
|
|
||||||
[
|
[
|
||||||
[`iterator_traversal<X>::type`]
|
[`iterator_traversal<X>::type`]
|
||||||
[Convertible to `forward_traversal_tag`]
|
[Convertible to `forward_traversal_tag`]
|
||||||
@ -211,7 +218,9 @@ valid and respect the stated semantics.
|
|||||||
]
|
]
|
||||||
]
|
]
|
||||||
|
|
||||||
[h2 Bidirectional Traversal Concept]
|
[endsect]
|
||||||
|
|
||||||
|
[section:bidirectional Bidirectional Traversal Concept]
|
||||||
|
|
||||||
A class or built-in type `X` models the *Bidirectional Traversal*
|
A class or built-in type `X` models the *Bidirectional Traversal*
|
||||||
concept if, in addition to `X` meeting the requirements of Forward
|
concept if, in addition to `X` meeting the requirements of Forward
|
||||||
@ -223,11 +232,11 @@ the stated semantics.
|
|||||||
[Expression]
|
[Expression]
|
||||||
[Return Type]
|
[Return Type]
|
||||||
[Assertion/Semantics/Pre-/Post-condition]
|
[Assertion/Semantics/Pre-/Post-condition]
|
||||||
]
|
]
|
||||||
[
|
[
|
||||||
[`--r`]
|
[`--r`]
|
||||||
[`X&`]
|
[`X&`]
|
||||||
[pre: there exists `s` such that `r == ++s`.\n post: `s` is dereferenceable. `--(++r) == r`. `--r == --s` implies `r == s`. `&r == &--r`.]
|
[pre: there exists `s` such that `r == ++s`.[br] post: `s` is dereferenceable. `--(++r) == r`. `--r == --s` implies `r == s`. `&r == &--r`.]
|
||||||
]
|
]
|
||||||
[
|
[
|
||||||
[`r--`]
|
[`r--`]
|
||||||
@ -247,7 +256,9 @@ the stated semantics.
|
|||||||
]
|
]
|
||||||
]
|
]
|
||||||
|
|
||||||
[h2 Random Access Traversal Concept]
|
[endsect]
|
||||||
|
|
||||||
|
[section:random_access Random Access Traversal Concept]
|
||||||
|
|
||||||
A class or built-in type `X` models the *Random Access Traversal*
|
A class or built-in type `X` models the *Random Access Traversal*
|
||||||
concept if the following expressions are valid and respect the stated
|
concept if the following expressions are valid and respect the stated
|
||||||
@ -255,8 +266,8 @@ semantics. In the table below, `Distance` is
|
|||||||
`iterator_traits<X>::difference_type` and `n` represents a
|
`iterator_traits<X>::difference_type` and `n` represents a
|
||||||
constant object of type `Distance`.
|
constant object of type `Distance`.
|
||||||
|
|
||||||
[table Random Access Traversal Iterator Requirements (in addition to Bidirectional Traversal)
|
[table Random Access Traversal Iterator Requirements (in addition to Bidirectional Traversal)
|
||||||
[
|
[
|
||||||
[Expression]
|
[Expression]
|
||||||
[Return Type]
|
[Return Type]
|
||||||
[Operational Semantics]
|
[Operational Semantics]
|
||||||
@ -266,10 +277,10 @@ constant object of type `Distance`.
|
|||||||
[`r += n`]
|
[`r += n`]
|
||||||
[ `X&`]
|
[ `X&`]
|
||||||
[``
|
[``
|
||||||
{
|
{
|
||||||
Distance m = n;
|
Distance m = n;
|
||||||
if (m >= 0)
|
if (m >= 0)
|
||||||
while (m--)
|
while (m--)
|
||||||
++r;
|
++r;
|
||||||
else
|
else
|
||||||
while (m++)
|
while (m++)
|
||||||
@ -279,18 +290,18 @@ constant object of type `Distance`.
|
|||||||
``]
|
``]
|
||||||
[ ]
|
[ ]
|
||||||
]
|
]
|
||||||
[
|
[
|
||||||
[`a + n`, `n + a`]
|
[`a + n`, `n + a`]
|
||||||
[`X`]
|
[`X`]
|
||||||
[``
|
[``
|
||||||
{
|
{
|
||||||
X tmp = a;
|
X tmp = a;
|
||||||
return tmp+= n;
|
return tmp+= n;
|
||||||
}
|
}
|
||||||
``]
|
``]
|
||||||
[]
|
[]
|
||||||
]
|
]
|
||||||
[
|
[
|
||||||
[`r -= n`]
|
[`r -= n`]
|
||||||
[`X&`]
|
[`X&`]
|
||||||
[`return r += -n`]
|
[`return r += -n`]
|
||||||
@ -300,9 +311,9 @@ constant object of type `Distance`.
|
|||||||
[`a - n`]
|
[`a - n`]
|
||||||
[`X`]
|
[`X`]
|
||||||
[``
|
[``
|
||||||
{
|
{
|
||||||
X tmp = a;
|
X tmp = a;
|
||||||
return tmp-= n;
|
return tmp-= n;
|
||||||
}
|
}
|
||||||
``]
|
``]
|
||||||
[]
|
[]
|
||||||
@ -314,13 +325,13 @@ constant object of type `Distance`.
|
|||||||
[pre: there exists a value `n` of `Distance` such that `a + n == b`. `b == a + (b - a)`.]
|
[pre: there exists a value `n` of `Distance` such that `a + n == b`. `b == a + (b - a)`.]
|
||||||
]
|
]
|
||||||
[
|
[
|
||||||
[`a\[n\]`]
|
[`a[n]`]
|
||||||
[convertible to T]
|
[convertible to T]
|
||||||
[`*(a + n)`]
|
[`*(a + n)`]
|
||||||
[pre: a is a *Readable Iterator*]
|
[pre: a is a *Readable Iterator*]
|
||||||
]
|
]
|
||||||
[
|
[
|
||||||
[`a\[n\] = v`]
|
[`a[n] = v`]
|
||||||
[convertible to T]
|
[convertible to T]
|
||||||
[`*(a + n) = v`]
|
[`*(a + n) = v`]
|
||||||
[pre: a is a *Writable iterator*]
|
[pre: a is a *Writable iterator*]
|
||||||
@ -359,4 +370,6 @@ constant object of type `Distance`.
|
|||||||
|
|
||||||
[endsect]
|
[endsect]
|
||||||
|
|
||||||
[endsect]
|
[endsect]
|
||||||
|
|
||||||
|
[endsect]
|
||||||
|
@ -1,4 +1,3 @@
|
|||||||
|
|
||||||
[section:counting Counting Iterator]
|
[section:counting Counting Iterator]
|
||||||
|
|
||||||
A `counting_iterator` adapts an object by adding an `operator*` that
|
A `counting_iterator` adapts an object by adding an `operator*` that
|
||||||
@ -18,28 +17,30 @@ into the first array via indirection through the second array.
|
|||||||
std::vector<int> numbers;
|
std::vector<int> numbers;
|
||||||
typedef std::vector<int>::iterator n_iter;
|
typedef std::vector<int>::iterator n_iter;
|
||||||
std::copy(boost::counting_iterator<int>(0),
|
std::copy(boost::counting_iterator<int>(0),
|
||||||
boost::counting_iterator<int>(N),
|
boost::counting_iterator<int>(N),
|
||||||
std::back_inserter(numbers));
|
std::back_inserter(numbers));
|
||||||
|
|
||||||
std::vector<std::vector<int>::iterator> pointers;
|
std::vector<std::vector<int>::iterator> pointers;
|
||||||
std::copy(boost::make_counting_iterator(numbers.begin()),
|
std::copy(boost::make_counting_iterator(numbers.begin()),
|
||||||
boost::make_counting_iterator(numbers.end()),
|
boost::make_counting_iterator(numbers.end()),
|
||||||
std::back_inserter(pointers));
|
std::back_inserter(pointers));
|
||||||
|
|
||||||
std::cout << "indirectly printing out the numbers from 0 to "
|
std::cout << "indirectly printing out the numbers from 0 to "
|
||||||
<< N << std::endl;
|
<< N << std::endl;
|
||||||
std::copy(boost::make_indirect_iterator(pointers.begin()),
|
std::copy(boost::make_indirect_iterator(pointers.begin()),
|
||||||
boost::make_indirect_iterator(pointers.end()),
|
boost::make_indirect_iterator(pointers.end()),
|
||||||
std::ostream_iterator<int>(std::cout, " "));
|
std::ostream_iterator<int>(std::cout, " "));
|
||||||
std::cout << std::endl;
|
std::cout << std::endl;
|
||||||
|
|
||||||
|
|
||||||
The output is:
|
The output is:
|
||||||
|
|
||||||
indirectly printing out the numbers from 0 to 7
|
[pre
|
||||||
0 1 2 3 4 5 6
|
indirectly printing out the numbers from 0 to 7
|
||||||
|
0 1 2 3 4 5 6
|
||||||
|
]
|
||||||
|
|
||||||
The source code for this example can be found [@../example/counting_iterator_example.cpp here].
|
The source code for this example can be found [example_link counting_iterator_example.cpp..here].
|
||||||
|
|
||||||
[h2 Reference]
|
[h2 Reference]
|
||||||
|
|
||||||
@ -86,9 +87,9 @@ algorithm:
|
|||||||
random_access_traversal_tag, Incrementable, const Incrementable&)
|
random_access_traversal_tag, Incrementable, const Incrementable&)
|
||||||
else
|
else
|
||||||
return |iterator-category|_\ (
|
return |iterator-category|_\ (
|
||||||
iterator_traversal<Incrementable>::type,
|
iterator_traversal<Incrementable>::type,
|
||||||
Incrementable, const Incrementable&)
|
Incrementable, const Incrementable&)
|
||||||
|
|
||||||
[blurb *Note:* implementers are encouraged to provide an implementation of
|
[blurb *Note:* implementers are encouraged to provide an implementation of
|
||||||
`operator-` and a `difference_type` that avoids overflows in
|
`operator-` and a `difference_type` that avoids overflows in
|
||||||
the cases where `std::numeric_limits<Incrementable>::is_specialized`
|
the cases where `std::numeric_limits<Incrementable>::is_specialized`
|
||||||
@ -152,7 +153,7 @@ operations.
|
|||||||
|
|
||||||
counting_iterator();
|
counting_iterator();
|
||||||
|
|
||||||
[*Requires: ] `Incrementable` is Default Constructible.\n
|
[*Requires: ] `Incrementable` is Default Constructible.[br]
|
||||||
[*Effects: ] Default construct the member `m_inc`.
|
[*Effects: ] Default construct the member `m_inc`.
|
||||||
|
|
||||||
|
|
||||||
@ -174,14 +175,14 @@ operations.
|
|||||||
|
|
||||||
counting_iterator& operator++();
|
counting_iterator& operator++();
|
||||||
|
|
||||||
[*Effects: ] `++m_inc`\n
|
[*Effects: ] `++m_inc`[br]
|
||||||
[*Returns: ] `*this`
|
[*Returns: ] `*this`
|
||||||
|
|
||||||
|
|
||||||
counting_iterator& operator--();
|
counting_iterator& operator--();
|
||||||
|
|
||||||
[*Effects: ] `--m_inc`\n
|
[*Effects: ] `--m_inc`[br]
|
||||||
[*Returns: ] `*this`
|
[*Returns: ] `*this`
|
||||||
|
|
||||||
|
|
||||||
Incrementable const& base() const;
|
Incrementable const& base() const;
|
||||||
@ -189,4 +190,4 @@ operations.
|
|||||||
[*Returns: ] `m_inc`
|
[*Returns: ] `m_inc`
|
||||||
|
|
||||||
|
|
||||||
[endsect]
|
[endsect]
|
||||||
|
@ -1,4 +1,3 @@
|
|||||||
|
|
||||||
[section:facade Iterator Facade]
|
[section:facade Iterator Facade]
|
||||||
|
|
||||||
While the iterator interface is rich, there is a core subset of the
|
While the iterator interface is rich, there is a core subset of the
|
||||||
@ -68,6 +67,7 @@ requirements.
|
|||||||
[
|
[
|
||||||
[`i.dereference()`]
|
[`i.dereference()`]
|
||||||
[Access the value referred to]
|
[Access the value referred to]
|
||||||
|
]
|
||||||
[
|
[
|
||||||
[`i.equal(j)`]
|
[`i.equal(j)`]
|
||||||
[Compare for equality with `j`]
|
[Compare for equality with `j`]
|
||||||
@ -83,6 +83,7 @@ requirements.
|
|||||||
[
|
[
|
||||||
[`i.advance(n)`]
|
[`i.advance(n)`]
|
||||||
[Advance by `n` positions]
|
[Advance by `n` positions]
|
||||||
|
]
|
||||||
[
|
[
|
||||||
[`i.distance_to(j)`]
|
[`i.distance_to(j)`]
|
||||||
[Measure the distance to `j`]
|
[Measure the distance to `j`]
|
||||||
@ -139,7 +140,7 @@ standardize the gateway protocol. Note that even if
|
|||||||
open a safety loophole, as every core member function preserves the
|
open a safety loophole, as every core member function preserves the
|
||||||
invariants of the iterator.
|
invariants of the iterator.
|
||||||
|
|
||||||
[h2 `operator\[\]`]
|
[h2 `operator[]`]
|
||||||
|
|
||||||
The indexing operator for a generalized iterator presents special
|
The indexing operator for a generalized iterator presents special
|
||||||
challenges. A random access iterator's `operator[]` is only
|
challenges. A random access iterator's `operator[]` is only
|
||||||
@ -165,9 +166,9 @@ the implementation of her iterator is free to implement an
|
|||||||
class; it will hide the one supplied by `iterator_facade` from
|
class; it will hide the one supplied by `iterator_facade` from
|
||||||
clients of her iterator.
|
clients of her iterator.
|
||||||
|
|
||||||
.. _n1550: http://anubis.dkuug.dk/JTC1/SC22/WG21/docs/papers/2003/n1550.html
|
.. _n1550: http://www.open-std.org/JTC1/SC22/WG21/docs/papers/2003/n1550.htm
|
||||||
|
|
||||||
.. _`issue 299`: http://anubis.dkuug.dk/jtc1/sc22/wg21/docs/lwg-active.html#299
|
.. _`issue 299`: http://www.open-std.org/jtc1/sc22/wg21/docs/lwg-active.html#299
|
||||||
|
|
||||||
.. _`operator arrow`:
|
.. _`operator arrow`:
|
||||||
|
|
||||||
@ -287,7 +288,7 @@ The `iterator_category` member of `iterator_facade` is
|
|||||||
|
|
||||||
.. parsed-literal::
|
.. parsed-literal::
|
||||||
|
|
||||||
*iterator-category*\ (CategoryOrTraversal, value_type, reference)
|
*iterator-category*\ (CategoryOrTraversal, reference, value_type)
|
||||||
|
|
||||||
where *iterator-category* is defined as follows:
|
where *iterator-category* is defined as follows:
|
||||||
|
|
||||||
@ -295,10 +296,10 @@ where *iterator-category* is defined as follows:
|
|||||||
|
|
||||||
The `enable_if_interoperable` template used above is for exposition
|
The `enable_if_interoperable` template used above is for exposition
|
||||||
purposes. The member operators should only be in an overload set
|
purposes. The member operators should only be in an overload set
|
||||||
provided the derived types `Dr1` and `Dr2` are interoperable,
|
provided the derived types `Dr1` and `Dr2` are interoperable,
|
||||||
meaning that at least one of the types is convertible to the other. The
|
meaning that at least one of the types is convertible to the other. The
|
||||||
`enable_if_interoperable` approach uses SFINAE to take the operators
|
`enable_if_interoperable` approach uses SFINAE to take the operators
|
||||||
out of the overload set when the types are not interoperable.
|
out of the overload set when the types are not interoperable.
|
||||||
The operators should behave *as-if* `enable_if_interoperable`
|
The operators should behave *as-if* `enable_if_interoperable`
|
||||||
were defined to be:
|
were defined to be:
|
||||||
|
|
||||||
@ -398,7 +399,7 @@ through member functions of class `iterator_core_access`.
|
|||||||
__ `operator arrow`_
|
__ `operator arrow`_
|
||||||
|
|
||||||
[*Returns:] If `reference` is a reference type, an object of type `pointer` equal to: `&static_cast<Derived const*>(this)->dereference()`
|
[*Returns:] If `reference` is a reference type, an object of type `pointer` equal to: `&static_cast<Derived const*>(this)->dereference()`
|
||||||
Otherwise returns an object of unspecified type such that,
|
Otherwise returns an object of unspecified type such that,
|
||||||
`(*static_cast<Derived const*>(this))->m` is equivalent to `(w = **static_cast<Derived const*>(this),
|
`(*static_cast<Derived const*>(this))->m` is equivalent to `(w = **static_cast<Derived const*>(this),
|
||||||
w.m)` for some temporary object `w` of type `value_type`.
|
w.m)` for some temporary object `w` of type `value_type`.
|
||||||
|
|
||||||
@ -415,7 +416,7 @@ w.m)` for some temporary object `w` of type `value_type`.
|
|||||||
|
|
||||||
Derived& operator++();
|
Derived& operator++();
|
||||||
|
|
||||||
[*Effects:]
|
[*Effects:]
|
||||||
|
|
||||||
static_cast<Derived*>(this)->increment();
|
static_cast<Derived*>(this)->increment();
|
||||||
return *static_cast<Derived*>(this);
|
return *static_cast<Derived*>(this);
|
||||||
@ -455,7 +456,7 @@ w.m)` for some temporary object `w` of type `value_type`.
|
|||||||
Derived& operator-=(difference_type n);
|
Derived& operator-=(difference_type n);
|
||||||
|
|
||||||
[*Effects:]
|
[*Effects:]
|
||||||
|
|
||||||
static_cast<Derived*>(this)->advance(-n);
|
static_cast<Derived*>(this)->advance(-n);
|
||||||
return *static_cast<Derived*>(this);
|
return *static_cast<Derived*>(this);
|
||||||
|
|
||||||
@ -487,14 +488,16 @@ w.m)` for some temporary object `w` of type `value_type`.
|
|||||||
iterator_facade<Dr2,V2,TC2,R2,D2> const& rhs);
|
iterator_facade<Dr2,V2,TC2,R2,D2> const& rhs);
|
||||||
|
|
||||||
[*Returns:]
|
[*Returns:]
|
||||||
|
|
||||||
|
[pre
|
||||||
if `is_convertible<Dr2,Dr1>::value`
|
if `is_convertible<Dr2,Dr1>::value`
|
||||||
|
|
||||||
then
|
then
|
||||||
`((Dr1 const&)lhs).equal((Dr2 const&)rhs)`.
|
`((Dr1 const&)lhs).equal((Dr2 const&)rhs)`.
|
||||||
|
|
||||||
Otherwise,
|
Otherwise,
|
||||||
`((Dr2 const&)rhs).equal((Dr1 const&)lhs)`.
|
`((Dr2 const&)rhs).equal((Dr1 const&)lhs)`.
|
||||||
|
]
|
||||||
|
|
||||||
|
|
||||||
template <class Dr1, class V1, class TC1, class R1, class D1,
|
template <class Dr1, class V1, class TC1, class R1, class D1,
|
||||||
@ -504,14 +507,16 @@ w.m)` for some temporary object `w` of type `value_type`.
|
|||||||
iterator_facade<Dr2,V2,TC2,R2,D2> const& rhs);
|
iterator_facade<Dr2,V2,TC2,R2,D2> const& rhs);
|
||||||
|
|
||||||
[*Returns:]
|
[*Returns:]
|
||||||
|
|
||||||
|
[pre
|
||||||
if `is_convertible<Dr2,Dr1>::value`
|
if `is_convertible<Dr2,Dr1>::value`
|
||||||
|
|
||||||
then
|
then
|
||||||
`!((Dr1 const&)lhs).equal((Dr2 const&)rhs)`.
|
`!((Dr1 const&)lhs).equal((Dr2 const&)rhs)`.
|
||||||
|
|
||||||
Otherwise,
|
Otherwise,
|
||||||
`!((Dr2 const&)rhs).equal((Dr1 const&)lhs)`.
|
`!((Dr2 const&)rhs).equal((Dr1 const&)lhs)`.
|
||||||
|
]
|
||||||
|
|
||||||
|
|
||||||
template <class Dr1, class V1, class TC1, class R1, class D1,
|
template <class Dr1, class V1, class TC1, class R1, class D1,
|
||||||
@ -521,14 +526,16 @@ w.m)` for some temporary object `w` of type `value_type`.
|
|||||||
iterator_facade<Dr2,V2,TC2,R2,D2> const& rhs);
|
iterator_facade<Dr2,V2,TC2,R2,D2> const& rhs);
|
||||||
|
|
||||||
[*Returns:]
|
[*Returns:]
|
||||||
|
|
||||||
|
[pre
|
||||||
if `is_convertible<Dr2,Dr1>::value`
|
if `is_convertible<Dr2,Dr1>::value`
|
||||||
|
|
||||||
then
|
then
|
||||||
`((Dr1 const&)lhs).distance_to((Dr2 const&)rhs) < 0`.
|
`((Dr1 const&)lhs).distance_to((Dr2 const&)rhs) < 0`.
|
||||||
|
|
||||||
Otherwise,
|
Otherwise,
|
||||||
`((Dr2 const&)rhs).distance_to((Dr1 const&)lhs) > 0`.
|
`((Dr2 const&)rhs).distance_to((Dr1 const&)lhs) > 0`.
|
||||||
|
]
|
||||||
|
|
||||||
|
|
||||||
template <class Dr1, class V1, class TC1, class R1, class D1,
|
template <class Dr1, class V1, class TC1, class R1, class D1,
|
||||||
@ -538,14 +545,16 @@ w.m)` for some temporary object `w` of type `value_type`.
|
|||||||
iterator_facade<Dr2,V2,TC2,R2,D2> const& rhs);
|
iterator_facade<Dr2,V2,TC2,R2,D2> const& rhs);
|
||||||
|
|
||||||
[*Returns:]
|
[*Returns:]
|
||||||
|
|
||||||
|
[pre
|
||||||
if `is_convertible<Dr2,Dr1>::value`
|
if `is_convertible<Dr2,Dr1>::value`
|
||||||
|
|
||||||
then
|
then
|
||||||
`((Dr1 const&)lhs).distance_to((Dr2 const&)rhs) <= 0`.
|
`((Dr1 const&)lhs).distance_to((Dr2 const&)rhs) <= 0`.
|
||||||
|
|
||||||
Otherwise,
|
Otherwise,
|
||||||
`((Dr2 const&)rhs).distance_to((Dr1 const&)lhs) >= 0`.
|
`((Dr2 const&)rhs).distance_to((Dr1 const&)lhs) >= 0`.
|
||||||
|
]
|
||||||
|
|
||||||
|
|
||||||
template <class Dr1, class V1, class TC1, class R1, class D1,
|
template <class Dr1, class V1, class TC1, class R1, class D1,
|
||||||
@ -555,14 +564,16 @@ w.m)` for some temporary object `w` of type `value_type`.
|
|||||||
iterator_facade<Dr2,V2,TC2,R2,D2> const& rhs);
|
iterator_facade<Dr2,V2,TC2,R2,D2> const& rhs);
|
||||||
|
|
||||||
[*Returns:]
|
[*Returns:]
|
||||||
|
|
||||||
|
[pre
|
||||||
if `is_convertible<Dr2,Dr1>::value`
|
if `is_convertible<Dr2,Dr1>::value`
|
||||||
|
|
||||||
then
|
then
|
||||||
`((Dr1 const&)lhs).distance_to((Dr2 const&)rhs) > 0`.
|
`((Dr1 const&)lhs).distance_to((Dr2 const&)rhs) > 0`.
|
||||||
|
|
||||||
Otherwise,
|
Otherwise,
|
||||||
`((Dr2 const&)rhs).distance_to((Dr1 const&)lhs) < 0`.
|
`((Dr2 const&)rhs).distance_to((Dr1 const&)lhs) < 0`.
|
||||||
|
]
|
||||||
|
|
||||||
|
|
||||||
template <class Dr1, class V1, class TC1, class R1, class D1,
|
template <class Dr1, class V1, class TC1, class R1, class D1,
|
||||||
@ -572,14 +583,16 @@ w.m)` for some temporary object `w` of type `value_type`.
|
|||||||
iterator_facade<Dr2,V2,TC2,R2,D2> const& rhs);
|
iterator_facade<Dr2,V2,TC2,R2,D2> const& rhs);
|
||||||
|
|
||||||
[*Returns:]
|
[*Returns:]
|
||||||
|
|
||||||
|
[pre
|
||||||
if `is_convertible<Dr2,Dr1>::value`
|
if `is_convertible<Dr2,Dr1>::value`
|
||||||
|
|
||||||
then
|
then
|
||||||
`((Dr1 const&)lhs).distance_to((Dr2 const&)rhs) >= 0`.
|
`((Dr1 const&)lhs).distance_to((Dr2 const&)rhs) >= 0`.
|
||||||
|
|
||||||
Otherwise,
|
Otherwise,
|
||||||
`((Dr2 const&)rhs).distance_to((Dr1 const&)lhs) <= 0`.
|
`((Dr2 const&)rhs).distance_to((Dr1 const&)lhs) <= 0`.
|
||||||
|
]
|
||||||
|
|
||||||
.. _minus:
|
.. _minus:
|
||||||
|
|
||||||
@ -591,29 +604,33 @@ w.m)` for some temporary object `w` of type `value_type`.
|
|||||||
iterator_facade<Dr2,V2,TC2,R2,D2> const& rhs);
|
iterator_facade<Dr2,V2,TC2,R2,D2> const& rhs);
|
||||||
|
|
||||||
[*Return Type:]
|
[*Return Type:]
|
||||||
|
|
||||||
|
[pre
|
||||||
if `is_convertible<Dr2,Dr1>::value`
|
if `is_convertible<Dr2,Dr1>::value`
|
||||||
|
|
||||||
then
|
then
|
||||||
`difference` shall be
|
`difference` shall be
|
||||||
`iterator_traits<Dr1>::difference_type`.
|
`iterator_traits<Dr1>::difference_type`.
|
||||||
|
|
||||||
Otherwise
|
Otherwise
|
||||||
`difference` shall be `iterator_traits<Dr2>::difference_type`
|
`difference` shall be `iterator_traits<Dr2>::difference_type`
|
||||||
|
]
|
||||||
|
|
||||||
[*Returns:]
|
[*Returns:]
|
||||||
|
|
||||||
|
[pre
|
||||||
if `is_convertible<Dr2,Dr1>::value`
|
if `is_convertible<Dr2,Dr1>::value`
|
||||||
|
|
||||||
then
|
then
|
||||||
`-((Dr1 const&)lhs).distance_to((Dr2 const&)rhs)`.
|
`-((Dr1 const&)lhs).distance_to((Dr2 const&)rhs)`.
|
||||||
|
|
||||||
Otherwise,
|
Otherwise,
|
||||||
`((Dr2 const&)rhs).distance_to((Dr1 const&)lhs)`.
|
`((Dr2 const&)rhs).distance_to((Dr1 const&)lhs)`.
|
||||||
|
]
|
||||||
|
|
||||||
|
|
||||||
[endsect]
|
[endsect]
|
||||||
|
|
||||||
[include facade_tutorial.qbk]
|
[include facade_tutorial.qbk]
|
||||||
|
|
||||||
[endsect]
|
[endsect]
|
||||||
|
@ -1,13 +1,12 @@
|
|||||||
|
|
||||||
[section:facade_tutorial Tutorial]
|
[section:facade_tutorial Tutorial]
|
||||||
|
|
||||||
In this section we'll walk through the implementation of a few
|
In this section we'll walk through the implementation of a few
|
||||||
iterators using `iterator_facade`, based around the simple
|
iterators using `iterator_facade`, based around the simple
|
||||||
example of a linked list of polymorphic objects. This example was
|
example of a linked list of polymorphic objects. This example was
|
||||||
inspired by a
|
inspired by a
|
||||||
[@http://thread.gmane.org/gmane.comp.lib.boost.user/5100 `posting`]
|
[@http://thread.gmane.org/gmane.comp.lib.boost.user/5100 `posting`]
|
||||||
by Keith Macdonald on the
|
by Keith Macdonald on the
|
||||||
[@../../../more/mailing_lists.htm#users `Boost-Users`]
|
[@http://www.boost.org/more/mailing_lists.htm#users `Boost-Users`]
|
||||||
mailing list.
|
mailing list.
|
||||||
|
|
||||||
|
|
||||||
@ -30,16 +29,16 @@ Say we've written a polymorphic linked list node base class:
|
|||||||
|
|
||||||
// print to the stream
|
// print to the stream
|
||||||
virtual void print(std::ostream& s) const = 0;
|
virtual void print(std::ostream& s) const = 0;
|
||||||
|
|
||||||
// double the value
|
// double the value
|
||||||
virtual void double_me() = 0;
|
virtual void double_me() = 0;
|
||||||
|
|
||||||
void append(node_base* p)
|
void append(node_base* p)
|
||||||
{
|
{
|
||||||
if (m_next)
|
if (m_next)
|
||||||
m_next->append(p);
|
m_next->append(p);
|
||||||
else
|
else
|
||||||
m_next = p;
|
m_next = p;
|
||||||
}
|
}
|
||||||
|
|
||||||
private:
|
private:
|
||||||
@ -210,7 +209,7 @@ the concepts we want our iterator to model. Referring to the
|
|||||||
table__, we can see that the first three rows are applicable
|
table__, we can see that the first three rows are applicable
|
||||||
because `node_iterator` needs to satisfy the requirements for
|
because `node_iterator` needs to satisfy the requirements for
|
||||||
`readable iterator`_, `single pass iterator`_, and `incrementable
|
`readable iterator`_, `single pass iterator`_, and `incrementable
|
||||||
iterator`_.
|
iterator`_.
|
||||||
|
|
||||||
__ `core operations`_
|
__ `core operations`_
|
||||||
|
|
||||||
@ -254,24 +253,24 @@ make them private and grant friendship to
|
|||||||
};
|
};
|
||||||
|
|
||||||
Voila; a complete and conforming readable, forward-traversal
|
Voila; a complete and conforming readable, forward-traversal
|
||||||
iterator! For a working example of its use, see
|
iterator! For a working example of its use, see
|
||||||
[@../example/node_iterator1.cpp `this program`].
|
[example_link node_iterator1.cpp..this program].
|
||||||
|
|
||||||
__ ../example/node_iterator1.cpp
|
__ ../../example/node_iterator1.cpp
|
||||||
|
|
||||||
[h2 A constant `node_iterator`]
|
[h2 A constant `node_iterator`]
|
||||||
|
|
||||||
[blurb *Constant and Mutable iterators*\n\n
|
[blurb *Constant and Mutable iterators*[br][br]
|
||||||
The term **mutable iterator** means an iterator through which
|
The term **mutable iterator** means an iterator through which
|
||||||
the object it references (its "referent") can be modified. A
|
the object it references (its "referent") can be modified. A
|
||||||
**constant iterator** is one which doesn't allow modification of
|
**constant iterator** is one which doesn't allow modification of
|
||||||
its referent.\n\n
|
its referent.[br][br]
|
||||||
The words *constant* and *mutable* don't refer to the ability to
|
The words *constant* and *mutable* don't refer to the ability to
|
||||||
modify the iterator itself. For example, an `int const*` is a
|
modify the iterator itself. For example, an `int const*` is a
|
||||||
non-\ `const` *constant iterator*, which can be incremented
|
non-\ `const` *constant iterator*, which can be incremented
|
||||||
but doesn't allow modification of its referent, and `int*
|
but doesn't allow modification of its referent, and `int*
|
||||||
const` is a `const` *mutable iterator*, which cannot be
|
const` is a `const` *mutable iterator*, which cannot be
|
||||||
modified but which allows modification of its referent.\n\n
|
modified but which allows modification of its referent.[br][br]
|
||||||
Confusing? We agree, but those are the standard terms. It
|
Confusing? We agree, but those are the standard terms. It
|
||||||
probably doesn't help much that a container's constant iterator
|
probably doesn't help much that a container's constant iterator
|
||||||
is called `const_iterator`.
|
is called `const_iterator`.
|
||||||
@ -285,7 +284,7 @@ changes:
|
|||||||
|
|
||||||
class const_node_iterator
|
class const_node_iterator
|
||||||
: public boost::iterator_facade<
|
: public boost::iterator_facade<
|
||||||
node_iterator
|
const_node_iterator
|
||||||
, node_base **const**
|
, node_base **const**
|
||||||
, boost::forward_traversal_tag
|
, boost::forward_traversal_tag
|
||||||
>
|
>
|
||||||
@ -312,7 +311,7 @@ changes:
|
|||||||
node_base **const**\ * m_node;
|
node_base **const**\ * m_node;
|
||||||
};
|
};
|
||||||
|
|
||||||
[blurb `const` and an iterator's `value_type`\n\n
|
[blurb `const` and an iterator's `value_type`[br][br]
|
||||||
The C++ standard requires an iterator's `value_type` *not* be
|
The C++ standard requires an iterator's `value_type` *not* be
|
||||||
`const`\ -qualified, so `iterator_facade` strips the
|
`const`\ -qualified, so `iterator_facade` strips the
|
||||||
`const` from its `Value` parameter in order to produce the
|
`const` from its `Value` parameter in order to produce the
|
||||||
@ -402,7 +401,7 @@ adding a templatized converting constructor [#broken]_ [#random]_:
|
|||||||
|
|
||||||
template <class OtherValue>
|
template <class OtherValue>
|
||||||
bool equal(node_iter<OtherValue> const& other) const
|
bool equal(node_iter<OtherValue> const& other) const
|
||||||
{
|
{
|
||||||
return this->m_node == other.m_node;
|
return this->m_node == other.m_node;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -428,11 +427,11 @@ adding a templatized converting constructor [#broken]_ [#random]_:
|
|||||||
`distance_to` function as well.
|
`distance_to` function as well.
|
||||||
|
|
||||||
|
|
||||||
__ ../example/node_iterator2.hpp
|
__ ../../example/node_iterator2.hpp
|
||||||
|
|
||||||
You can see an example program which exercises our interoperable
|
You can see an example program which exercises our interoperable
|
||||||
iterators
|
iterators
|
||||||
[@../example/node_iterator2.cpp `here`].
|
[example_link node_iterator2.cpp..here].
|
||||||
|
|
||||||
|
|
||||||
[h2 Telling the Truth]
|
[h2 Telling the Truth]
|
||||||
@ -467,7 +466,7 @@ appropriate:
|
|||||||
|
|
||||||
...
|
...
|
||||||
|
|
||||||
private:
|
private:
|
||||||
struct enabler {};
|
struct enabler {};
|
||||||
|
|
||||||
public:
|
public:
|
||||||
|
@ -1,4 +1,3 @@
|
|||||||
|
|
||||||
[section:filter Filter Iterator]
|
[section:filter Filter Iterator]
|
||||||
|
|
||||||
The filter iterator adaptor creates a view of an iterator range in
|
The filter iterator adaptor creates a view of an iterator range in
|
||||||
@ -19,7 +18,6 @@ This example uses `filter_iterator` and then
|
|||||||
array of integers. Then `make_filter_iterator` is is used to output
|
array of integers. Then `make_filter_iterator` is is used to output
|
||||||
the integers greater than `-2`.
|
the integers greater than `-2`.
|
||||||
|
|
||||||
|
|
||||||
struct is_positive_number {
|
struct is_positive_number {
|
||||||
bool operator()(int x) { return 0 < x; }
|
bool operator()(int x) { return 0 < x; }
|
||||||
};
|
};
|
||||||
@ -33,7 +31,7 @@ the integers greater than `-2`.
|
|||||||
base_iterator numbers(numbers_);
|
base_iterator numbers(numbers_);
|
||||||
|
|
||||||
// Example using filter_iterator
|
// Example using filter_iterator
|
||||||
typedef boost::filter_iterator<is_positive_number, base_iterator>
|
typedef boost::filter_iterator<is_positive_number, base_iterator>
|
||||||
FilterIter;
|
FilterIter;
|
||||||
|
|
||||||
is_positive_number predicate;
|
is_positive_number predicate;
|
||||||
@ -52,11 +50,11 @@ the integers greater than `-2`.
|
|||||||
// Another example using make_filter_iterator()
|
// Another example using make_filter_iterator()
|
||||||
std::copy(
|
std::copy(
|
||||||
boost::make_filter_iterator(
|
boost::make_filter_iterator(
|
||||||
std::bind2nd(std::greater<int>(), -2)
|
std::bind(std::greater<int>(), std::placeholders::_1, -2)
|
||||||
, numbers, numbers + N)
|
, numbers, numbers + N)
|
||||||
|
|
||||||
, boost::make_filter_iterator(
|
, boost::make_filter_iterator(
|
||||||
std::bind2nd(std::greater<int>(), -2)
|
std::bind(std::greater<int>(), std::placeholders::_1, -2)
|
||||||
, numbers + N, numbers + N)
|
, numbers + N, numbers + N)
|
||||||
|
|
||||||
, std::ostream_iterator<int>(std::cout, " ")
|
, std::ostream_iterator<int>(std::cout, " ")
|
||||||
@ -70,12 +68,13 @@ the integers greater than `-2`.
|
|||||||
|
|
||||||
The output is:
|
The output is:
|
||||||
|
|
||||||
4 5 8
|
[pre
|
||||||
4 5 8
|
4 5 8
|
||||||
0 -1 4 5 8
|
4 5 8
|
||||||
|
0 -1 4 5 8
|
||||||
|
]
|
||||||
|
|
||||||
|
The source code for this example can be found [example_link filter_iterator_example.cpp..here].
|
||||||
The source code for this example can be found [@../example/filter_iterator_example.cpp here].
|
|
||||||
|
|
||||||
[h2 Reference]
|
[h2 Reference]
|
||||||
|
|
||||||
@ -114,10 +113,10 @@ The source code for this example can be found [@../example/filter_iterator_examp
|
|||||||
|
|
||||||
If `Iterator` models Readable Lvalue Iterator and Bidirectional Traversal
|
If `Iterator` models Readable Lvalue Iterator and Bidirectional Traversal
|
||||||
Iterator then `iterator_category` is convertible to
|
Iterator then `iterator_category` is convertible to
|
||||||
`std::bidirectional_iterator_tag`.
|
`std::bidirectional_iterator_tag`.
|
||||||
Otherwise, if `Iterator` models Readable Lvalue Iterator and Forward Traversal
|
Otherwise, if `Iterator` models Readable Lvalue Iterator and Forward Traversal
|
||||||
Iterator then `iterator_category` is convertible to
|
Iterator then `iterator_category` is convertible to
|
||||||
`std::forward_iterator_tag`.
|
`std::forward_iterator_tag`.
|
||||||
Otherwise `iterator_category` is
|
Otherwise `iterator_category` is
|
||||||
convertible to `std::input_iterator_tag`.
|
convertible to `std::input_iterator_tag`.
|
||||||
|
|
||||||
@ -164,7 +163,7 @@ following tables.
|
|||||||
[[Writable Lvalue Iterator, Bidirectional Iterator ][Mutable Bidirectional Iterator]]
|
[[Writable Lvalue Iterator, Bidirectional Iterator ][Mutable Bidirectional Iterator]]
|
||||||
]
|
]
|
||||||
|
|
||||||
`filter_iterator<P1, X>` is interoperable with `filter_iterator<P2, Y>`
|
`filter_iterator<P1, X>` is interoperable with `filter_iterator<P2, Y>`
|
||||||
if and only if `X` is interoperable with `Y`.
|
if and only if `X` is interoperable with `Y`.
|
||||||
|
|
||||||
|
|
||||||
@ -178,15 +177,15 @@ operations.
|
|||||||
|
|
||||||
filter_iterator();
|
filter_iterator();
|
||||||
|
|
||||||
[*Requires: ]`Predicate` and `Iterator` must be Default Constructible.\n
|
[*Requires: ]`Predicate` and `Iterator` must be Default Constructible.[br]
|
||||||
[*Effects: ] Constructs a `filter_iterator` whose`m_pred`, `m_iter`, and `m_end`
|
[*Effects: ] Constructs a `filter_iterator` whose`m_pred`, `m_iter`, and `m_end`
|
||||||
members are a default constructed.
|
members are a default constructed.
|
||||||
|
|
||||||
|
|
||||||
filter_iterator(Predicate f, Iterator x, Iterator end = Iterator());
|
filter_iterator(Predicate f, Iterator x, Iterator end = Iterator());
|
||||||
|
|
||||||
[*Effects: ] Constructs a `filter_iterator` where `m_iter` is either
|
[*Effects: ] Constructs a `filter_iterator` where `m_iter` is either
|
||||||
the first position in the range `[x,end)` such that `f(*m_iter) == true`
|
the first position in the range `[x,end)` such that `f(*m_iter) == true`
|
||||||
or else`m_iter == end`. The member `m_pred` is constructed from
|
or else`m_iter == end`. The member `m_pred` is constructed from
|
||||||
`f` and `m_end` from `end`.
|
`f` and `m_end` from `end`.
|
||||||
|
|
||||||
@ -195,9 +194,9 @@ operations.
|
|||||||
filter_iterator(Iterator x, Iterator end = Iterator());
|
filter_iterator(Iterator x, Iterator end = Iterator());
|
||||||
|
|
||||||
[*Requires: ] `Predicate` must be Default Constructible and
|
[*Requires: ] `Predicate` must be Default Constructible and
|
||||||
`Predicate` is a class type (not a function pointer).\n
|
`Predicate` is a class type (not a function pointer).[br]
|
||||||
[*Effects: ] Constructs a `filter_iterator` where `m_iter` is either
|
[*Effects: ] Constructs a `filter_iterator` where `m_iter` is either
|
||||||
the first position in the range `[x,end)` such that `m_pred(*m_iter) == true`
|
the first position in the range `[x,end)` such that `m_pred(*m_iter) == true`
|
||||||
or else`m_iter == end`. The member `m_pred` is default constructed.
|
or else`m_iter == end`. The member `m_pred` is default constructed.
|
||||||
|
|
||||||
|
|
||||||
@ -205,9 +204,9 @@ operations.
|
|||||||
filter_iterator(
|
filter_iterator(
|
||||||
filter_iterator<Predicate, OtherIterator> const& t
|
filter_iterator<Predicate, OtherIterator> const& t
|
||||||
, typename enable_if_convertible<OtherIterator, Iterator>::type* = 0 // exposition
|
, typename enable_if_convertible<OtherIterator, Iterator>::type* = 0 // exposition
|
||||||
);`
|
);
|
||||||
|
|
||||||
[*Requires: ] `OtherIterator` is implicitly convertible to `Iterator`.\n
|
[*Requires: ] `OtherIterator` is implicitly convertible to `Iterator`.[br]
|
||||||
[*Effects: ] Constructs a filter iterator whose members are copied from `t`.
|
[*Effects: ] Constructs a filter iterator whose members are copied from `t`.
|
||||||
|
|
||||||
|
|
||||||
@ -235,8 +234,7 @@ operations.
|
|||||||
|
|
||||||
[*Effects: ] Increments `m_iter` and then continues to
|
[*Effects: ] Increments `m_iter` and then continues to
|
||||||
increment `m_iter` until either `m_iter == m_end`
|
increment `m_iter` until either `m_iter == m_end`
|
||||||
or `m_pred(*m_iter) == true`.\n
|
or `m_pred(*m_iter) == true`.[br]
|
||||||
[*Returns: ] `*this`
|
[*Returns: ] `*this`
|
||||||
|
|
||||||
|
[endsect]
|
||||||
[endsect]
|
|
||||||
|
@ -1,4 +1,3 @@
|
|||||||
|
|
||||||
[section:function_output Function Output Iterator]
|
[section:function_output Function Output Iterator]
|
||||||
|
|
||||||
The function output iterator adaptor makes it easier to create custom
|
The function output iterator adaptor makes it easier to create custom
|
||||||
@ -34,8 +33,8 @@ proxy object.
|
|||||||
x.push_back("!");
|
x.push_back("!");
|
||||||
|
|
||||||
std::string s = "";
|
std::string s = "";
|
||||||
std::copy(x.begin(), x.end(),
|
std::copy(x.begin(), x.end(),
|
||||||
boost::make_function_output_iterator(string_appender(s)));
|
boost::make_function_output_iterator(string_appender(s)));
|
||||||
|
|
||||||
std::cout << s << std::endl;
|
std::cout << s << std::endl;
|
||||||
|
|
||||||
@ -68,7 +67,7 @@ proxy object.
|
|||||||
|
|
||||||
[h3 Requirements]
|
[h3 Requirements]
|
||||||
|
|
||||||
`UnaryFunction` must be Assignable and Copy Constructible.
|
`UnaryFunction` must be Assignable and Copy Constructible.
|
||||||
|
|
||||||
[h3 Concepts]
|
[h3 Concepts]
|
||||||
|
|
||||||
@ -79,14 +78,14 @@ Incrementable Iterator concepts.
|
|||||||
|
|
||||||
explicit function_output_iterator(const UnaryFunction& f = UnaryFunction());
|
explicit function_output_iterator(const UnaryFunction& f = UnaryFunction());
|
||||||
|
|
||||||
[*Effects: ] Constructs an instance of `function_output_iterator`
|
[*Effects: ] Constructs an instance of `function_output_iterator`
|
||||||
with `m_f` constructed from `f`.
|
with `m_f` constructed from `f`.
|
||||||
|
|
||||||
unspecified_type operator*();
|
unspecified_type operator*();
|
||||||
|
|
||||||
[*Returns: ] An object `r` of unspecified type such that `r = t`
|
[*Returns: ] An object `r` of unspecified type such that `r = t`
|
||||||
is equivalent to `m_f(t)` for all `t`.
|
is equivalent to `m_f(t)` for all `t`.
|
||||||
|
|
||||||
|
|
||||||
function_output_iterator& operator++();
|
function_output_iterator& operator++();
|
||||||
|
|
||||||
@ -97,4 +96,4 @@ Incrementable Iterator concepts.
|
|||||||
|
|
||||||
[*Returns: ] `*this`.
|
[*Returns: ] `*this`.
|
||||||
|
|
||||||
[endsect]
|
[endsect]
|
||||||
|
@ -1,4 +1,3 @@
|
|||||||
|
|
||||||
[section:indirect Indirect Iterator]
|
[section:indirect Indirect Iterator]
|
||||||
|
|
||||||
`indirect_iterator` adapts an iterator by applying an
|
`indirect_iterator` adapts an iterator by applying an
|
||||||
@ -50,30 +49,31 @@ using the `make_indirect_iterator` helper function.
|
|||||||
const_indirect_last(pointers_to_chars + N);
|
const_indirect_last(pointers_to_chars + N);
|
||||||
|
|
||||||
std::transform(const_indirect_first, const_indirect_last,
|
std::transform(const_indirect_first, const_indirect_last,
|
||||||
mutable_indirect_first, std::bind1st(std::plus<char>(), 1));
|
mutable_indirect_first, std::bind(std::plus<char>(), 1, std::placeholders::_1));
|
||||||
|
|
||||||
std::copy(mutable_indirect_first, mutable_indirect_last,
|
std::copy(mutable_indirect_first, mutable_indirect_last,
|
||||||
std::ostream_iterator<char>(std::cout, ","));
|
std::ostream_iterator<char>(std::cout, ","));
|
||||||
std::cout << std::endl;
|
std::cout << std::endl;
|
||||||
|
|
||||||
|
|
||||||
// Example of using make_indirect_iterator()
|
// Example of using make_indirect_iterator()
|
||||||
|
|
||||||
std::copy(boost::make_indirect_iterator(pointers_to_chars),
|
std::copy(boost::make_indirect_iterator(pointers_to_chars),
|
||||||
boost::make_indirect_iterator(pointers_to_chars + N),
|
boost::make_indirect_iterator(pointers_to_chars + N),
|
||||||
std::ostream_iterator<char>(std::cout, ","));
|
std::ostream_iterator<char>(std::cout, ","));
|
||||||
std::cout << std::endl;
|
std::cout << std::endl;
|
||||||
|
|
||||||
|
|
||||||
The output is:
|
The output is:
|
||||||
|
|
||||||
a,b,c,d,e,f,g,
|
[pre
|
||||||
b,c,d,e,f,g,h,
|
a,b,c,d,e,f,g,
|
||||||
a,b,c,d,e,f,g,
|
b,c,d,e,f,g,h,
|
||||||
|
a,b,c,d,e,f,g,
|
||||||
|
]
|
||||||
|
|
||||||
|
The source code for this example can be found
|
||||||
The source code for this example can be found
|
[example_link indirect_iterator_example.cpp..here].
|
||||||
[@../example/indirect_iterator_example.cpp here].
|
|
||||||
|
|
||||||
|
|
||||||
[h2 Reference]
|
[h2 Reference]
|
||||||
@ -137,9 +137,9 @@ the following pseudo-code, where `V` is
|
|||||||
else
|
else
|
||||||
typedef Reference reference;
|
typedef Reference reference;
|
||||||
|
|
||||||
if (Value is use_default) then
|
if (Value is use_default) then
|
||||||
typedef pointee<V>::type\* pointer;
|
typedef pointee<V>::type\* pointer;
|
||||||
else
|
else
|
||||||
typedef Value\* pointer;
|
typedef Value\* pointer;
|
||||||
|
|
||||||
if (Difference is use_default)
|
if (Difference is use_default)
|
||||||
@ -203,8 +203,8 @@ following operations:
|
|||||||
|
|
||||||
indirect_iterator();
|
indirect_iterator();
|
||||||
|
|
||||||
[*Requires: ] `Iterator` must be Default Constructible.\n
|
[*Requires: ] `Iterator` must be Default Constructible.[br]
|
||||||
[*Effects: ] Constructs an instance of `indirect_iterator` with
|
[*Effects: ] Constructs an instance of `indirect_iterator` with
|
||||||
a default-constructed `m_iterator`.
|
a default-constructed `m_iterator`.
|
||||||
|
|
||||||
|
|
||||||
@ -225,8 +225,8 @@ following operations:
|
|||||||
, typename enable_if_convertible<Iterator2, Iterator>::type* = 0 // exposition
|
, typename enable_if_convertible<Iterator2, Iterator>::type* = 0 // exposition
|
||||||
);
|
);
|
||||||
|
|
||||||
[*Requires: ] `Iterator2` is implicitly convertible to `Iterator`.\n
|
[*Requires: ] `Iterator2` is implicitly convertible to `Iterator`.[br]
|
||||||
[*Effects: ] Constructs an instance of `indirect_iterator` whose
|
[*Effects: ] Constructs an instance of `indirect_iterator` whose
|
||||||
`m_iterator` subobject is constructed from `y.base()`.
|
`m_iterator` subobject is constructed from `y.base()`.
|
||||||
|
|
||||||
|
|
||||||
@ -242,13 +242,13 @@ following operations:
|
|||||||
|
|
||||||
indirect_iterator& operator++();
|
indirect_iterator& operator++();
|
||||||
|
|
||||||
[*Effects: ] `++m_iterator`\n
|
[*Effects: ] `++m_iterator`[br]
|
||||||
[*Returns: ] `*this`
|
[*Returns: ] `*this`
|
||||||
|
|
||||||
|
|
||||||
indirect_iterator& operator--();
|
indirect_iterator& operator--();
|
||||||
|
|
||||||
[*Effects: ] `--m_iterator`\n
|
[*Effects: ] `--m_iterator`[br]
|
||||||
[*Returns: ] `*this`
|
[*Returns: ] `*this`
|
||||||
|
|
||||||
[endsect]
|
[endsect]
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
|
|
||||||
[library Boost.Iterator
|
[library Boost.Iterator
|
||||||
[/ version 1.0.1]
|
[/ version 1.0.1]
|
||||||
|
[quickbook 1.6]
|
||||||
[authors [Abrahams, David], [Siek, Jeremy], [Witt, Thomas]]
|
[authors [Abrahams, David], [Siek, Jeremy], [Witt, Thomas]]
|
||||||
[copyright 2003 2005 David Abrahams Jeremy Siek Thomas Witt]
|
[copyright 2003 2005 David Abrahams Jeremy Siek Thomas Witt]
|
||||||
[category iterator]
|
[category iterator]
|
||||||
@ -28,11 +28,15 @@
|
|||||||
|
|
||||||
[/ Links ]
|
[/ Links ]
|
||||||
|
|
||||||
[def _iterator_ [@../../libs/iterator/doc/index.html Boost.Iterator]]
|
[def _iterator_ [@../../../iterator/doc/index.html Boost.Iterator]]
|
||||||
|
[def _concept_check_ [@../../../concept_check/index.html Boost.ConceptCheck]]
|
||||||
|
[template example_link[name descr]'''<ulink url="../../example/'''[name]'''">'''[descr]'''</ulink>''']
|
||||||
|
|
||||||
|
[template sub[x]'''<subscript>'''[x]'''</subscript>''']
|
||||||
|
|
||||||
[section:intro Introduction]
|
[section:intro Introduction]
|
||||||
|
|
||||||
[def _concepts_ [@../../more/generic_programming.html#concept concepts]]
|
[def _concepts_ [@http://www.boost.org/more/generic_programming.html#concept concepts]]
|
||||||
|
|
||||||
The Boost Iterator Library contains two parts. The first
|
The Boost Iterator Library contains two parts. The first
|
||||||
is a system of _concepts_ which extend the C++ standard
|
is a system of _concepts_ which extend the C++ standard
|
||||||
@ -70,19 +74,23 @@ and a _GOTW_50_. New-style iterators go well beyond
|
|||||||
patching up `vector<bool>`, though: there are lots of other
|
patching up `vector<bool>`, though: there are lots of other
|
||||||
iterators already in use which can't be adequately represented by
|
iterators already in use which can't be adequately represented by
|
||||||
the existing concepts. For details about the new iterator
|
the existing concepts. For details about the new iterator
|
||||||
concepts, see our [@./new-iter-concepts.html Standard Proposal for New-Style Iterators].
|
concepts, see our [@../new-iter-concepts.html Standard Proposal for New-Style Iterators].
|
||||||
|
|
||||||
[h2 Iterator Facade and Adaptor]
|
[h2 Iterator Facade and Adaptor]
|
||||||
|
|
||||||
[def _facade_ [@./iterator_facade.html facade]]
|
[/
|
||||||
[def _adaptor_ [@./iterator_adaptor.html adaptor]]
|
[def _facade_ [link iterator.generic.facade facade]]
|
||||||
|
[def _adaptor_ [link iterator.generic.adaptor adaptor]]
|
||||||
|
]
|
||||||
|
[def _facade_ [@../iterator_facade.html facade]]
|
||||||
|
[def _adaptor_ [@../iterator_adaptor.html adaptor]]
|
||||||
|
|
||||||
Writing standard-conforming iterators is tricky, but the need comes
|
Writing standard-conforming iterators is tricky, but the need comes
|
||||||
up often. In order to ease the implementation of new iterators,
|
up often. In order to ease the implementation of new iterators,
|
||||||
the Boost.Iterator library provides the _facade_ class template,
|
the Boost.Iterator library provides the _facade_ class template,
|
||||||
which implements many useful defaults and compile-time checks
|
which implements many useful defaults and compile-time checks
|
||||||
designed to help the iterator author ensure that his iterator is
|
designed to help the iterator author ensure that his iterator is
|
||||||
correct.
|
correct.
|
||||||
|
|
||||||
It is also common to define a new iterator that is similar to some
|
It is also common to define a new iterator that is similar to some
|
||||||
underlying iterator or iterator-like type, but that modifies some
|
underlying iterator or iterator-like type, but that modifies some
|
||||||
@ -91,26 +99,28 @@ library supplies the _adaptor_ class template, which is specially
|
|||||||
designed to take advantage of as much of the underlying type's
|
designed to take advantage of as much of the underlying type's
|
||||||
behavior as possible.
|
behavior as possible.
|
||||||
|
|
||||||
Both _facade_ and _adaptor_ as well as many of the `specialized
|
Both _facade_ and _adaptor_ as well as many of the [link iterator.specialized specialized
|
||||||
adaptors`_ mentioned below have been proposed for standardization
|
adaptors] mentioned below have been proposed for standardization
|
||||||
([@./facade-and-adaptor.html Standard Proposal For Iterator Facade and Adaptor]).
|
([@../facade-and-adaptor.html Standard Proposal For Iterator Facade and Adaptor]).
|
||||||
|
|
||||||
[h2 Specialized Adaptors]
|
[h2 Specialized Adaptors]
|
||||||
|
|
||||||
The iterator library supplies a useful suite of standard-conforming
|
The iterator library supplies a useful suite of standard-conforming
|
||||||
iterator templates based on the Boost [link
|
iterator templates based on the Boost [link
|
||||||
intro.iterator_facade_and_adaptor iterator facade and adaptor]
|
iterator.intro.iterator_facade_and_adaptor iterator facade and adaptor]
|
||||||
templates.
|
templates.
|
||||||
|
|
||||||
[def _counting_ [@./counting_iterator.html `counting_iterator`]]
|
[def _counting_ [link iterator.specialized.counting `counting_iterator`]]
|
||||||
[def _filter_ [@./filter_iterator.html `filter_iterator`]]
|
[def _filter_ [link iterator.specialized.filter `filter_iterator`]]
|
||||||
[def _function_ [@./function_output_iterator.html `function_output_iterator`]]
|
[def _function_input_ [@../function_input_iterator.html `function_input_iterator`]]
|
||||||
[def _indirect_ [@./indirect_iterator.html `indirect_iterator`]]
|
[def _function_output_ [link iterator.specialized.function_output `function_output_iterator`]]
|
||||||
[def _permutation_ [@./permutation_iterator.html `permutation_iterator`]]
|
[def _generator_ [@../generator_iterator.htm `generator_iterator`]]
|
||||||
[def _reverse_ [@./reverse_iterator.html `reverse_iterator`]]
|
[def _indirect_ [link iterator.specialized.indirect `indirect_iterator`]]
|
||||||
[def _shared_ [@./shared_container_iterator.html `shared_container_iterator`]]
|
[def _permutation_ [link iterator.specialized.permutation `permutation_iterator`]]
|
||||||
[def _transform_ [@./transform_iterator.html `transform_iterator`]]
|
[def _reverse_ [link iterator.specialized.reverse `reverse_iterator`]]
|
||||||
[def _zip_ [@./zip_iterator.html `zip_iterator`]]
|
[def _shared_ [link iterator.specialized.shared_container `shared_container_iterator`]]
|
||||||
|
[def _transform_ [link iterator.specialized.transform `transform_iterator`]]
|
||||||
|
[def _zip_ [link iterator.specialized.zip `zip_iterator`]]
|
||||||
|
|
||||||
[def _shared_ptr_ [@../../smart_ptr/shared_ptr.htm `shared_ptr`]]
|
[def _shared_ptr_ [@../../smart_ptr/shared_ptr.htm `shared_ptr`]]
|
||||||
|
|
||||||
@ -120,10 +130,18 @@ templates.
|
|||||||
* _filter_: an iterator over the subset of elements of some
|
* _filter_: an iterator over the subset of elements of some
|
||||||
sequence which satisfy a given predicate
|
sequence which satisfy a given predicate
|
||||||
|
|
||||||
* _function_: an output iterator wrapping a unary function
|
* _function_input_: an input iterator wrapping a generator (nullary
|
||||||
|
function object); each time the iterator is dereferenced, the function object
|
||||||
|
is called to get the value to return.
|
||||||
|
|
||||||
|
* _function_output_: an output iterator wrapping a unary function
|
||||||
object; each time an element is written into the dereferenced
|
object; each time an element is written into the dereferenced
|
||||||
iterator, it is passed as a parameter to the function object.
|
iterator, it is passed as a parameter to the function object.
|
||||||
|
|
||||||
|
* _generator_: an input iterator wrapping a generator (nullary
|
||||||
|
function object); each time the iterator is dereferenced, the function object
|
||||||
|
is called to get the value to return. An outdated analogue of _function_input_.
|
||||||
|
|
||||||
* _indirect_: an iterator over the objects *pointed-to* by the
|
* _indirect_: an iterator over the objects *pointed-to* by the
|
||||||
elements of some sequence.
|
elements of some sequence.
|
||||||
|
|
||||||
@ -132,7 +150,7 @@ templates.
|
|||||||
|
|
||||||
* _reverse_: an iterator which traverses the elements of some
|
* _reverse_: an iterator which traverses the elements of some
|
||||||
bidirectional sequence in reverse. Corrects many of the
|
bidirectional sequence in reverse. Corrects many of the
|
||||||
shortcomings of C++98's ``std::reverse_iterator``.
|
shortcomings of C++98's `std::reverse_iterator`.
|
||||||
|
|
||||||
* _shared_: an iterator over elements of a container whose
|
* _shared_: an iterator over elements of a container whose
|
||||||
lifetime is maintained by a _shared_ptr_ stored in the iterator.
|
lifetime is maintained by a _shared_ptr_ stored in the iterator.
|
||||||
@ -140,7 +158,7 @@ templates.
|
|||||||
* _transform_: an iterator over elements which are the result of
|
* _transform_: an iterator over elements which are the result of
|
||||||
applying some functional transformation to the elements of an
|
applying some functional transformation to the elements of an
|
||||||
underlying sequence. This component also replaces the old
|
underlying sequence. This component also replaces the old
|
||||||
``projection_iterator_adaptor``.
|
`projection_iterator_adaptor`.
|
||||||
|
|
||||||
* _zip_: an iterator over tuples of the elements at corresponding
|
* _zip_: an iterator over tuples of the elements at corresponding
|
||||||
positions of heterogeneous underlying iterators.
|
positions of heterogeneous underlying iterators.
|
||||||
@ -149,9 +167,9 @@ templates.
|
|||||||
|
|
||||||
[h3 Traits]
|
[h3 Traits]
|
||||||
|
|
||||||
[def _pointee_ [@./pointee.html `pointee.hpp`]]
|
[def _pointee_ [link iterator.utilities.traits `pointee.hpp`]]
|
||||||
[def _iterator_traits_ [@./iterator_traits.html `iterator_traits.hpp`]]
|
[def _iterator_traits_ [link iterator.utilities.iterator_traits `iterator_traits.hpp`]]
|
||||||
[def _interoperable_ [@./interoperable.html `interoperable.hpp`]]
|
[def _interoperable_ [@../interoperable.html `interoperable.hpp`]]
|
||||||
[def _MPL_ [@../../mpl/doc/index.html [*MPL]]]
|
[def _MPL_ [@../../mpl/doc/index.html [*MPL]]]
|
||||||
|
|
||||||
* _pointee_: Provides the capability to deduce the referent types
|
* _pointee_: Provides the capability to deduce the referent types
|
||||||
@ -162,19 +180,40 @@ templates.
|
|||||||
retrieve an iterator's traits. Also corrects for the deficiencies
|
retrieve an iterator's traits. Also corrects for the deficiencies
|
||||||
of broken implementations of `std::iterator_traits`.
|
of broken implementations of `std::iterator_traits`.
|
||||||
|
|
||||||
[\ * |interoperable|_ (PDF__): Provides an _MPL_ compatible metafunction for
|
[/
|
||||||
testing iterator interoperability
|
* _interoperable_: Provides an _MPL_ compatible metafunction for
|
||||||
|
testing iterator interoperability
|
||||||
]
|
]
|
||||||
|
|
||||||
[h3 Testing and Concept Checking]
|
[h3 Testing and Concept Checking]
|
||||||
|
|
||||||
[def _iterator_concepts_ [@./iterator_concepts.html `iterator_concepts.hpp`]]
|
[def _iterator_concepts_ [link iterator.concepts `iterator_concepts.hpp`]]
|
||||||
[def _iterator_archetypes_ [@./iterator_archetypes.html `iterator_archetypes.hpp`]]
|
[def _iterator_archetypes_ [link iterator.utilities.archetypes `iterator_archetypes.hpp`]]
|
||||||
|
|
||||||
* _iterator_concepts_: Concept checking classes for the new iterator concepts.
|
* _iterator_concepts_: Concept checking classes for the new iterator concepts.
|
||||||
|
|
||||||
* _iterator_archetypes_: Concept archetype classes for the new iterators concepts.
|
* _iterator_archetypes_: Concept archetype classes for the new iterators concepts.
|
||||||
|
|
||||||
|
[h2 Iterator Algorithms]
|
||||||
|
|
||||||
|
The library provides a number of generic algorithms for use with iterators. These
|
||||||
|
algorithms take advantage of the new concepts defined by the library to provide
|
||||||
|
better performance and functionality.
|
||||||
|
|
||||||
|
[def _advance_ [link iterator.algorithms.advance `advance.hpp`]]
|
||||||
|
[def _distance_ [link iterator.algorithms.distance `distance.hpp`]]
|
||||||
|
[def _next_prior_ [link iterator.algorithms.next_prior `next_prior.hpp`]]
|
||||||
|
|
||||||
|
* _advance_: Provides `advance()` function for advancing an iterator a given number
|
||||||
|
of positions forward or backward.
|
||||||
|
|
||||||
|
* _distance_: Provides `distance()` function for computing distance between two
|
||||||
|
iterators.
|
||||||
|
|
||||||
|
* _next_prior_: Provides `next()` and `prior()` functions for obtaining
|
||||||
|
next and prior iterators to a given iterator. The functions are also compatible
|
||||||
|
with non-iterator types.
|
||||||
|
|
||||||
[endsect]
|
[endsect]
|
||||||
|
|
||||||
[include concepts.qbk]
|
[include concepts.qbk]
|
||||||
@ -195,15 +234,17 @@ templates.
|
|||||||
|
|
||||||
[include concept_checking.qbk]
|
[include concept_checking.qbk]
|
||||||
|
|
||||||
[include traits.qbk]
|
[include iterator_traits.qbk]
|
||||||
|
|
||||||
[include utilities.qbk]
|
[include type_traits.qbk]
|
||||||
|
|
||||||
[endsect]
|
[endsect]
|
||||||
|
|
||||||
|
[include algorithms.qbk]
|
||||||
|
|
||||||
[section:upgrading Upgrading from the old Boost Iterator Adaptor Library]
|
[section:upgrading Upgrading from the old Boost Iterator Adaptor Library]
|
||||||
|
|
||||||
[def _type_generator_ [@../../more/generic_programming.html#type_generator type generator]]
|
[def _type_generator_ [@http://www.boost.org/more/generic_programming.html#type_generator type generator]]
|
||||||
|
|
||||||
If you have been using the old Boost Iterator Adaptor library to
|
If you have been using the old Boost Iterator Adaptor library to
|
||||||
implement iterators, you probably wrote a `Policies` class which
|
implement iterators, you probably wrote a `Policies` class which
|
||||||
@ -264,5 +305,3 @@ library you see today.
|
|||||||
Patterns, C++ Report, February 1995, pp. 24-27.]
|
Patterns, C++ Report, February 1995, pp. 24-27.]
|
||||||
|
|
||||||
[endsect]
|
[endsect]
|
||||||
|
|
||||||
|
|
54
doc/quickbook/iterator_traits.qbk
Normal file
54
doc/quickbook/iterator_traits.qbk
Normal file
@ -0,0 +1,54 @@
|
|||||||
|
[section:iterator_traits Iterator Traits]
|
||||||
|
|
||||||
|
`std::iterator_traits` provides access to five associated types
|
||||||
|
of any iterator: its `value_type`, `reference`, `pointer`,
|
||||||
|
`iterator_category`, and `difference_type`. Unfortunately,
|
||||||
|
such a "multi-valued" traits template can be difficult to use in a
|
||||||
|
metaprogramming context. `<boost/iterator/iterator_traits.hpp>`
|
||||||
|
provides access to these types using a standard metafunctions_.
|
||||||
|
|
||||||
|
[h2 Synopsis]
|
||||||
|
|
||||||
|
Header `<boost/iterator/iterator_traits.hpp>`:
|
||||||
|
|
||||||
|
template <class Iterator>
|
||||||
|
struct iterator_value
|
||||||
|
{
|
||||||
|
typedef typename
|
||||||
|
std::iterator_traits<Iterator>::value_type
|
||||||
|
type;
|
||||||
|
};
|
||||||
|
|
||||||
|
template <class Iterator>
|
||||||
|
struct iterator_reference
|
||||||
|
{
|
||||||
|
typedef typename
|
||||||
|
std::iterator_traits<Iterator>::reference
|
||||||
|
type;
|
||||||
|
};
|
||||||
|
|
||||||
|
template <class Iterator>
|
||||||
|
struct iterator_pointer
|
||||||
|
{
|
||||||
|
typedef typename
|
||||||
|
std::iterator_traits<Iterator>::pointer
|
||||||
|
type;
|
||||||
|
};
|
||||||
|
|
||||||
|
template <class Iterator>
|
||||||
|
struct iterator_difference
|
||||||
|
{
|
||||||
|
typedef typename
|
||||||
|
detail::iterator_traits<Iterator>::difference_type
|
||||||
|
type;
|
||||||
|
};
|
||||||
|
|
||||||
|
template <class Iterator>
|
||||||
|
struct iterator_category
|
||||||
|
{
|
||||||
|
typedef typename
|
||||||
|
detail::iterator_traits<Iterator>::iterator_category
|
||||||
|
type;
|
||||||
|
};
|
||||||
|
|
||||||
|
[endsect]
|
@ -1,4 +1,3 @@
|
|||||||
|
|
||||||
[section:permutation Permutation Iterator]
|
[section:permutation Permutation Iterator]
|
||||||
|
|
||||||
The permutation iterator adaptor provides a permuted view of a given
|
The permutation iterator adaptor provides a permuted view of a given
|
||||||
@ -35,7 +34,7 @@ past-the-end iterator to the indices.
|
|||||||
*el_it = std::distance(elements.begin(), el_it);
|
*el_it = std::distance(elements.begin(), el_it);
|
||||||
|
|
||||||
index_type indices( index_size );
|
index_type indices( index_size );
|
||||||
for(index_type::iterator i_it = indices.begin() ; i_it != indices.end() ; ++i_it )
|
for(index_type::iterator i_it = indices.begin() ; i_it != indices.end() ; ++i_it )
|
||||||
*i_it = element_range_size - index_size + std::distance(indices.begin(), i_it);
|
*i_it = element_range_size - index_size + std::distance(indices.begin(), i_it);
|
||||||
std::reverse( indices.begin(), indices.end() );
|
std::reverse( indices.begin(), indices.end() );
|
||||||
|
|
||||||
@ -75,27 +74,28 @@ past-the-end iterator to the indices.
|
|||||||
|
|
||||||
The output is:
|
The output is:
|
||||||
|
|
||||||
The original range is : 0 1 2 3 4 5 6 7 8 9
|
[pre
|
||||||
The reindexing scheme is : 9 8 7 6
|
The original range is : 0 1 2 3 4 5 6 7 8 9
|
||||||
The permutated range is : 9 8 7 6
|
The reindexing scheme is : 9 8 7 6
|
||||||
Elements at even indices in the permutation : 9 7
|
The permutated range is : 9 8 7 6
|
||||||
Permutation backwards : 6 7 8 9
|
Elements at even indices in the permutation : 9 7
|
||||||
Iterate backward with stride 2 : 6 8
|
Permutation backwards : 6 7 8 9
|
||||||
|
Iterate backward with stride 2 : 6 8
|
||||||
|
]
|
||||||
|
|
||||||
The source code for this example can be found
|
The source code for this example can be found
|
||||||
[@../example/permutation_iter_example.cpp here].
|
[example_link permutation_iter_example.cpp..here].
|
||||||
|
|
||||||
[h2 Reference]
|
[h2 Reference]
|
||||||
|
|
||||||
[h3 Synopsis]
|
[h3 Synopsis]
|
||||||
|
|
||||||
template< class ElementIterator
|
template< class ElementIterator
|
||||||
, class IndexIterator
|
, class IndexIterator
|
||||||
, class ValueT = use_default
|
, class ValueT = use_default
|
||||||
, class CategoryT = use_default
|
, class CategoryT = use_default
|
||||||
, class ReferenceT = use_default
|
, class ReferenceT = use_default
|
||||||
, class DifferenceT = use_default >
|
, class DifferenceT = use_default >
|
||||||
class permutation_iterator
|
class permutation_iterator
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
@ -104,10 +104,10 @@ The source code for this example can be found
|
|||||||
|
|
||||||
template< class OEIter, class OIIter, class V, class C, class R, class D >
|
template< class OEIter, class OIIter, class V, class C, class R, class D >
|
||||||
permutation_iterator(
|
permutation_iterator(
|
||||||
permutation_iterator<OEIter, OIIter, V, C, R, D> const& r
|
permutation_iterator<OEIter, OIIter, V, C, R, D> const& r
|
||||||
, typename enable_if_convertible<OEIter, ElementIterator>::type* = 0
|
, typename enable_if_convertible<OEIter, ElementIterator>::type* = 0
|
||||||
, typename enable_if_convertible<OIIter, IndexIterator>::type* = 0
|
, typename enable_if_convertible<OIIter, IndexIterator>::type* = 0
|
||||||
);
|
);
|
||||||
reference operator*() const;
|
reference operator*() const;
|
||||||
permutation_iterator& operator++();
|
permutation_iterator& operator++();
|
||||||
ElementIterator const& base() const;
|
ElementIterator const& base() const;
|
||||||
@ -117,7 +117,7 @@ The source code for this example can be found
|
|||||||
};
|
};
|
||||||
|
|
||||||
template <class ElementIterator, class IndexIterator>
|
template <class ElementIterator, class IndexIterator>
|
||||||
permutation_iterator<ElementIterator, IndexIterator>
|
permutation_iterator<ElementIterator, IndexIterator>
|
||||||
make_permutation_iterator( ElementIterator e, IndexIterator i);
|
make_permutation_iterator( ElementIterator e, IndexIterator i);
|
||||||
|
|
||||||
|
|
||||||
@ -134,15 +134,15 @@ the `IndexIterator` must be convertible to the difference type of
|
|||||||
as `IndexIterator` and the same iterator access concepts as
|
as `IndexIterator` and the same iterator access concepts as
|
||||||
`ElementIterator`.
|
`ElementIterator`.
|
||||||
|
|
||||||
If `IndexIterator` models Single Pass Iterator and
|
If `IndexIterator` models Single Pass Iterator and
|
||||||
`ElementIterator` models Readable Iterator then
|
`ElementIterator` models Readable Iterator then
|
||||||
`permutation_iterator` models Input Iterator.
|
`permutation_iterator` models Input Iterator.
|
||||||
|
|
||||||
If `IndexIterator` models Forward Traversal Iterator and
|
If `IndexIterator` models Forward Traversal Iterator and
|
||||||
`ElementIterator` models Readable Lvalue Iterator then
|
`ElementIterator` models Readable Lvalue Iterator then
|
||||||
`permutation_iterator` models Forward Iterator.
|
`permutation_iterator` models Forward Iterator.
|
||||||
|
|
||||||
If `IndexIterator` models Bidirectional Traversal Iterator and
|
If `IndexIterator` models Bidirectional Traversal Iterator and
|
||||||
`ElementIterator` models Readable Lvalue Iterator then
|
`ElementIterator` models Readable Lvalue Iterator then
|
||||||
`permutation_iterator` models Bidirectional Iterator.
|
`permutation_iterator` models Bidirectional Iterator.
|
||||||
|
|
||||||
@ -173,10 +173,10 @@ following operations.
|
|||||||
|
|
||||||
template< class OEIter, class OIIter, class V, class C, class R, class D >
|
template< class OEIter, class OIIter, class V, class C, class R, class D >
|
||||||
permutation_iterator(
|
permutation_iterator(
|
||||||
permutation_iterator<OEIter, OIIter, V, C, R, D> const& r
|
permutation_iterator<OEIter, OIIter, V, C, R, D> const& r
|
||||||
, typename enable_if_convertible<OEIter, ElementIterator>::type* = 0
|
, typename enable_if_convertible<OEIter, ElementIterator>::type* = 0
|
||||||
, typename enable_if_convertible<OIIter, IndexIterator>::type* = 0
|
, typename enable_if_convertible<OIIter, IndexIterator>::type* = 0
|
||||||
);
|
);
|
||||||
|
|
||||||
[*Effects: ] Constructs `m_elt` from `r.m_elt` and
|
[*Effects: ] Constructs `m_elt` from `r.m_elt` and
|
||||||
`m_order` from `y.m_order`.
|
`m_order` from `y.m_order`.
|
||||||
@ -189,7 +189,7 @@ following operations.
|
|||||||
|
|
||||||
permutation_iterator& operator++();
|
permutation_iterator& operator++();
|
||||||
|
|
||||||
[*Effects: ] `++m_order`\n
|
[*Effects: ] `++m_order`[br]
|
||||||
[*Returns: ] `*this`
|
[*Returns: ] `*this`
|
||||||
|
|
||||||
|
|
||||||
@ -199,9 +199,9 @@ following operations.
|
|||||||
|
|
||||||
|
|
||||||
template <class ElementIterator, class IndexIterator>
|
template <class ElementIterator, class IndexIterator>
|
||||||
permutation_iterator<ElementIterator, IndexIterator>
|
permutation_iterator<ElementIterator, IndexIterator>
|
||||||
make_permutation_iterator(ElementIterator e, IndexIterator i);
|
make_permutation_iterator(ElementIterator e, IndexIterator i);
|
||||||
|
|
||||||
[*Returns: ] `permutation_iterator<ElementIterator, IndexIterator>(e, i)`
|
[*Returns: ] `permutation_iterator<ElementIterator, IndexIterator>(e, i)`
|
||||||
|
|
||||||
[endsect]
|
[endsect]
|
||||||
|
@ -1,4 +1,3 @@
|
|||||||
|
|
||||||
[section:reverse Reverse Iterator]
|
[section:reverse Reverse Iterator]
|
||||||
|
|
||||||
The reverse iterator adaptor iterates through the adapted iterator
|
The reverse iterator adaptor iterates through the adapted iterator
|
||||||
@ -9,7 +8,6 @@ range in the opposite direction.
|
|||||||
The following example prints an array of characters in reverse order
|
The following example prints an array of characters in reverse order
|
||||||
using `reverse_iterator`.
|
using `reverse_iterator`.
|
||||||
|
|
||||||
|
|
||||||
char letters_[] = "hello world!";
|
char letters_[] = "hello world!";
|
||||||
const int N = sizeof(letters_)/sizeof(char) - 1;
|
const int N = sizeof(letters_)/sizeof(char) - 1;
|
||||||
typedef char* base_iterator;
|
typedef char* base_iterator;
|
||||||
@ -35,13 +33,14 @@ using `reverse_iterator`.
|
|||||||
|
|
||||||
The output is:
|
The output is:
|
||||||
|
|
||||||
original sequence of letters: hello world!
|
[pre
|
||||||
sequence in reverse order: !dlrow olleh
|
original sequence of letters: hello world!
|
||||||
sequence in double-reversed (normal) order: hello world!
|
sequence in reverse order: !dlrow olleh
|
||||||
|
sequence in double-reversed (normal) order: hello world!
|
||||||
|
]
|
||||||
|
|
||||||
The source code for this example can be found
|
The source code for this example can be found
|
||||||
[@../example/reverse_iterator_example.cpp here].
|
[example_link reverse_iterator_example.cpp..here].
|
||||||
|
|
||||||
[h2 Reference]
|
[h2 Reference]
|
||||||
|
|
||||||
@ -115,8 +114,8 @@ operations.
|
|||||||
|
|
||||||
reverse_iterator();
|
reverse_iterator();
|
||||||
|
|
||||||
[*Requires: ] `Iterator` must be Default Constructible.\n
|
[*Requires: ] `Iterator` must be Default Constructible.[br]
|
||||||
[*Effects: ] Constructs an instance of `reverse_iterator` with `m_iterator`
|
[*Effects: ] Constructs an instance of `reverse_iterator` with `m_iterator`
|
||||||
default constructed.
|
default constructed.
|
||||||
|
|
||||||
explicit reverse_iterator(Iterator x);
|
explicit reverse_iterator(Iterator x);
|
||||||
@ -131,8 +130,8 @@ operations.
|
|||||||
, typename enable_if_convertible<OtherIterator, Iterator>::type* = 0 // exposition
|
, typename enable_if_convertible<OtherIterator, Iterator>::type* = 0 // exposition
|
||||||
);
|
);
|
||||||
|
|
||||||
[*Requires: ] `OtherIterator` is implicitly convertible to `Iterator`.\n
|
[*Requires: ] `OtherIterator` is implicitly convertible to `Iterator`.[br]
|
||||||
[*Effects: ] Constructs instance of `reverse_iterator` whose
|
[*Effects: ] Constructs instance of `reverse_iterator` whose
|
||||||
`m_iterator` subobject is constructed from `y.base()`.
|
`m_iterator` subobject is constructed from `y.base()`.
|
||||||
|
|
||||||
|
|
||||||
@ -149,12 +148,12 @@ operations.
|
|||||||
|
|
||||||
reverse_iterator& operator++();
|
reverse_iterator& operator++();
|
||||||
|
|
||||||
[*Effects: ] `--m_iterator`\n
|
[*Effects: ] `--m_iterator`[br]
|
||||||
[*Returns: ] `*this`
|
[*Returns: ] `*this`
|
||||||
|
|
||||||
reverse_iterator& operator--();
|
reverse_iterator& operator--();
|
||||||
|
|
||||||
[*Effects: ] `++m_iterator`\n
|
[*Effects: ] `++m_iterator`[br]
|
||||||
[*Returns: ] `*this`
|
[*Returns: ] `*this`
|
||||||
|
|
||||||
[endsect]
|
[endsect]
|
||||||
|
@ -1,4 +1,3 @@
|
|||||||
|
|
||||||
[section:shared_container Shared Container Iterator]
|
[section:shared_container Shared Container Iterator]
|
||||||
|
|
||||||
Defined in header [@../../../boost/shared_container_iterator.hpp `boost/shared_container_iterator.hpp`].
|
Defined in header [@../../../boost/shared_container_iterator.hpp `boost/shared_container_iterator.hpp`].
|
||||||
@ -27,12 +26,12 @@ iterator.
|
|||||||
namespace boost {
|
namespace boost {
|
||||||
template <typename Container>
|
template <typename Container>
|
||||||
class shared_container_iterator;
|
class shared_container_iterator;
|
||||||
|
|
||||||
template <typename Container>
|
template <typename Container>
|
||||||
shared_container_iterator<Container>
|
shared_container_iterator<Container>
|
||||||
make_shared_container_iterator(typename Container::iterator base,
|
make_shared_container_iterator(typename Container::iterator base,
|
||||||
boost::shared_ptr<Container> const& container);
|
boost::shared_ptr<Container> const& container);
|
||||||
|
|
||||||
std::pair<
|
std::pair<
|
||||||
typename shared_container_iterator<Container>,
|
typename shared_container_iterator<Container>,
|
||||||
typename shared_container_iterator<Container>
|
typename shared_container_iterator<Container>
|
||||||
@ -46,7 +45,7 @@ iterator.
|
|||||||
|
|
||||||
The class template `shared_container_iterator` is the shared container
|
The class template `shared_container_iterator` is the shared container
|
||||||
iterator type. The `Container` template type argument must model the
|
iterator type. The `Container` template type argument must model the
|
||||||
[@http://www.sgi.com/tech/stl/Container.html Container] concept.
|
[@http://www.sgi.com/tech/stl/Container.html Container] concept.
|
||||||
|
|
||||||
[h2 Example]
|
[h2 Example]
|
||||||
|
|
||||||
@ -56,48 +55,50 @@ original shared pointer `ints` ceases to exist after `set_range()`
|
|||||||
returns, the `shared_counter_iterator` objects maintain references to
|
returns, the `shared_counter_iterator` objects maintain references to
|
||||||
the underlying vector and thereby extend the container's lifetime.
|
the underlying vector and thereby extend the container's lifetime.
|
||||||
|
|
||||||
[@../../../libs/utility/shared_iterator_example1.cpp `shared_iterator_example1.cpp`]:
|
[example_link shared_iterator_example1.cpp..`shared_iterator_example1.cpp`]:
|
||||||
|
|
||||||
#include "shared_container_iterator.hpp"
|
#include "shared_container_iterator.hpp"
|
||||||
#include "boost/shared_ptr.hpp"
|
#include "boost/shared_ptr.hpp"
|
||||||
#include <algorithm>
|
#include <algorithm>
|
||||||
#include <iostream>
|
#include <iostream>
|
||||||
#include <vector>
|
#include <vector>
|
||||||
|
|
||||||
typedef boost::shared_container_iterator< std::vector<int> > iterator;
|
typedef boost::shared_container_iterator< std::vector<int> > iterator;
|
||||||
|
|
||||||
|
|
||||||
void set_range(iterator& i, iterator& end) {
|
void set_range(iterator& i, iterator& end) {
|
||||||
|
|
||||||
boost::shared_ptr< std::vector<int> > ints(new std::vector<int>());
|
boost::shared_ptr< std::vector<int> > ints(new std::vector<int>());
|
||||||
|
|
||||||
ints->push_back(0);
|
ints->push_back(0);
|
||||||
ints->push_back(1);
|
ints->push_back(1);
|
||||||
ints->push_back(2);
|
ints->push_back(2);
|
||||||
ints->push_back(3);
|
ints->push_back(3);
|
||||||
ints->push_back(4);
|
ints->push_back(4);
|
||||||
ints->push_back(5);
|
ints->push_back(5);
|
||||||
|
|
||||||
i = iterator(ints->begin(),ints);
|
i = iterator(ints->begin(),ints);
|
||||||
end = iterator(ints->end(),ints);
|
end = iterator(ints->end(),ints);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
int main() {
|
int main() {
|
||||||
|
|
||||||
iterator i,end;
|
iterator i,end;
|
||||||
|
|
||||||
set_range(i,end);
|
set_range(i,end);
|
||||||
|
|
||||||
std::copy(i,end,std::ostream_iterator<int>(std::cout,","));
|
std::copy(i,end,std::ostream_iterator<int>(std::cout,","));
|
||||||
std::cout.put('\n');
|
std::cout.put('\n');
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
The output from this part is:
|
The output from this part is:
|
||||||
|
|
||||||
0,1,2,3,4,5,
|
[pre
|
||||||
|
0,1,2,3,4,5,
|
||||||
|
]
|
||||||
|
|
||||||
[table Template Parameters
|
[table Template Parameters
|
||||||
[[Parameter][Description]]
|
[[Parameter][Description]]
|
||||||
@ -130,16 +131,16 @@ iterator will be valid. In addition it has the following constructor:
|
|||||||
boost::shared_ptr<Container> const& container)
|
boost::shared_ptr<Container> const& container)
|
||||||
|
|
||||||
This function provides an alternative to directly constructing a
|
This function provides an alternative to directly constructing a
|
||||||
`shared_container_iterator`. Using the object generator, a
|
`shared_container_iterator`. Using the object generator, a
|
||||||
`shared_container_iterator` can be created and passed to a function without
|
`shared_container_iterator` can be created and passed to a function without
|
||||||
explicitly specifying its type.
|
explicitly specifying its type.
|
||||||
|
|
||||||
[h2 Example]
|
[h2 Example]
|
||||||
|
|
||||||
This example, similar to the previous,
|
This example, similar to the previous,
|
||||||
uses `make_shared_container_iterator()` to create the iterators.
|
uses `make_shared_container_iterator()` to create the iterators.
|
||||||
|
|
||||||
[@../../../libs/utility/shared_iterator_example2.cpp `shared_iterator_example2.cpp`]:
|
[example_link shared_iterator_example2.cpp..`shared_iterator_example2.cpp`]:
|
||||||
|
|
||||||
#include "shared_container_iterator.hpp"
|
#include "shared_container_iterator.hpp"
|
||||||
#include "boost/shared_ptr.hpp"
|
#include "boost/shared_ptr.hpp"
|
||||||
@ -147,35 +148,35 @@ uses `make_shared_container_iterator()` to create the iterators.
|
|||||||
#include <iterator>
|
#include <iterator>
|
||||||
#include <iostream>
|
#include <iostream>
|
||||||
#include <vector>
|
#include <vector>
|
||||||
|
|
||||||
|
|
||||||
template <typename Iterator>
|
template <typename Iterator>
|
||||||
void print_range_nl (Iterator begin, Iterator end) {
|
void print_range_nl (Iterator begin, Iterator end) {
|
||||||
typedef typename std::iterator_traits<Iterator>::value_type val;
|
typedef typename std::iterator_traits<Iterator>::value_type val;
|
||||||
std::copy(begin,end,std::ostream_iterator<val>(std::cout,","));
|
std::copy(begin,end,std::ostream_iterator<val>(std::cout,","));
|
||||||
std::cout.put('\n');
|
std::cout.put('\n');
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
int main() {
|
int main() {
|
||||||
|
|
||||||
typedef boost::shared_ptr< std::vector<int> > ints_t;
|
typedef boost::shared_ptr< std::vector<int> > ints_t;
|
||||||
{
|
{
|
||||||
ints_t ints(new std::vector<int>());
|
ints_t ints(new std::vector<int>());
|
||||||
|
|
||||||
ints->push_back(0);
|
ints->push_back(0);
|
||||||
ints->push_back(1);
|
ints->push_back(1);
|
||||||
ints->push_back(2);
|
ints->push_back(2);
|
||||||
ints->push_back(3);
|
ints->push_back(3);
|
||||||
ints->push_back(4);
|
ints->push_back(4);
|
||||||
ints->push_back(5);
|
ints->push_back(5);
|
||||||
|
|
||||||
print_range_nl(boost::make_shared_container_iterator(ints->begin(),ints),
|
print_range_nl(boost::make_shared_container_iterator(ints->begin(),ints),
|
||||||
boost::make_shared_container_iterator(ints->end(),ints));
|
boost::make_shared_container_iterator(ints->end(),ints));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -200,18 +201,18 @@ named. The output from this example is the same as the previous.
|
|||||||
|
|
||||||
In the following example, a range of values is returned as a pair of shared_container_iterator objects.
|
In the following example, a range of values is returned as a pair of shared_container_iterator objects.
|
||||||
|
|
||||||
[@../../../libs/utility/shared_iterator_example3.cpp `shared_iterator_example3.cpp`]:
|
[example_link shared_iterator_example3.cpp..`shared_iterator_example3.cpp`]:
|
||||||
|
|
||||||
#include "shared_container_iterator.hpp"
|
#include "shared_container_iterator.hpp"
|
||||||
#include "boost/shared_ptr.hpp"
|
#include "boost/shared_ptr.hpp"
|
||||||
#include "boost/tuple/tuple.hpp" // for boost::tie
|
#include "boost/tuple/tuple.hpp" // for boost::tie
|
||||||
#include <algorithm> // for std::copy
|
#include <algorithm> // for std::copy
|
||||||
#include <iostream>
|
#include <iostream>
|
||||||
#include <vector>
|
#include <vector>
|
||||||
|
|
||||||
|
|
||||||
typedef boost::shared_container_iterator< std::vector<int> > iterator;
|
typedef boost::shared_container_iterator< std::vector<int> > iterator;
|
||||||
|
|
||||||
std::pair<iterator,iterator>
|
std::pair<iterator,iterator>
|
||||||
return_range() {
|
return_range() {
|
||||||
boost::shared_ptr< std::vector<int> > range(new std::vector<int>());
|
boost::shared_ptr< std::vector<int> > range(new std::vector<int>());
|
||||||
@ -223,18 +224,18 @@ In the following example, a range of values is returned as a pair of shared_cont
|
|||||||
range->push_back(5);
|
range->push_back(5);
|
||||||
return boost::make_shared_container_range(range);
|
return boost::make_shared_container_range(range);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
int main() {
|
int main() {
|
||||||
|
|
||||||
|
|
||||||
iterator i,end;
|
iterator i,end;
|
||||||
|
|
||||||
boost::tie(i,end) = return_range();
|
boost::tie(i,end) = return_range();
|
||||||
|
|
||||||
std::copy(i,end,std::ostream_iterator<int>(std::cout,","));
|
std::copy(i,end,std::ostream_iterator<int>(std::cout,","));
|
||||||
std::cout.put('\n');
|
std::cout.put('\n');
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -245,4 +246,4 @@ the same as the previous two.
|
|||||||
|
|
||||||
[endsect]
|
[endsect]
|
||||||
|
|
||||||
[endsect]
|
[endsect]
|
||||||
|
@ -1,4 +1,3 @@
|
|||||||
|
|
||||||
[section:specialized Specialized Adaptors]
|
[section:specialized Specialized Adaptors]
|
||||||
|
|
||||||
[include ./counting_iterator.qbk]
|
[include ./counting_iterator.qbk]
|
||||||
@ -19,4 +18,4 @@
|
|||||||
|
|
||||||
[include ./zip_iterator.qbk]
|
[include ./zip_iterator.qbk]
|
||||||
|
|
||||||
[endsect]
|
[endsect]
|
||||||
|
@ -1,72 +0,0 @@
|
|||||||
|
|
||||||
[section:traits Iterator Traits]
|
|
||||||
|
|
||||||
`std::iterator_traits` provides access to five associated types
|
|
||||||
of any iterator: its `value_type`, `reference`, `pointer`,
|
|
||||||
`iterator_category`, and `difference_type`. Unfortunately,
|
|
||||||
such a "multi-valued" traits template can be difficult to use in a
|
|
||||||
metaprogramming context. `<boost/iterator/iterator_traits.hpp>`
|
|
||||||
provides access to these types using a standard metafunctions_.
|
|
||||||
|
|
||||||
[h2 Synopsis]
|
|
||||||
|
|
||||||
Header `<boost/iterator/iterator_traits.hpp>`:
|
|
||||||
|
|
||||||
template <class Iterator>
|
|
||||||
struct iterator_value
|
|
||||||
{
|
|
||||||
typedef typename
|
|
||||||
std::iterator_traits<Iterator>::value_type
|
|
||||||
type;
|
|
||||||
};
|
|
||||||
|
|
||||||
template <class Iterator>
|
|
||||||
struct iterator_reference
|
|
||||||
{
|
|
||||||
typedef typename
|
|
||||||
std::iterator_traits<Iterator>::reference
|
|
||||||
type;
|
|
||||||
};
|
|
||||||
|
|
||||||
template <class Iterator>
|
|
||||||
struct iterator_pointer
|
|
||||||
{
|
|
||||||
typedef typename
|
|
||||||
std::iterator_traits<Iterator>::pointer
|
|
||||||
type;
|
|
||||||
};
|
|
||||||
|
|
||||||
template <class Iterator>
|
|
||||||
struct iterator_difference
|
|
||||||
{
|
|
||||||
typedef typename
|
|
||||||
detail::iterator_traits<Iterator>::difference_type
|
|
||||||
type;
|
|
||||||
};
|
|
||||||
|
|
||||||
template <class Iterator>
|
|
||||||
struct iterator_category
|
|
||||||
{
|
|
||||||
typedef typename
|
|
||||||
detail::iterator_traits<Iterator>::iterator_category
|
|
||||||
type;
|
|
||||||
};
|
|
||||||
|
|
||||||
[h2 Broken Compiler Notes]
|
|
||||||
|
|
||||||
Because of workarounds in Boost, you may find that these
|
|
||||||
[@../../mpl/doc/index.html#metafunctions metafunctions] actually work better than the facilities provided by
|
|
||||||
your compiler's standard library.
|
|
||||||
|
|
||||||
On compilers that don't support partial specialization, such as
|
|
||||||
Microsoft Visual C++ 6.0 or 7.0, you may need to manually invoke
|
|
||||||
[@../../type_traits/index.html#transformations BOOST_BROKEN_COMPILER_TYPE_TRAITS_SPECIALIZATION] on the
|
|
||||||
`value_type` of pointers that are passed to these metafunctions.
|
|
||||||
|
|
||||||
Because of bugs in the implementation of GCC-2.9x, the name of
|
|
||||||
`iterator_category` is changed to `iterator_category_` on that
|
|
||||||
compiler. A macro, `BOOST_ITERATOR_CATEGORY`, that expands to
|
|
||||||
either `iterator_category` or `iterator_category_`, as
|
|
||||||
appropriate to the platform, is provided for portability.
|
|
||||||
|
|
||||||
[endsect]
|
|
@ -1,4 +1,3 @@
|
|||||||
|
|
||||||
[section:transform Transform Iterator]
|
[section:transform Transform Iterator]
|
||||||
|
|
||||||
The transform iterator adapts an iterator by modifying the
|
The transform iterator adapts an iterator by modifying the
|
||||||
@ -14,37 +13,38 @@ generate iterators that multiply (or add to) the value returned by
|
|||||||
dereferencing the iterator. It would be cooler to use lambda library
|
dereferencing the iterator. It would be cooler to use lambda library
|
||||||
in this example.
|
in this example.
|
||||||
|
|
||||||
int x[] = { 1, 2, 3, 4, 5, 6, 7, 8 };
|
int x[] = { 1, 2, 3, 4, 5, 6, 7, 8 };
|
||||||
const int N = sizeof(x)/sizeof(int);
|
const int N = sizeof(x)/sizeof(int);
|
||||||
|
|
||||||
typedef boost::binder1st< std::multiplies<int> > Function;
|
typedef boost::binder1st< std::multiplies<int> > Function;
|
||||||
typedef boost::transform_iterator<Function, int*> doubling_iterator;
|
typedef boost::transform_iterator<Function, int*> doubling_iterator;
|
||||||
|
|
||||||
doubling_iterator i(x, boost::bind1st(std::multiplies<int>(), 2)),
|
doubling_iterator i(x, boost::bind1st(std::multiplies<int>(), 2)),
|
||||||
i_end(x + N, boost::bind1st(std::multiplies<int>(), 2));
|
i_end(x + N, boost::bind1st(std::multiplies<int>(), 2));
|
||||||
|
|
||||||
std::cout << "multiplying the array by 2:" << std::endl;
|
std::cout << "multiplying the array by 2:" << std::endl;
|
||||||
while (i != i_end)
|
while (i != i_end)
|
||||||
std::cout << *i++ << " ";
|
std::cout << *i++ << " ";
|
||||||
std::cout << std::endl;
|
std::cout << std::endl;
|
||||||
|
|
||||||
std::cout << "adding 4 to each element in the array:" << std::endl;
|
std::cout << "adding 4 to each element in the array:" << std::endl;
|
||||||
std::copy(boost::make_transform_iterator(x, boost::bind1st(std::plus<int>(), 4)),
|
std::copy(boost::make_transform_iterator(x, boost::bind1st(std::plus<int>(), 4)),
|
||||||
boost::make_transform_iterator(x + N, boost::bind1st(std::plus<int>(), 4)),
|
boost::make_transform_iterator(x + N, boost::bind1st(std::plus<int>(), 4)),
|
||||||
std::ostream_iterator<int>(std::cout, " "));
|
std::ostream_iterator<int>(std::cout, " "));
|
||||||
std::cout << std::endl;
|
std::cout << std::endl;
|
||||||
|
|
||||||
|
|
||||||
The output is:
|
The output is:
|
||||||
|
|
||||||
multiplying the array by 2:
|
[pre
|
||||||
2 4 6 8 10 12 14 16
|
multiplying the array by 2:
|
||||||
adding 4 to each element in the array:
|
2 4 6 8 10 12 14 16
|
||||||
5 6 7 8 9 10 11 12
|
adding 4 to each element in the array:
|
||||||
|
5 6 7 8 9 10 11 12
|
||||||
|
]
|
||||||
|
|
||||||
|
The source code for this example can be found
|
||||||
The source code for this example can be found
|
[example_link transform_iterator_example.cpp..here].
|
||||||
[@../example/transform_iterator_example.cpp here].
|
|
||||||
|
|
||||||
[h2 Reference]
|
[h2 Reference]
|
||||||
|
|
||||||
@ -52,8 +52,8 @@ The source code for this example can be found
|
|||||||
[h3 Synopsis]
|
[h3 Synopsis]
|
||||||
|
|
||||||
template <class UnaryFunction,
|
template <class UnaryFunction,
|
||||||
class Iterator,
|
class Iterator,
|
||||||
class Reference = use_default,
|
class Reference = use_default,
|
||||||
class Value = use_default>
|
class Value = use_default>
|
||||||
class transform_iterator
|
class transform_iterator
|
||||||
{
|
{
|
||||||
@ -85,8 +85,8 @@ The source code for this example can be found
|
|||||||
|
|
||||||
|
|
||||||
If `Reference` is `use_default` then the `reference` member of
|
If `Reference` is `use_default` then the `reference` member of
|
||||||
`transform_iterator` is\n
|
`transform_iterator` is[br]
|
||||||
`result_of<UnaryFunction(iterator_traits<Iterator>::reference)>::type`.
|
`result_of<const UnaryFunction(iterator_traits<Iterator>::reference)>::type`.
|
||||||
Otherwise, `reference` is `Reference`.
|
Otherwise, `reference` is `Reference`.
|
||||||
|
|
||||||
|
|
||||||
@ -110,13 +110,13 @@ convertible to `input_iterator_tag`.
|
|||||||
|
|
||||||
|
|
||||||
The type `UnaryFunction` must be Assignable, Copy Constructible, and
|
The type `UnaryFunction` must be Assignable, Copy Constructible, and
|
||||||
the expression `f(*i)` must be valid where `f` is an object of
|
the expression `f(*i)` must be valid where `f` is a const object of
|
||||||
type `UnaryFunction`, `i` is an object of type `Iterator`, and
|
type `UnaryFunction`, `i` is an object of type `Iterator`, and
|
||||||
where the type of `f(*i)` must be
|
where the type of `f(*i)` must be
|
||||||
`result_of<UnaryFunction(iterator_traits<Iterator>::reference)>::type`.
|
`result_of<const UnaryFunction(iterator_traits<Iterator>::reference)>::type`.
|
||||||
|
|
||||||
|
|
||||||
The argument `Iterator` shall model Readable Iterator.
|
The argument `Iterator` shall model Readable Iterator.
|
||||||
|
|
||||||
|
|
||||||
[h3 Concepts]
|
[h3 Concepts]
|
||||||
@ -126,11 +126,11 @@ The resulting `transform_iterator` models the most refined of the
|
|||||||
following that is also modeled by `Iterator`.
|
following that is also modeled by `Iterator`.
|
||||||
|
|
||||||
|
|
||||||
* Writable Lvalue Iterator if `transform_iterator::reference` is a non-const reference.
|
* Writable Lvalue Iterator if `transform_iterator::reference` is a non-const reference.
|
||||||
|
|
||||||
* Readable Lvalue Iterator if `transform_iterator::reference` is a const reference.
|
* Readable Lvalue Iterator if `transform_iterator::reference` is a const reference.
|
||||||
|
|
||||||
* Readable Iterator otherwise.
|
* Readable Iterator otherwise.
|
||||||
|
|
||||||
|
|
||||||
The `transform_iterator` models the most refined standard traversal
|
The `transform_iterator` models the most refined standard traversal
|
||||||
@ -143,11 +143,11 @@ the `Iterator` argument models.
|
|||||||
|
|
||||||
|
|
||||||
[table Category
|
[table Category
|
||||||
[[If `Iterator` models][then `transform_iterator` models]]
|
[[If `Iterator` models][then `transform_iterator` models]]
|
||||||
[[Single Pass Iterator][Input Iterator]]
|
[[Single Pass Iterator][Input Iterator]]
|
||||||
[[Forward Traversal Iterator][Forward Iterator]]
|
[[Forward Traversal Iterator][Forward Iterator]]
|
||||||
[[Bidirectional Traversal Iterator][Bidirectional Iterator]]
|
[[Bidirectional Traversal Iterator][Bidirectional Iterator]]
|
||||||
[[Random Access Traversal Iterator][Random Access Iterator]]
|
[[Random Access Traversal Iterator][Random Access Iterator]]
|
||||||
]
|
]
|
||||||
|
|
||||||
If `transform_iterator` models Writable Lvalue Iterator then it is a
|
If `transform_iterator` models Writable Lvalue Iterator then it is a
|
||||||
@ -160,7 +160,7 @@ interoperable with `Y`.
|
|||||||
|
|
||||||
[h3 Operations]
|
[h3 Operations]
|
||||||
|
|
||||||
In addition to the operations required by the [link transform.concepts concepts] modeled by
|
In addition to the operations required by the [link iterator.specialized.transform.concepts concepts] modeled by
|
||||||
`transform_iterator`, `transform_iterator` provides the following
|
`transform_iterator`, `transform_iterator` provides the following
|
||||||
operations:
|
operations:
|
||||||
|
|
||||||
@ -177,13 +177,13 @@ operations:
|
|||||||
template<class F2, class I2, class R2, class V2>
|
template<class F2, class I2, class R2, class V2>
|
||||||
transform_iterator(
|
transform_iterator(
|
||||||
transform_iterator<F2, I2, R2, V2> const& t
|
transform_iterator<F2, I2, R2, V2> const& t
|
||||||
, typename enable_if_convertible<I2, Iterator>::type* = 0 // exposition only
|
, typename enable_if_convertible<I2, Iterator>::type* = 0 // exposition only
|
||||||
, typename enable_if_convertible<F2, UnaryFunction>::type* = 0 // exposition only
|
, typename enable_if_convertible<F2, UnaryFunction>::type* = 0 // exposition only
|
||||||
);
|
);
|
||||||
|
|
||||||
[*Returns: ] An instance of `transform_iterator` with `m_f`
|
[*Returns: ] An instance of `transform_iterator` with `m_f`
|
||||||
initialized to `t.functor()` and `m_iterator` initialized to
|
initialized to `t.functor()` and `m_iterator` initialized to
|
||||||
`t.base()`.\n
|
`t.base()`.[br]
|
||||||
[*Requires: ] `OtherIterator` is implicitly convertible to `Iterator`.
|
[*Requires: ] `OtherIterator` is implicitly convertible to `Iterator`.
|
||||||
|
|
||||||
|
|
||||||
@ -204,13 +204,13 @@ operations:
|
|||||||
|
|
||||||
transform_iterator& operator++();
|
transform_iterator& operator++();
|
||||||
|
|
||||||
[*Effects: ] `++m_iterator`\n
|
[*Effects: ] `++m_iterator`[br]
|
||||||
[*Returns: ] `*this`
|
[*Returns: ] `*this`
|
||||||
|
|
||||||
|
|
||||||
transform_iterator& operator--();
|
transform_iterator& operator--();
|
||||||
|
|
||||||
[*Effects: ] `--m_iterator`\n
|
[*Effects: ] `--m_iterator`[br]
|
||||||
[*Returns: ] `*this`
|
[*Returns: ] `*this`
|
||||||
|
|
||||||
[endsect]
|
[endsect]
|
||||||
|
211
doc/quickbook/type_traits.qbk
Normal file
211
doc/quickbook/type_traits.qbk
Normal file
@ -0,0 +1,211 @@
|
|||||||
|
[section:traits Type Traits]
|
||||||
|
|
||||||
|
[h2 Overview]
|
||||||
|
|
||||||
|
Have you ever wanted to write a generic function that can operate
|
||||||
|
on any kind of dereferenceable object? If you have, you've
|
||||||
|
probably run into the problem of how to determine the type that the
|
||||||
|
object "points at":
|
||||||
|
|
||||||
|
template <class Dereferenceable>
|
||||||
|
void f(Dereferenceable p)
|
||||||
|
{
|
||||||
|
*what-goes-here?* value = \*p;
|
||||||
|
...
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
[h2 `pointee`]
|
||||||
|
|
||||||
|
It turns out to be impossible to come up with a fully-general
|
||||||
|
algorithm to do determine *what-goes-here* directly, but it is
|
||||||
|
possible to require that `pointee<Dereferenceable>::type` is
|
||||||
|
correct. Naturally, `pointee` has the same difficulty: it can't
|
||||||
|
determine the appropriate `::type` reliably for all
|
||||||
|
`Dereferenceable`\ s, but it makes very good guesses (it works
|
||||||
|
for all pointers, standard and boost smart pointers, and
|
||||||
|
iterators), and when it guesses wrongly, it can be specialized as
|
||||||
|
necessary:
|
||||||
|
|
||||||
|
namespace boost
|
||||||
|
{
|
||||||
|
template <class T>
|
||||||
|
struct pointee<third_party_lib::smart_pointer<T> >
|
||||||
|
{
|
||||||
|
typedef T type;
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
[h2 `indirect_reference`]
|
||||||
|
|
||||||
|
`indirect_reference<T>::type` is rather more specialized than
|
||||||
|
`pointee`, and is meant to be used to forward the result of
|
||||||
|
dereferencing an object of its argument type. Most dereferenceable
|
||||||
|
types just return a reference to their pointee, but some return
|
||||||
|
proxy references or return the pointee by value. When that
|
||||||
|
information is needed, call on `indirect_reference`.
|
||||||
|
|
||||||
|
Both of these templates are essential to the correct functioning of
|
||||||
|
[link iterator.specialized.indirect `indirect_iterator`].
|
||||||
|
|
||||||
|
[h2 `minimum_category`]
|
||||||
|
|
||||||
|
`minimum_category` takes two iterator categories or two iterator traversal tags
|
||||||
|
and returns the one that is the weakest (i.e. least advanced). For example:
|
||||||
|
|
||||||
|
static_assert(
|
||||||
|
is_same<
|
||||||
|
minimum_category<
|
||||||
|
std::forward_iterator_tag,
|
||||||
|
std::random_access_iterator_tag
|
||||||
|
>::type,
|
||||||
|
std::forward_iterator_tag
|
||||||
|
>::value,
|
||||||
|
"Unexpected minimum_category result"
|
||||||
|
);
|
||||||
|
|
||||||
|
[h2 Iterator category and traversal tags manipulation]
|
||||||
|
|
||||||
|
The library provides several utilities to simplify conversions between iterator categories
|
||||||
|
and traversal tags:
|
||||||
|
|
||||||
|
* `iterator_category_to_traversal<C>::type` - the metafunction takes an iterator category `C` and returns
|
||||||
|
the corresponding traversal tag.
|
||||||
|
* `iterator_traversal<T>::type` - a shorthand for `iterator_category_to_traversal<iterator_category<T>::type>::type`.
|
||||||
|
* `pure_traversal_tag<T>::type` - the metafunction takes a tag `T` which derives from one of the iterator traversal tags
|
||||||
|
and returns that traversal tag. `T` may also derive from other tags describing the iterator (e.g. whether this is a `const`-iterator
|
||||||
|
or not), these additional tags are not considered.
|
||||||
|
* `pure_iterator_traversal<T>::type` - a shorthand for `pure_traversal_tag<iterator_traversal<T>::type>::type`.
|
||||||
|
|
||||||
|
[h2 Reference]
|
||||||
|
|
||||||
|
[h3 `pointee`]
|
||||||
|
|
||||||
|
template <class Dereferenceable>
|
||||||
|
struct pointee
|
||||||
|
{
|
||||||
|
typedef /* see below */ type;
|
||||||
|
};
|
||||||
|
|
||||||
|
[*Requires:] For an object `x` of type `Dereferenceable`, `*x`
|
||||||
|
is well-formed. If `++x` is ill-formed it shall neither be
|
||||||
|
ambiguous nor shall it violate access control, and
|
||||||
|
`Dereferenceable::element_type` shall be an accessible type.
|
||||||
|
Otherwise `iterator_traits<Dereferenceable>::value_type` shall
|
||||||
|
be well formed. \[Note: These requirements need not apply to
|
||||||
|
explicit or partial specializations of `pointee`\]
|
||||||
|
|
||||||
|
`type` is determined according to the following algorithm, where
|
||||||
|
`x` is an object of type `Dereferenceable`:
|
||||||
|
|
||||||
|
if ( ++x is ill-formed )
|
||||||
|
{
|
||||||
|
return Dereferenceable::element_type
|
||||||
|
}
|
||||||
|
else if (*x is a mutable reference to
|
||||||
|
std::iterator_traits<Dereferenceable>::value_type)
|
||||||
|
{
|
||||||
|
return iterator_traits<Dereferenceable>::value_type
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
return iterator_traits<Dereferenceable>::value_type const
|
||||||
|
}
|
||||||
|
|
||||||
|
[h3 `indirect_reference`]
|
||||||
|
|
||||||
|
template <class Dereferenceable>
|
||||||
|
struct indirect_reference
|
||||||
|
{
|
||||||
|
typedef /* see below */ type;
|
||||||
|
};
|
||||||
|
|
||||||
|
[*Requires:] For an object `x` of type `Dereferenceable`, `*x`
|
||||||
|
is well-formed. If `++x` is ill-formed it shall neither be
|
||||||
|
ambiguous nor shall it violate access control, and
|
||||||
|
`pointee<Dereferenceable>::type&` shall be well-formed.
|
||||||
|
Otherwise `iterator_traits<Dereferenceable>::reference` shall
|
||||||
|
be well formed. \[Note: These requirements need not apply to
|
||||||
|
explicit or partial specializations of `indirect_reference`\]
|
||||||
|
|
||||||
|
`type` is determined according to the following algorithm, where
|
||||||
|
`x` is an object of type `Dereferenceable`:
|
||||||
|
|
||||||
|
if ( ++x is ill-formed )
|
||||||
|
return pointee<Dereferenceable>::type&
|
||||||
|
else
|
||||||
|
std::iterator_traits<Dereferenceable>::reference
|
||||||
|
|
||||||
|
[h3 `minimum_category`]
|
||||||
|
|
||||||
|
template <typename C1, typename C2>
|
||||||
|
struct minimum_category
|
||||||
|
{
|
||||||
|
typedef /* see below */ type;
|
||||||
|
};
|
||||||
|
|
||||||
|
[*Requires:] Both `C1` and `C2` shall be standard iterator categories or
|
||||||
|
iterator traversal tags.
|
||||||
|
|
||||||
|
`type` is determined according to the following algorithm, where `c1` is an
|
||||||
|
object of type `C1` and `c2` is an object of type `C2`:
|
||||||
|
|
||||||
|
if (c1 is convertible to c2)
|
||||||
|
return C2;
|
||||||
|
else
|
||||||
|
return C1;
|
||||||
|
|
||||||
|
[note The above definition relies on the fact that the more restricting categories
|
||||||
|
and traversal tags are convertible to the less restricting ones.]
|
||||||
|
|
||||||
|
[h3 `iterator_category_to_traversal`]
|
||||||
|
|
||||||
|
template <typename C>
|
||||||
|
struct iterator_category_to_traversal
|
||||||
|
{
|
||||||
|
typedef /* see below */ type;
|
||||||
|
};
|
||||||
|
|
||||||
|
[*Requires:] `C` shall be a standard iterator category or an
|
||||||
|
iterator traversal tag.
|
||||||
|
|
||||||
|
If `C` is an iterator traversal tag or convertible to one, `type` equivalent to `C`.
|
||||||
|
Otherwise, `type` is defined to the closest iterator traversal tag matching `C`.
|
||||||
|
|
||||||
|
[h3 `iterator_traversal`]
|
||||||
|
|
||||||
|
template <typename Iterator>
|
||||||
|
struct iterator_traversal
|
||||||
|
{
|
||||||
|
typedef typename iterator_category_to_traversal<
|
||||||
|
typename iterator_category<Iterator>::type
|
||||||
|
>::type type;
|
||||||
|
};
|
||||||
|
|
||||||
|
[*Requires:] `Iterator` shall be an iterator.
|
||||||
|
|
||||||
|
[h3 `pure_traversal_tag`]
|
||||||
|
|
||||||
|
template <typename T>
|
||||||
|
struct pure_traversal_tag
|
||||||
|
{
|
||||||
|
typedef /* see below */ type;
|
||||||
|
};
|
||||||
|
|
||||||
|
[*Requires:] `T` shall be convertible to an iterator traversal tag.
|
||||||
|
|
||||||
|
`type` is defined to be the most advanced traversal tag `Tag` so that `T` is convertible to `Tag`.
|
||||||
|
|
||||||
|
[h3 `pure_iterator_traversal`]
|
||||||
|
|
||||||
|
template <typename Iterator>
|
||||||
|
struct pure_iterator_traversal
|
||||||
|
{
|
||||||
|
typedef typename pure_traversal_tag<
|
||||||
|
typename iterator_traversal<Iterator>::type
|
||||||
|
>::type type;
|
||||||
|
};
|
||||||
|
|
||||||
|
[*Requires:] `Iterator` shall be an iterator.
|
||||||
|
|
||||||
|
[endsect]
|
@ -1,224 +0,0 @@
|
|||||||
|
|
||||||
[section:utilities Iterator Utilities]
|
|
||||||
|
|
||||||
[section:utilities_traits Traits]
|
|
||||||
|
|
||||||
[h2 Overview]
|
|
||||||
|
|
||||||
Have you ever wanted to write a generic function that can operate
|
|
||||||
on any kind of dereferenceable object? If you have, you've
|
|
||||||
probably run into the problem of how to determine the type that the
|
|
||||||
object "points at":
|
|
||||||
|
|
||||||
template <class Dereferenceable>
|
|
||||||
void f(Dereferenceable p)
|
|
||||||
{
|
|
||||||
*what-goes-here?* value = \*p;
|
|
||||||
...
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
[h2 `pointee`]
|
|
||||||
|
|
||||||
It turns out to be impossible to come up with a fully-general
|
|
||||||
algorithm to do determine *what-goes-here* directly, but it is
|
|
||||||
possible to require that `pointee<Dereferenceable>::type` is
|
|
||||||
correct. Naturally, `pointee` has the same difficulty: it can't
|
|
||||||
determine the appropriate `::type` reliably for all
|
|
||||||
`Dereferenceable`\ s, but it makes very good guesses (it works
|
|
||||||
for all pointers, standard and boost smart pointers, and
|
|
||||||
iterators), and when it guesses wrongly, it can be specialized as
|
|
||||||
necessary:
|
|
||||||
|
|
||||||
namespace boost
|
|
||||||
{
|
|
||||||
template <class T>
|
|
||||||
struct pointee<third_party_lib::smart_pointer<T> >
|
|
||||||
{
|
|
||||||
typedef T type;
|
|
||||||
};
|
|
||||||
}
|
|
||||||
|
|
||||||
[h2 `indirect_reference`]
|
|
||||||
|
|
||||||
`indirect_reference<T>::type` is rather more specialized than
|
|
||||||
`pointee`, and is meant to be used to forward the result of
|
|
||||||
dereferencing an object of its argument type. Most dereferenceable
|
|
||||||
types just return a reference to their pointee, but some return
|
|
||||||
proxy references or return the pointee by value. When that
|
|
||||||
information is needed, call on `indirect_reference`.
|
|
||||||
|
|
||||||
Both of these templates are essential to the correct functioning of
|
|
||||||
[link indirecct `indirect_iterator`].
|
|
||||||
|
|
||||||
[h2 Reference]
|
|
||||||
|
|
||||||
[h3 `pointeee`]
|
|
||||||
|
|
||||||
template <class Dereferenceable>
|
|
||||||
struct pointee
|
|
||||||
{
|
|
||||||
typedef /* see below */ type;
|
|
||||||
};
|
|
||||||
|
|
||||||
[*Requires:] For an object `x` of type `Dereferenceable`, `*x`
|
|
||||||
is well-formed. If `++x` is ill-formed it shall neither be
|
|
||||||
ambiguous nor shall it violate access control, and
|
|
||||||
`Dereferenceable::element_type` shall be an accessible type.
|
|
||||||
Otherwise `iterator_traits<Dereferenceable>::value_type` shall
|
|
||||||
be well formed. \[Note: These requirements need not apply to
|
|
||||||
explicit or partial specializations of `pointee`\]
|
|
||||||
|
|
||||||
`type` is determined according to the following algorithm, where
|
|
||||||
`x` is an object of type `Dereferenceable`:
|
|
||||||
|
|
||||||
if ( ++x is ill-formed )
|
|
||||||
{
|
|
||||||
return `Dereferenceable::element_type`
|
|
||||||
}
|
|
||||||
else if (`*x` is a mutable reference to
|
|
||||||
std::iterator_traits<Dereferenceable>::value_type)
|
|
||||||
{
|
|
||||||
return iterator_traits<Dereferenceable>::value_type
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
return iterator_traits<Dereferenceable>::value_type const
|
|
||||||
}
|
|
||||||
|
|
||||||
[h3 `indirect_reference`]
|
|
||||||
|
|
||||||
template <class Dereferenceable>
|
|
||||||
struct indirect_reference
|
|
||||||
{
|
|
||||||
typedef /* see below */ type;
|
|
||||||
};
|
|
||||||
|
|
||||||
[*Requires:] For an object `x` of type `Dereferenceable`, `*x`
|
|
||||||
is well-formed. If `++x` is ill-formed it shall neither be
|
|
||||||
ambiguous nor shall it violate access control, and
|
|
||||||
`pointee<Dereferenceable>::type&` shall be well-formed.
|
|
||||||
Otherwise `iterator_traits<Dereferenceable>::reference` shall
|
|
||||||
be well formed. \[Note: These requirements need not apply to
|
|
||||||
explicit or partial specializations of `indirect_reference`\]
|
|
||||||
|
|
||||||
`type` is determined according to the following algorithm, where
|
|
||||||
`x` is an object of type `Dereferenceable`:
|
|
||||||
|
|
||||||
if ( ++x is ill-formed )
|
|
||||||
return `pointee<Dereferenceable>::type&`
|
|
||||||
else
|
|
||||||
std::iterator_traits<Dereferenceable>::reference
|
|
||||||
|
|
||||||
|
|
||||||
[endsect]
|
|
||||||
|
|
||||||
[section:utilities_testing Testing and Concept Checking]
|
|
||||||
|
|
||||||
The iterator concept checking classes provide a mechanism for a
|
|
||||||
template to report better error messages when a user instantiates
|
|
||||||
the template with a type that does not meet the requirements of the
|
|
||||||
template.
|
|
||||||
|
|
||||||
For an introduction to using concept checking classes, see
|
|
||||||
the documentation for the
|
|
||||||
[@../../concept_check/index.html `boost::concept_check`] library.
|
|
||||||
|
|
||||||
|
|
||||||
[h2 Reference]
|
|
||||||
|
|
||||||
[h3 Iterator Access Concepts]
|
|
||||||
|
|
||||||
* |Readable|_
|
|
||||||
* |Writable|_
|
|
||||||
* |Swappable|_
|
|
||||||
* |Lvalue|_
|
|
||||||
|
|
||||||
[/ .. |Readable| replace:: *Readable Iterator* ]
|
|
||||||
[/ .. _Readable: ReadableIterator.html ]
|
|
||||||
[/ ]
|
|
||||||
[/ .. |Writable| replace:: *Writable Iterator* ]
|
|
||||||
[/ .. _Writable: WritableIterator.html ]
|
|
||||||
[/ ]
|
|
||||||
[/ .. |Swappable| replace:: *Swappable Iterator* ]
|
|
||||||
[/ .. _Swappable: SwappableIterator.html ]
|
|
||||||
[/ ]
|
|
||||||
[/ .. |Lvalue| replace:: *Lvalue Iterator* ]
|
|
||||||
[/ .. _Lvalue: LvalueIterator.html ]
|
|
||||||
|
|
||||||
|
|
||||||
Iterator Traversal Concepts
|
|
||||||
...........................
|
|
||||||
|
|
||||||
* |Incrementable|_
|
|
||||||
* |SinglePass|_
|
|
||||||
* |Forward|_
|
|
||||||
* |Bidir|_
|
|
||||||
* |Random|_
|
|
||||||
|
|
||||||
|
|
||||||
[/ .. |Incrementable| replace:: *Incrementable Iterator* ]
|
|
||||||
[/ .. _Incrementable: IncrementableIterator.html ]
|
|
||||||
[/ ]
|
|
||||||
[/ .. |SinglePass| replace:: *Single Pass Iterator* ]
|
|
||||||
[/ .. _SinglePass: SinglePassIterator.html ]
|
|
||||||
[/ ]
|
|
||||||
[/ .. |Forward| replace:: *Forward Traversal* ]
|
|
||||||
[/ .. _Forward: ForwardTraversal.html ]
|
|
||||||
[/ ]
|
|
||||||
[/ .. |Bidir| replace:: *Bidirectional Traversal* ]
|
|
||||||
[/ .. _Bidir: BidirectionalTraversal.html ]
|
|
||||||
[/ ]
|
|
||||||
[/ .. |Random| replace:: *Random Access Traversal* ]
|
|
||||||
[/ .. _Random: RandomAccessTraversal.html ]
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
[h3 `iterator_concepts.hpp` Synopsis]
|
|
||||||
|
|
||||||
namespace boost_concepts {
|
|
||||||
|
|
||||||
// Iterator Access Concepts
|
|
||||||
|
|
||||||
template <typename Iterator>
|
|
||||||
class ReadableIteratorConcept;
|
|
||||||
|
|
||||||
template <
|
|
||||||
typename Iterator
|
|
||||||
, typename ValueType = std::iterator_traits<Iterator>::value_type
|
|
||||||
>
|
|
||||||
class WritableIteratorConcept;
|
|
||||||
|
|
||||||
template <typename Iterator>
|
|
||||||
class SwappableIteratorConcept;
|
|
||||||
|
|
||||||
template <typename Iterator>
|
|
||||||
class LvalueIteratorConcept;
|
|
||||||
|
|
||||||
// Iterator Traversal Concepts
|
|
||||||
|
|
||||||
template <typename Iterator>
|
|
||||||
class IncrementableIteratorConcept;
|
|
||||||
|
|
||||||
template <typename Iterator>
|
|
||||||
class SinglePassIteratorConcept;
|
|
||||||
|
|
||||||
template <typename Iterator>
|
|
||||||
class ForwardTraversalConcept;
|
|
||||||
|
|
||||||
template <typename Iterator>
|
|
||||||
class BidirectionalTraversalConcept;
|
|
||||||
|
|
||||||
template <typename Iterator>
|
|
||||||
class RandomAccessTraversalConcept;
|
|
||||||
|
|
||||||
// Interoperability
|
|
||||||
|
|
||||||
template <typename Iterator, typename ConstIterator>
|
|
||||||
class InteroperableIteratorConcept;
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
[endsect]
|
|
||||||
|
|
||||||
[endsect]
|
|
@ -1,20 +1,29 @@
|
|||||||
|
|
||||||
[section:zip Zip Iterator]
|
[section:zip Zip Iterator]
|
||||||
|
|
||||||
The zip iterator provides the ability to parallel-iterate
|
The zip iterator provides the ability to parallel-iterate
|
||||||
over several controlled sequences simultaneously. A zip
|
over several controlled sequences simultaneously. A zip
|
||||||
iterator is constructed from a tuple of iterators. Moving
|
iterator is constructed from a tuple of iterators. Moving
|
||||||
the zip iterator moves all the iterators in parallel.
|
the zip iterator moves all the iterators in parallel.
|
||||||
Dereferencing the zip iterator returns a tuple that contains
|
Dereferencing the zip iterator returns a tuple that contains
|
||||||
the results of dereferencing the individual iterators.
|
the results of dereferencing the individual iterators.
|
||||||
|
|
||||||
|
The tuple of iterators is now implemented in terms of a Boost fusion sequence.
|
||||||
|
Because of this the 'tuple' may be any Boost fusion sequence and, for backwards
|
||||||
|
compatibility through a Boost fusion sequence adapter, a Boost tuple. Because the
|
||||||
|
'tuple' may be any boost::fusion sequence the 'tuple' may also be any type for which a
|
||||||
|
Boost fusion adapter exists. This includes, among others, a std::tuple and a std::pair.
|
||||||
|
Just remember to include the appropriate Boost fusion adapter header files for these
|
||||||
|
other Boost fusion adapters. The zip_iterator header file already includes the
|
||||||
|
Boost fusion adapter header file for Boost tuple, so you need not include it yourself
|
||||||
|
to use a Boost tuple as your 'tuple'.
|
||||||
|
|
||||||
[section:zip_example Example]
|
[section:zip_example Example]
|
||||||
|
|
||||||
There are two main types of applications of the `zip_iterator`. The first
|
There are two main types of applications of the `zip_iterator`. The first
|
||||||
one concerns runtime efficiency: If one has several controlled sequences
|
one concerns runtime efficiency: If one has several controlled sequences
|
||||||
of the same length that must be somehow processed, e.g., with the
|
of the same length that must be somehow processed, e.g., with the
|
||||||
`for_each` algorithm, then it is more efficient to perform just
|
`for_each` algorithm, then it is more efficient to perform just
|
||||||
one parallel-iteration rather than several individual iterations. For an
|
one parallel-iteration rather than several individual iterations. For an
|
||||||
example, assume that `vect_of_doubles` and `vect_of_ints`
|
example, assume that `vect_of_doubles` and `vect_of_ints`
|
||||||
are two vectors of equal length containing doubles and ints, respectively,
|
are two vectors of equal length containing doubles and ints, respectively,
|
||||||
and consider the following two iterations:
|
and consider the following two iterations:
|
||||||
@ -43,7 +52,7 @@ These two iterations can now be replaced with a single one as follows:
|
|||||||
A non-generic implementation of `zip_func` could look as follows:
|
A non-generic implementation of `zip_func` could look as follows:
|
||||||
|
|
||||||
|
|
||||||
struct zip_func :
|
struct zip_func :
|
||||||
public std::unary_function<const boost::tuple<const double&, const int&>&, void>
|
public std::unary_function<const boost::tuple<const double&, const int&>&, void>
|
||||||
{
|
{
|
||||||
void operator()(const boost::tuple<const double&, const int&>& t) const
|
void operator()(const boost::tuple<const double&, const int&>& t) const
|
||||||
@ -62,16 +71,16 @@ to make combining iterators. A combining iterator is an iterator
|
|||||||
that parallel-iterates over several controlled sequences and, upon
|
that parallel-iterates over several controlled sequences and, upon
|
||||||
dereferencing, returns the result of applying a functor to the values of the
|
dereferencing, returns the result of applying a functor to the values of the
|
||||||
sequences at the respective positions. This can now be achieved by using the
|
sequences at the respective positions. This can now be achieved by using the
|
||||||
`zip_iterator` in conjunction with the `transform_iterator`.
|
`zip_iterator` in conjunction with the `transform_iterator`.
|
||||||
|
|
||||||
Suppose, for example, that you have two vectors of doubles, say
|
Suppose, for example, that you have two vectors of doubles, say
|
||||||
`vect_1` and `vect_2`, and you need to expose to a client
|
`vect_1` and `vect_2`, and you need to expose to a client
|
||||||
a controlled sequence containing the products of the elements of
|
a controlled sequence containing the products of the elements of
|
||||||
`vect_1` and `vect_2`. Rather than placing these products
|
`vect_1` and `vect_2`. Rather than placing these products
|
||||||
in a third vector, you can use a combining iterator that calculates the
|
in a third vector, you can use a combining iterator that calculates the
|
||||||
products on the fly. Let us assume that `tuple_multiplies` is a
|
products on the fly. Let us assume that `tuple_multiplies` is a
|
||||||
functor that works like `std::multiplies`, except that it takes
|
functor that works like `std::multiplies`, except that it takes
|
||||||
its two arguments packaged in a tuple. Then the two iterators
|
its two arguments packaged in a tuple. Then the two iterators
|
||||||
`it_begin` and `it_end` defined below delimit a controlled
|
`it_begin` and `it_end` defined below delimit a controlled
|
||||||
sequence containing the products of the elements of `vect_1` and
|
sequence containing the products of the elements of `vect_1` and
|
||||||
`vect_2`:
|
`vect_2`:
|
||||||
@ -118,7 +127,7 @@ sequence containing the products of the elements of `vect_1` and
|
|||||||
|
|
||||||
template<typename IteratorTuple>
|
template<typename IteratorTuple>
|
||||||
class zip_iterator
|
class zip_iterator
|
||||||
{
|
{
|
||||||
|
|
||||||
public:
|
public:
|
||||||
typedef /* see below */ reference;
|
typedef /* see below */ reference;
|
||||||
@ -144,8 +153,8 @@ sequence containing the products of the elements of `vect_1` and
|
|||||||
IteratorTuple m_iterator_tuple; // exposition only
|
IteratorTuple m_iterator_tuple; // exposition only
|
||||||
};
|
};
|
||||||
|
|
||||||
template<typename IteratorTuple>
|
template<typename IteratorTuple>
|
||||||
zip_iterator<IteratorTuple>
|
zip_iterator<IteratorTuple>
|
||||||
make_zip_iterator(IteratorTuple t);
|
make_zip_iterator(IteratorTuple t);
|
||||||
|
|
||||||
The `reference` member of `zip_iterator` is the type of the tuple
|
The `reference` member of `zip_iterator` is the type of the tuple
|
||||||
@ -158,23 +167,23 @@ of the first of the iterator types in the `IteratorTuple` argument.
|
|||||||
The `iterator_category` member of `zip_iterator` is convertible to the
|
The `iterator_category` member of `zip_iterator` is convertible to the
|
||||||
minimum of the traversal categories of the iterator types in the `IteratorTuple`
|
minimum of the traversal categories of the iterator types in the `IteratorTuple`
|
||||||
argument. For example, if the `zip_iterator` holds only vector
|
argument. For example, if the `zip_iterator` holds only vector
|
||||||
iterators, then `iterator_category` is convertible to
|
iterators, then `iterator_category` is convertible to
|
||||||
`boost::random_access_traversal_tag`. If you add a list iterator, then
|
`boost::random_access_traversal_tag`. If you add a list iterator, then
|
||||||
`iterator_category` will be convertible to `boost::bidirectional_traversal_tag`,
|
`iterator_category` will be convertible to `boost::bidirectional_traversal_tag`,
|
||||||
but no longer to `boost::random_access_traversal_tag`.
|
but no longer to `boost::random_access_traversal_tag`.
|
||||||
|
|
||||||
[h2 Requirements]
|
[h2 Requirements]
|
||||||
|
|
||||||
All iterator types in the argument `IteratorTuple` shall model Readable Iterator.
|
All iterator types in the argument `IteratorTuple` shall model Readable Iterator.
|
||||||
|
|
||||||
[h2 Concepts]
|
[h2 Concepts]
|
||||||
|
|
||||||
The resulting `zip_iterator` models Readable Iterator.
|
The resulting `zip_iterator` models Readable Iterator.
|
||||||
|
|
||||||
The fact that the `zip_iterator` models only Readable Iterator does not
|
The fact that the `zip_iterator` models only Readable Iterator does not
|
||||||
prevent you from modifying the values that the individual iterators point
|
prevent you from modifying the values that the individual iterators point
|
||||||
to. The tuple returned by the `zip_iterator`'s `operator*` is a tuple
|
to. The tuple returned by the `zip_iterator`'s `operator*` is a tuple
|
||||||
constructed from the reference types of the individual iterators, not
|
constructed from the reference types of the individual iterators, not
|
||||||
their value types. For example, if `zip_it` is a `zip_iterator` whose
|
their value types. For example, if `zip_it` is a `zip_iterator` whose
|
||||||
first member iterator is an `std::vector<double>::iterator`, then the
|
first member iterator is an `std::vector<double>::iterator`, then the
|
||||||
following line will modify the value which the first member iterator of
|
following line will modify the value which the first member iterator of
|
||||||
@ -185,7 +194,7 @@ following line will modify the value which the first member iterator of
|
|||||||
|
|
||||||
Consider the set of standard traversal concepts obtained by taking
|
Consider the set of standard traversal concepts obtained by taking
|
||||||
the most refined standard traversal concept modeled by each individual
|
the most refined standard traversal concept modeled by each individual
|
||||||
iterator type in the `IteratorTuple` argument.The `zip_iterator`
|
iterator type in the `IteratorTuple` argument.The `zip_iterator`
|
||||||
models the least refined standard traversal concept in this set.
|
models the least refined standard traversal concept in this set.
|
||||||
|
|
||||||
`zip_iterator<IteratorTuple1>` is interoperable with
|
`zip_iterator<IteratorTuple1>` is interoperable with
|
||||||
@ -218,7 +227,7 @@ operations.
|
|||||||
, IteratorTuple>::type* = 0 // exposition only
|
, IteratorTuple>::type* = 0 // exposition only
|
||||||
);
|
);
|
||||||
|
|
||||||
[*Returns:] An instance of `zip_iterator` that is a copy of `other`.\n
|
[*Returns:] An instance of `zip_iterator` that is a copy of `other`.[br]
|
||||||
[*Requires:] `OtherIteratorTuple` is implicitly convertible to `IteratorTuple`.
|
[*Requires:] `OtherIteratorTuple` is implicitly convertible to `IteratorTuple`.
|
||||||
|
|
||||||
|
|
||||||
@ -235,17 +244,17 @@ operations.
|
|||||||
|
|
||||||
zip_iterator& operator++();
|
zip_iterator& operator++();
|
||||||
|
|
||||||
[*Effects:] Increments each iterator in `m_iterator_tuple`.\n
|
[*Effects:] Increments each iterator in `m_iterator_tuple`.[br]
|
||||||
[*Returns:] `*this`
|
[*Returns:] `*this`
|
||||||
|
|
||||||
|
|
||||||
zip_iterator& operator--();
|
zip_iterator& operator--();
|
||||||
|
|
||||||
[*Effects:] Decrements each iterator in `m_iterator_tuple`.\n
|
[*Effects:] Decrements each iterator in `m_iterator_tuple`.[br]
|
||||||
[*Returns:] `*this`
|
[*Returns:] `*this`
|
||||||
|
|
||||||
template<typename IteratorTuple>
|
template<typename IteratorTuple>
|
||||||
zip_iterator<IteratorTuple>
|
zip_iterator<IteratorTuple>
|
||||||
make_zip_iterator(IteratorTuple t);
|
make_zip_iterator(IteratorTuple t);
|
||||||
|
|
||||||
[*Returns:] An instance of `zip_iterator<IteratorTuple>` with `m_iterator_tuple`
|
[*Returns:] An instance of `zip_iterator<IteratorTuple>` with `m_iterator_tuple`
|
||||||
@ -253,4 +262,4 @@ operations.
|
|||||||
|
|
||||||
[endsect]
|
[endsect]
|
||||||
|
|
||||||
[endsect]
|
[endsect]
|
||||||
|
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user