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, mean) 83 $(SUBREF iteration, permutations) 84 $(SUBREF iteration, reduce) 85 $(SUBREF iteration, splitWhen) 86 $(SUBREF iteration, splitter) 87 $(SUBREF iteration, substitute) 88 $(SUBREF iteration, sum) 89 $(SUBREF iteration, uniq) 90 ) 91 ) 92 $(TR 93 $(TDNW $(SUBMODULE Sorting, sorting)) 94 $(TD 95 $(SUBREF sorting, completeSort) 96 $(SUBREF sorting, isPartitioned) 97 $(SUBREF sorting, isSorted) 98 $(SUBREF sorting, isStrictlyMonotonic) 99 $(SUBREF sorting, ordered) 100 $(SUBREF sorting, strictlyOrdered) 101 $(SUBREF sorting, makeIndex) 102 $(SUBREF sorting, merge) 103 $(SUBREF sorting, multiSort) 104 $(SUBREF sorting, nextEvenPermutation) 105 $(SUBREF sorting, nextPermutation) 106 $(SUBREF sorting, nthPermutation) 107 $(SUBREF sorting, partialSort) 108 $(SUBREF sorting, partition) 109 $(SUBREF sorting, partition3) 110 $(SUBREF sorting, schwartzSort) 111 $(SUBREF sorting, sort) 112 $(SUBREF sorting, topN) 113 $(SUBREF sorting, topNCopy) 114 $(SUBREF sorting, topNIndex) 115 ) 116 ) 117 $(TR 118 $(TDNW Set operations $(BR)($(SUBMODULE setops, setops))) 119 $(TD 120 $(SUBREF setops, cartesianProduct) 121 $(SUBREF setops, largestPartialIntersection) 122 $(SUBREF setops, largestPartialIntersectionWeighted) 123 $(SUBREF setops, multiwayMerge) 124 $(SUBREF setops, multiwayUnion) 125 $(SUBREF setops, setDifference) 126 $(SUBREF setops, setIntersection) 127 $(SUBREF setops, setSymmetricDifference) 128 ) 129 ) 130 $(TR 131 $(TDNW $(SUBMODULE Mutation, mutation)) 132 $(TD 133 $(SUBREF mutation, bringToFront) 134 $(SUBREF mutation, copy) 135 $(SUBREF mutation, fill) 136 $(SUBREF mutation, initializeAll) 137 $(SUBREF mutation, move) 138 $(SUBREF mutation, moveAll) 139 $(SUBREF mutation, moveSome) 140 $(SUBREF mutation, moveEmplace) 141 $(SUBREF mutation, moveEmplaceAll) 142 $(SUBREF mutation, moveEmplaceSome) 143 $(SUBREF mutation, remove) 144 $(SUBREF mutation, reverse) 145 $(SUBREF mutation, strip) 146 $(SUBREF mutation, stripLeft) 147 $(SUBREF mutation, stripRight) 148 $(SUBREF mutation, swap) 149 $(SUBREF mutation, swapRanges) 150 $(SUBREF mutation, uninitializedFill) 151 ) 152 ) 153 )) 154 155 Many functions in this package are parameterized with a $(GLOSSARY predicate). 156 The predicate may be any suitable callable type 157 (a function, a delegate, a $(GLOSSARY functor), or a lambda), or a 158 compile-time string. The string may consist of $(B any) legal D 159 expression that uses the symbol `a` (for unary functions) or the 160 symbols `a` and `b` (for binary functions). These names will NOT 161 interfere with other homonym symbols in user code because they are 162 evaluated in a different context. The default for all binary 163 comparison predicates is `"a == b"` for unordered operations and 164 `"a < b"` for ordered operations. 165 166 Example: 167 168 ---- 169 int[] a = ...; 170 static bool greater(int a, int b) 171 { 172 return a > b; 173 } 174 sort!greater(a); // predicate as alias 175 sort!((a, b) => a > b)(a); // predicate as a lambda. 176 sort!"a > b"(a); // predicate as string 177 // (no ambiguity with array name) 178 sort(a); // no predicate, "a < b" is implicit 179 ---- 180 181 Macros: 182 SUBMODULE = $(MREF_ALTTEXT $1, std, algorithm, $2) 183 SUBREF = $(REF_ALTTEXT $(TT $2), $2, std, algorithm, $1)$(NBSP) 184 185 Copyright: Andrei Alexandrescu 2008-. 186 187 License: $(HTTP boost.org/LICENSE_1_0.txt, Boost License 1.0). 188 189 Authors: $(HTTP erdani.com, Andrei Alexandrescu) 190 191 Source: $(PHOBOSSRC std/algorithm/package.d) 192 */ 193 module std.algorithm; 194 195 public import std.algorithm.comparison; 196 public import std.algorithm.iteration; 197 public import std.algorithm.mutation; 198 public import std.algorithm.searching; 199 public import std.algorithm.setops; 200 public import std.algorithm.sorting; 201 202 static import std.functional;