1 // Written in the D programming language.
2 
3 /**
4 This package implements generic algorithms oriented towards the processing of
5 sequences. Sequences processed by these functions define range-based
6 interfaces.  See also $(MREF_ALTTEXT Reference on ranges, std, range) and
7 $(HTTP ddili.org/ders/d.en/ranges.html, tutorial on ranges).
8 
9 $(SCRIPT inhibitQuickIndex = 1;)
10 
11 Algorithms are categorized into the following submodules:
12 
13 $(DIVC quickindex,
14 $(BOOKTABLE ,
15 $(TR $(TH Submodule) $(TH Functions)
16 )
17 $(TR
18      $(TDNW $(SUBMODULE Searching, searching))
19      $(TD
20         $(SUBREF searching, all)
21         $(SUBREF searching, any)
22         $(SUBREF searching, balancedParens)
23         $(SUBREF searching, boyerMooreFinder)
24         $(SUBREF searching, canFind)
25         $(SUBREF searching, commonPrefix)
26         $(SUBREF searching, count)
27         $(SUBREF searching, countUntil)
28         $(SUBREF searching, endsWith)
29         $(SUBREF searching, find)
30         $(SUBREF searching, findAdjacent)
31         $(SUBREF searching, findAmong)
32         $(SUBREF searching, findSkip)
33         $(SUBREF searching, findSplit)
34         $(SUBREF searching, findSplitAfter)
35         $(SUBREF searching, findSplitBefore)
36         $(SUBREF searching, minCount)
37         $(SUBREF searching, maxCount)
38         $(SUBREF searching, minElement)
39         $(SUBREF searching, maxElement)
40         $(SUBREF searching, minIndex)
41         $(SUBREF searching, maxIndex)
42         $(SUBREF searching, minPos)
43         $(SUBREF searching, maxPos)
44         $(SUBREF searching, skipOver)
45         $(SUBREF searching, startsWith)
46         $(SUBREF searching, until)
47     )
48 )
49 $(TR
50     $(TDNW $(SUBMODULE Comparison, comparison))
51     $(TD
52         $(SUBREF comparison, among)
53         $(SUBREF comparison, castSwitch)
54         $(SUBREF comparison, clamp)
55         $(SUBREF comparison, cmp)
56         $(SUBREF comparison, either)
57         $(SUBREF comparison, equal)
58         $(SUBREF comparison, isPermutation)
59         $(SUBREF comparison, isSameLength)
60         $(SUBREF comparison, levenshteinDistance)
61         $(SUBREF comparison, levenshteinDistanceAndPath)
62         $(SUBREF comparison, max)
63         $(SUBREF comparison, min)
64         $(SUBREF comparison, mismatch)
65         $(SUBREF comparison, predSwitch)
66     )
67 )
68 $(TR
69     $(TDNW $(SUBMODULE Iteration, iteration))
70     $(TD
71         $(SUBREF iteration, cache)
72         $(SUBREF iteration, cacheBidirectional)
73         $(SUBREF iteration, chunkBy)
74         $(SUBREF iteration, cumulativeFold)
75         $(SUBREF iteration, each)
76         $(SUBREF iteration, filter)
77         $(SUBREF iteration, filterBidirectional)
78         $(SUBREF iteration, fold)
79         $(SUBREF iteration, group)
80         $(SUBREF iteration, joiner)
81         $(SUBREF iteration, map)
82         $(SUBREF iteration, permutations)
83         $(SUBREF iteration, reduce)
84         $(SUBREF iteration, splitter)
85         $(SUBREF iteration, sum)
86         $(SUBREF iteration, uniq)
87     )
88 )
89 $(TR
90     $(TDNW $(SUBMODULE Sorting, sorting))
91     $(TD
92         $(SUBREF sorting, completeSort)
93         $(SUBREF sorting, isPartitioned)
94         $(SUBREF sorting, isSorted)
95         $(SUBREF sorting, isStrictlyMonotonic)
96         $(SUBREF sorting, ordered)
97         $(SUBREF sorting, strictlyOrdered)
98         $(SUBREF sorting, makeIndex)
99         $(SUBREF sorting, merge)
100         $(SUBREF sorting, multiSort)
101         $(SUBREF sorting, nextEvenPermutation)
102         $(SUBREF sorting, nextPermutation)
103         $(SUBREF sorting, partialSort)
104         $(SUBREF sorting, partition)
105         $(SUBREF sorting, partition3)
106         $(SUBREF sorting, schwartzSort)
107         $(SUBREF sorting, sort)
108         $(SUBREF sorting, topN)
109         $(SUBREF sorting, topNCopy)
110         $(SUBREF sorting, topNIndex)
111     )
112 )
113 $(TR
114     $(TDNW Set operations $(BR)($(SUBMODULE setops, setops)))
115     $(TD
116         $(SUBREF setops, cartesianProduct)
117         $(SUBREF setops, largestPartialIntersection)
118         $(SUBREF setops, largestPartialIntersectionWeighted)
119         $(SUBREF setops, multiwayMerge)
120         $(SUBREF setops, multiwayUnion)
121         $(SUBREF setops, setDifference)
122         $(SUBREF setops, setIntersection)
123         $(SUBREF setops, setSymmetricDifference)
124     )
125 )
126 $(TR
127     $(TDNW $(SUBMODULE Mutation, mutation))
128     $(TD
129         $(SUBREF mutation, bringToFront)
130         $(SUBREF mutation, copy)
131         $(SUBREF mutation, fill)
132         $(SUBREF mutation, initializeAll)
133         $(SUBREF mutation, move)
134         $(SUBREF mutation, moveAll)
135         $(SUBREF mutation, moveSome)
136         $(SUBREF mutation, moveEmplace)
137         $(SUBREF mutation, moveEmplaceAll)
138         $(SUBREF mutation, moveEmplaceSome)
139         $(SUBREF mutation, remove)
140         $(SUBREF mutation, reverse)
141         $(SUBREF mutation, strip)
142         $(SUBREF mutation, stripLeft)
143         $(SUBREF mutation, stripRight)
144         $(SUBREF mutation, swap)
145         $(SUBREF mutation, swapRanges)
146         $(SUBREF mutation, uninitializedFill)
147     )
148 )
149 ))
150 
151 Many functions in this package are parameterized with a $(GLOSSARY predicate).
152 The predicate may be any suitable callable type
153 (a function, a delegate, a $(GLOSSARY functor), or a lambda), or a
154 compile-time string. The string may consist of $(B any) legal D
155 expression that uses the symbol $(D a) (for unary functions) or the
156 symbols $(D a) and $(D b) (for binary functions). These names will NOT
157 interfere with other homonym symbols in user code because they are
158 evaluated in a different context. The default for all binary
159 comparison predicates is $(D "a == b") for unordered operations and
160 $(D "a < b") for ordered operations.
161 
162 Example:
163 
164 ----
165 int[] a = ...;
166 static bool greater(int a, int b)
167 {
168     return a > b;
169 }
170 sort!greater(a);           // predicate as alias
171 sort!((a, b) => a > b)(a); // predicate as a lambda.
172 sort!"a > b"(a);           // predicate as string
173                            // (no ambiguity with array name)
174 sort(a);                   // no predicate, "a < b" is implicit
175 ----
176 
177 Macros:
178 SUBMODULE = $(MREF_ALTTEXT $1, std, algorithm, $2)
179 SUBREF = $(REF_ALTTEXT $(TT $2), $2, std, algorithm, $1)$(NBSP)
180 
181 Copyright: Andrei Alexandrescu 2008-.
182 
183 License: $(HTTP boost.org/LICENSE_1_0.txt, Boost License 1.0).
184 
185 Authors: $(HTTP erdani.com, Andrei Alexandrescu)
186 
187 Source: $(PHOBOSSRC std/_algorithm/package.d)
188  */
189 module std.algorithm;
190 
191 public import std.algorithm.comparison;
192 public import std.algorithm.iteration;
193 public import std.algorithm.mutation;
194 public import std.algorithm.searching;
195 public import std.algorithm.setops;
196 public import std.algorithm.sorting;
197 
198 static import std.functional;
199