annotate DEPENDENCIES/generic/include/boost/phoenix/stl/algorithm/querying.hpp @ 133:4acb5d8d80b6 tip

Don't fail environmental check if README.md exists (but .txt and no-suffix don't)
author Chris Cannam
date Tue, 30 Jul 2019 12:25:44 +0100
parents 2665513ce2d3
children
rev   line source
Chris@16 1 // Copyright 2005 Daniel Wallin.
Chris@16 2 // Copyright 2005 Joel de Guzman.
Chris@16 3 // Copyright 2005 Dan Marsden.
Chris@16 4 // Copyright 2008 Hartmut Kaiser.
Chris@16 5 //
Chris@16 6 // Use, modification and distribution is subject to the Boost Software
Chris@16 7 // License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
Chris@16 8 // http://www.boost.org/LICENSE_1_0.txt)
Chris@16 9 //
Chris@16 10 // Modeled after range_ex, Copyright 2004 Eric Niebler
Chris@16 11
Chris@16 12 #ifndef BOOST_PHOENIX_ALGORITHM_QUERYING_HPP
Chris@16 13 #define BOOST_PHOENIX_ALGORITHM_QUERYING_HPP
Chris@16 14
Chris@16 15 #include <algorithm>
Chris@16 16
Chris@16 17 #include <boost/phoenix/core/limits.hpp>
Chris@16 18 #include <boost/phoenix/stl/algorithm/detail/has_find.hpp>
Chris@16 19 #include <boost/phoenix/stl/algorithm/detail/has_lower_bound.hpp>
Chris@16 20 #include <boost/phoenix/stl/algorithm/detail/has_upper_bound.hpp>
Chris@16 21 #include <boost/phoenix/stl/algorithm/detail/has_equal_range.hpp>
Chris@16 22
Chris@16 23 #include <boost/phoenix/stl/algorithm/detail/begin.hpp>
Chris@16 24 #include <boost/phoenix/stl/algorithm/detail/end.hpp>
Chris@16 25 #include <boost/phoenix/stl/algorithm/detail/decay_array.hpp>
Chris@16 26
Chris@16 27 #include <boost/phoenix/function/adapt_callable.hpp>
Chris@16 28
Chris@16 29 #include <boost/range/result_iterator.hpp>
Chris@16 30 #include <boost/range/difference_type.hpp>
Chris@16 31
Chris@16 32 namespace boost { namespace phoenix {
Chris@16 33 namespace impl
Chris@16 34 {
Chris@16 35 struct find
Chris@16 36 {
Chris@16 37 template <typename Sig>
Chris@16 38 struct result;
Chris@16 39
Chris@16 40 template <typename This, class R, class T>
Chris@16 41 struct result<This(R&, T const&)>
Chris@16 42 : range_result_iterator<R>
Chris@16 43 {};
Chris@16 44
Chris@16 45 template<class R, class T>
Chris@16 46 typename range_result_iterator<R>::type
Chris@16 47 execute(R& r, T const& x, mpl::true_) const
Chris@16 48 {
Chris@16 49 return r.find(x);
Chris@16 50 }
Chris@16 51
Chris@16 52 template<class R, class T>
Chris@16 53 typename range_result_iterator<R>::type
Chris@16 54 execute(R& r, T const& x, mpl::false_) const
Chris@16 55 {
Chris@16 56 return std::find(detail::begin_(r), detail::end_(r), x);
Chris@16 57 }
Chris@16 58
Chris@16 59 template<class R, class T>
Chris@16 60 typename range_result_iterator<R>::type
Chris@16 61 operator()(R& r, T const& x) const
Chris@16 62 {
Chris@16 63 return execute(r, x, has_find<R>());
Chris@16 64 }
Chris@16 65 };
Chris@16 66
Chris@16 67 struct find_if
Chris@16 68 {
Chris@16 69 template <typename Sig>
Chris@16 70 struct result;
Chris@16 71
Chris@16 72 template <typename This, class R, class P>
Chris@16 73 struct result<This(R&, P)>
Chris@16 74 : range_result_iterator<R>
Chris@16 75 {};
Chris@16 76
Chris@16 77 template<class R, class P>
Chris@16 78 typename range_result_iterator<R>::type
Chris@16 79 operator()(R& r, P p) const
Chris@16 80 {
Chris@16 81 return std::find_if(detail::begin_(r), detail::end_(r), p);
Chris@16 82 }
Chris@16 83 };
Chris@16 84
Chris@16 85 struct find_end
Chris@16 86 {
Chris@16 87 template <typename Sig>
Chris@16 88 struct result;
Chris@16 89
Chris@16 90 template<typename This, class R, class R2>
Chris@16 91 struct result<This(R&, R2&)>
Chris@16 92 : range_result_iterator<R>
Chris@16 93 {};
Chris@16 94
Chris@16 95 template<typename This, class R, class R2, class P>
Chris@16 96 struct result<This(R&, R2&, P)>
Chris@16 97 : range_result_iterator<R>
Chris@16 98 {};
Chris@16 99
Chris@16 100 template<class R, class R2>
Chris@16 101 typename range_result_iterator<R>::type
Chris@16 102 operator()(R& r, R2& r2) const
Chris@16 103 {
Chris@16 104 return std::find_end(
Chris@16 105 detail::begin_(r)
Chris@16 106 , detail::end_(r)
Chris@16 107 , detail::begin_(r2)
Chris@16 108 , detail::end_(r2)
Chris@16 109 );
Chris@16 110 }
Chris@16 111
Chris@16 112 template<class R, class R2, class P>
Chris@16 113 typename range_result_iterator<R>::type
Chris@16 114 operator()(R& r, R2& r2, P p) const
Chris@16 115 {
Chris@16 116 return std::find_end(
Chris@16 117 detail::begin_(r)
Chris@16 118 , detail::end_(r)
Chris@16 119 , detail::begin_(r2)
Chris@16 120 , detail::end_(r2)
Chris@16 121 , p
Chris@16 122 );
Chris@16 123 }
Chris@16 124 };
Chris@16 125
Chris@16 126 struct find_first_of
Chris@16 127 {
Chris@16 128 template <typename Sig>
Chris@16 129 struct result;
Chris@16 130
Chris@16 131 template<typename This, class R, class R2>
Chris@16 132 struct result<This(R&, R2&)>
Chris@16 133 : range_result_iterator<R>
Chris@16 134 {};
Chris@16 135
Chris@16 136 template<typename This, class R, class R2, class P>
Chris@16 137 struct result<This(R&, R2&, P)>
Chris@16 138 : range_result_iterator<R>
Chris@16 139 {};
Chris@16 140
Chris@16 141 template<class R, class R2>
Chris@16 142 typename range_result_iterator<R>::type
Chris@16 143 operator()(R& r, R2& r2) const
Chris@16 144 {
Chris@16 145 return std::find_first_of(
Chris@16 146 detail::begin_(r)
Chris@16 147 , detail::end_(r)
Chris@16 148 , detail::begin_(r2)
Chris@16 149 , detail::end_(r2)
Chris@16 150 );
Chris@16 151 }
Chris@16 152
Chris@16 153 template<class R, class R2, class P>
Chris@16 154 typename range_result_iterator<R>::type
Chris@16 155 operator()(R& r, R2& r2, P p) const
Chris@16 156 {
Chris@16 157 return std::find_first_of(
Chris@16 158 detail::begin_(r)
Chris@16 159 , detail::end_(r)
Chris@16 160 , detail::begin_(r2)
Chris@16 161 , detail::end_(r2)
Chris@16 162 , p
Chris@16 163 );
Chris@16 164 }
Chris@16 165 };
Chris@16 166
Chris@16 167 struct adjacent_find
Chris@16 168 {
Chris@16 169 template <typename Sig>
Chris@16 170 struct result;
Chris@16 171
Chris@16 172 template <typename This, class R>
Chris@16 173 struct result<This(R&)>
Chris@16 174 : range_result_iterator<R>
Chris@16 175 {};
Chris@16 176
Chris@16 177 template <typename This, class R, class P>
Chris@16 178 struct result<This(R&, P)>
Chris@16 179 : range_result_iterator<R>
Chris@16 180 {};
Chris@16 181
Chris@16 182 template<class R>
Chris@16 183 typename range_result_iterator<R>::type
Chris@16 184 operator()(R& r) const
Chris@16 185 {
Chris@16 186 return std::adjacent_find(detail::begin_(r), detail::end_(r));
Chris@16 187 }
Chris@16 188
Chris@16 189 template<class R, class P>
Chris@16 190 typename range_result_iterator<R>::type
Chris@16 191 operator()(R& r, P p) const
Chris@16 192 {
Chris@16 193 return std::adjacent_find(detail::begin_(r), detail::end_(r), p);
Chris@16 194 }
Chris@16 195 };
Chris@16 196
Chris@16 197 struct count
Chris@16 198 {
Chris@16 199 template <typename Sig>
Chris@16 200 struct result;
Chris@16 201
Chris@16 202 template <typename This, class R, class T>
Chris@16 203 struct result<This(R&, T const&)>
Chris@16 204 : range_difference<R>
Chris@16 205 {};
Chris@16 206
Chris@16 207 template<class R, class T>
Chris@16 208 typename range_difference<R>::type
Chris@16 209 operator()(R& r, T const& x) const
Chris@16 210 {
Chris@16 211 return std::count(detail::begin_(r), detail::end_(r), x);
Chris@16 212 }
Chris@16 213 };
Chris@16 214
Chris@16 215 struct count_if
Chris@16 216 {
Chris@16 217 template <typename Sig>
Chris@16 218 struct result;
Chris@16 219
Chris@16 220 template <typename This, class R, class P>
Chris@16 221 struct result<This(R&, P)>
Chris@16 222 : range_difference<R>
Chris@16 223 {};
Chris@16 224
Chris@16 225 template<class R, class P>
Chris@16 226 typename range_difference<R>::type
Chris@16 227 operator()(R& r, P p) const
Chris@16 228 {
Chris@16 229 return std::count_if(detail::begin_(r), detail::end_(r), p);
Chris@16 230 }
Chris@16 231 };
Chris@16 232
Chris@16 233 struct distance
Chris@16 234 {
Chris@16 235 template <typename Sig>
Chris@16 236 struct result;
Chris@16 237
Chris@16 238 template <typename This, class R>
Chris@16 239 struct result<This(R&)>
Chris@16 240 : range_difference<R>
Chris@16 241 {};
Chris@16 242
Chris@16 243 template<class R>
Chris@16 244 typename range_difference<R>::type
Chris@16 245 operator()(R& r) const
Chris@16 246 {
Chris@16 247 return std::distance(detail::begin_(r), detail::end_(r));
Chris@16 248 }
Chris@16 249 };
Chris@16 250
Chris@16 251 struct equal
Chris@16 252 {
Chris@16 253 typedef bool result_type;
Chris@16 254
Chris@16 255 template<class R, class I>
Chris@16 256 bool operator()(R& r, I i) const
Chris@16 257 {
Chris@16 258 return std::equal(detail::begin_(r), detail::end_(r), i);
Chris@16 259 }
Chris@16 260
Chris@16 261 template<class R, class I, class P>
Chris@16 262 bool operator()(R& r, I i, P p) const
Chris@16 263 {
Chris@16 264 return std::equal(detail::begin_(r), detail::end_(r), i, p);
Chris@16 265 }
Chris@16 266 };
Chris@16 267
Chris@16 268 struct search
Chris@16 269 {
Chris@16 270 template <typename Sig>
Chris@16 271 struct result;
Chris@16 272
Chris@16 273 template <typename This, class R, typename R2>
Chris@16 274 struct result<This(R&, R2&)>
Chris@16 275 : range_result_iterator<R>
Chris@16 276 {};
Chris@16 277
Chris@16 278 template <typename This, class R, typename R2, class P>
Chris@16 279 struct result<This(R&, R2&, P)>
Chris@16 280 : range_result_iterator<R>
Chris@16 281 {};
Chris@16 282
Chris@16 283 template<class R, class R2>
Chris@16 284 typename range_result_iterator<R>::type
Chris@16 285 operator()(R& r, R2& r2) const
Chris@16 286 {
Chris@16 287 return std::search(
Chris@16 288 detail::begin_(r)
Chris@16 289 , detail::end_(r)
Chris@16 290 , detail::begin_(r2)
Chris@16 291 , detail::end_(r2)
Chris@16 292 );
Chris@16 293 }
Chris@16 294
Chris@16 295 template<class R, class R2, class P>
Chris@16 296 typename range_result_iterator<R>::type
Chris@16 297 operator()(R& r, R2& r2, P p) const
Chris@16 298 {
Chris@16 299 return std::search(
Chris@16 300 detail::begin_(r)
Chris@16 301 , detail::end_(r)
Chris@16 302 , detail::begin_(r2)
Chris@16 303 , detail::end_(r2)
Chris@16 304 , p
Chris@16 305 );
Chris@16 306 }
Chris@16 307 };
Chris@16 308
Chris@16 309 struct lower_bound
Chris@16 310 {
Chris@16 311 template <typename Sig>
Chris@16 312 struct result;
Chris@16 313
Chris@16 314 template <typename This, class R, class T>
Chris@16 315 struct result<This(R&, T const&)>
Chris@16 316 : range_result_iterator<R>
Chris@16 317 {};
Chris@16 318
Chris@16 319 template <typename This, class R, class T, class C>
Chris@16 320 struct result<This(R&, T const&, C)>
Chris@16 321 : range_result_iterator<R>
Chris@16 322 {};
Chris@16 323
Chris@16 324 template<class R, class T>
Chris@16 325 typename range_result_iterator<R>::type
Chris@16 326 execute(R& r, T const& val, mpl::true_) const
Chris@16 327 {
Chris@16 328 return r.lower_bound(val);
Chris@16 329 }
Chris@16 330
Chris@16 331 template<class R, class T>
Chris@16 332 typename range_result_iterator<R>::type
Chris@16 333 execute(R& r, T const& val, mpl::false_) const
Chris@16 334 {
Chris@16 335 return std::lower_bound(detail::begin_(r), detail::end_(r), val);
Chris@16 336 }
Chris@16 337
Chris@16 338 template<class R, class T>
Chris@16 339 typename range_result_iterator<R>::type
Chris@16 340 operator()(R& r, T const& val) const
Chris@16 341 {
Chris@16 342 return execute(r, val, has_lower_bound<R>());
Chris@16 343 }
Chris@16 344
Chris@16 345 template<class R, class T, class C>
Chris@16 346 typename range_result_iterator<R>::type
Chris@16 347 operator()(R& r, T const& val, C c) const
Chris@16 348 {
Chris@16 349 return std::lower_bound(detail::begin_(r), detail::end_(r), val, c);
Chris@16 350 }
Chris@16 351 };
Chris@16 352
Chris@16 353 struct upper_bound
Chris@16 354 {
Chris@16 355 template <typename Sig>
Chris@16 356 struct result;
Chris@16 357
Chris@16 358 template <typename This, class R, class T>
Chris@16 359 struct result<This(R&, T const&)>
Chris@16 360 : range_result_iterator<R>
Chris@16 361 {};
Chris@16 362
Chris@16 363 template <typename This, class R, class T, class C>
Chris@16 364 struct result<This(R&, T const&, C)>
Chris@16 365 : range_result_iterator<R>
Chris@16 366 {};
Chris@16 367
Chris@16 368 template<class R, class T>
Chris@16 369 typename range_result_iterator<R>::type
Chris@16 370 execute(R& r, T const& val, mpl::true_) const
Chris@16 371 {
Chris@16 372 return r.upper_bound(val);
Chris@16 373 }
Chris@16 374
Chris@16 375 template<class R, class T>
Chris@16 376 typename range_result_iterator<R>::type
Chris@16 377 execute(R& r, T const& val, mpl::false_) const
Chris@16 378 {
Chris@16 379 return std::upper_bound(detail::begin_(r), detail::end_(r), val);
Chris@16 380 }
Chris@16 381
Chris@16 382 template<class R, class T>
Chris@16 383 typename range_result_iterator<R>::type
Chris@16 384 operator()(R& r, T const& val) const
Chris@16 385 {
Chris@16 386 return execute(r, val, has_upper_bound<R>());
Chris@16 387 }
Chris@16 388
Chris@16 389 template<class R, class T, class C>
Chris@16 390 typename range_result_iterator<R>::type
Chris@16 391 operator()(R& r, T const& val, C c) const
Chris@16 392 {
Chris@16 393 return std::upper_bound(detail::begin_(r), detail::end_(r), val, c);
Chris@16 394 }
Chris@16 395 };
Chris@16 396
Chris@16 397 namespace result_of
Chris@16 398 {
Chris@16 399 template <typename R, typename T, typename C = void>
Chris@16 400 struct equal_range
Chris@16 401 {
Chris@16 402 typedef std::pair<
Chris@16 403 typename range_result_iterator<R>::type
Chris@16 404 , typename range_result_iterator<R>::type
Chris@16 405 > type;
Chris@16 406 };
Chris@16 407 }
Chris@16 408
Chris@16 409 struct equal_range
Chris@16 410 {
Chris@16 411 template <typename Sig>
Chris@16 412 struct result;
Chris@16 413
Chris@16 414 template <typename This, class R, class T>
Chris@16 415 struct result<This(R&, T const&)>
Chris@16 416 : result_of::equal_range<R,T>
Chris@16 417 {};
Chris@16 418
Chris@16 419 template <typename This, class R, class T, class C>
Chris@16 420 struct result<This(R&, T const&, C)>
Chris@16 421 : result_of::equal_range<R,T, C>
Chris@16 422 {};
Chris@16 423
Chris@16 424 template<class R, class T>
Chris@16 425 typename result_of::equal_range<R, T>::type
Chris@16 426 execute(R& r, T const& val, mpl::true_) const
Chris@16 427 {
Chris@16 428 return r.equal_range(val);
Chris@16 429 }
Chris@16 430
Chris@16 431 template<class R, class T>
Chris@16 432 typename result_of::equal_range<R, T>::type
Chris@16 433 execute(R& r, T const& val, mpl::false_) const
Chris@16 434 {
Chris@16 435 return std::equal_range(detail::begin_(r), detail::end_(r), val);
Chris@16 436 }
Chris@16 437
Chris@16 438 template<class R, class T>
Chris@16 439 typename result_of::equal_range<R, T>::type
Chris@16 440 operator()(R& r, T const& val) const
Chris@16 441 {
Chris@16 442 return execute(r, val, has_equal_range<R>());
Chris@16 443 }
Chris@16 444
Chris@16 445 template<class R, class T, class C>
Chris@16 446 typename result_of::equal_range<R, T, C>::type
Chris@16 447 operator()(R& r, T const& val, C c) const
Chris@16 448 {
Chris@16 449 return std::equal_range(detail::begin_(r), detail::end_(r), val, c);
Chris@16 450 }
Chris@16 451 };
Chris@16 452
Chris@16 453 namespace result_of
Chris@16 454 {
Chris@16 455 template <typename R, typename I, typename P = void>
Chris@16 456 struct mismatch
Chris@16 457 {
Chris@16 458 typedef std::pair<
Chris@16 459 typename range_result_iterator<R>::type
Chris@16 460 , typename detail::decay_array<I>::type
Chris@16 461 > type;
Chris@16 462 };
Chris@16 463 }
Chris@16 464
Chris@16 465 struct mismatch
Chris@16 466 {
Chris@16 467 template <typename Sig>
Chris@16 468 struct result;
Chris@16 469
Chris@16 470 template<typename This, class R, class I>
Chris@16 471 struct result<This(R&, I)>
Chris@16 472 : result_of::mismatch<R, I>
Chris@16 473 {};
Chris@16 474
Chris@16 475 template<typename This, class R, class I, class P>
Chris@16 476 struct result<This(R&, I, P)>
Chris@16 477 : result_of::mismatch<R, I, P>
Chris@16 478 {};
Chris@16 479
Chris@16 480 template<class R, class I>
Chris@16 481 typename result_of::mismatch<R, I>::type
Chris@16 482 operator()(R& r, I i) const
Chris@16 483 {
Chris@16 484 return std::mismatch(detail::begin_(r), detail::end_(r), i);
Chris@16 485 }
Chris@16 486
Chris@16 487 template<class R, class I, class P>
Chris@16 488 typename result_of::mismatch<R, I, P>::type
Chris@16 489 operator()(R& r, I i, P p) const
Chris@16 490 {
Chris@16 491 return std::mismatch(detail::begin_(r), detail::end_(r), i, p);
Chris@16 492 }
Chris@16 493 };
Chris@16 494
Chris@16 495 struct binary_search
Chris@16 496 {
Chris@16 497 typedef bool result_type;
Chris@16 498
Chris@16 499 template<class R, class T>
Chris@16 500 bool operator()(R& r, T const& val) const
Chris@16 501 {
Chris@16 502 return std::binary_search(detail::begin_(r), detail::end_(r), val);
Chris@16 503 }
Chris@16 504
Chris@16 505 template<class R, class T, class C>
Chris@16 506 bool operator()(R& r, T const& val, C c) const
Chris@16 507 {
Chris@16 508 return std::binary_search(detail::begin_(r), detail::end_(r), val, c);
Chris@16 509 }
Chris@16 510 };
Chris@16 511
Chris@16 512 struct includes
Chris@16 513 {
Chris@16 514 typedef bool result_type;
Chris@16 515
Chris@16 516 template<class R1, class R2>
Chris@16 517 bool operator()(R1& r1, R2& r2) const
Chris@16 518 {
Chris@16 519 return std::includes(
Chris@16 520 detail::begin_(r1), detail::end_(r1)
Chris@16 521 , detail::begin_(r2), detail::end_(r2)
Chris@16 522 );
Chris@16 523 }
Chris@16 524
Chris@16 525 template<class R1, class R2, class C>
Chris@16 526 bool operator()(R1& r1, R2& r2, C c) const
Chris@16 527 {
Chris@16 528 return std::includes(
Chris@16 529 detail::begin_(r1), detail::end_(r1)
Chris@16 530 , detail::begin_(r2), detail::end_(r2)
Chris@16 531 , c
Chris@16 532 );
Chris@16 533 }
Chris@16 534 };
Chris@16 535
Chris@16 536 struct min_element
Chris@16 537 {
Chris@16 538 template <typename Sig>
Chris@16 539 struct result;
Chris@16 540
Chris@16 541 template <typename This, class R>
Chris@16 542 struct result<This(R&)>
Chris@16 543 : range_result_iterator<R>
Chris@16 544 {};
Chris@16 545
Chris@16 546 template <typename This, class R, class P>
Chris@16 547 struct result<This(R&, P)>
Chris@16 548 : range_result_iterator<R>
Chris@16 549 {};
Chris@16 550
Chris@16 551 template<class R>
Chris@16 552 typename range_result_iterator<R>::type
Chris@16 553 operator()(R& r) const
Chris@16 554 {
Chris@16 555 return std::min_element(detail::begin_(r), detail::end_(r));
Chris@16 556 }
Chris@16 557
Chris@16 558 template<class R, class P>
Chris@16 559 typename range_result_iterator<R>::type
Chris@16 560 operator()(R& r, P p) const
Chris@16 561 {
Chris@16 562 return std::min_element(detail::begin_(r), detail::end_(r), p);
Chris@16 563 }
Chris@16 564 };
Chris@16 565
Chris@16 566 struct max_element
Chris@16 567 {
Chris@16 568 template <typename Sig>
Chris@16 569 struct result;
Chris@16 570
Chris@16 571 template <typename This, class R>
Chris@16 572 struct result<This(R&)>
Chris@16 573 : range_result_iterator<R>
Chris@16 574 {};
Chris@16 575
Chris@16 576 template <typename This, class R, class P>
Chris@16 577 struct result<This(R&, P)>
Chris@16 578 : range_result_iterator<R>
Chris@16 579 {};
Chris@16 580
Chris@16 581 template<class R>
Chris@16 582 typename range_result_iterator<R>::type
Chris@16 583 operator()(R& r) const
Chris@16 584 {
Chris@16 585 return std::max_element(detail::begin_(r), detail::end_(r));
Chris@16 586 }
Chris@16 587
Chris@16 588 template<class R, class P>
Chris@16 589 typename range_result_iterator<R>::type
Chris@16 590 operator()(R& r, P p) const
Chris@16 591 {
Chris@16 592 return std::max_element(detail::begin_(r), detail::end_(r), p);
Chris@16 593 }
Chris@16 594 };
Chris@16 595
Chris@16 596 struct lexicographical_compare
Chris@16 597 {
Chris@16 598 typedef bool result_type;
Chris@16 599
Chris@16 600 template<class R1, class R2>
Chris@16 601 bool operator()(R1& r1, R2& r2) const
Chris@16 602 {
Chris@16 603 return std::lexicographical_compare(
Chris@16 604 detail::begin_(r1), detail::end_(r1)
Chris@16 605 , detail::begin_(r2), detail::end_(r2)
Chris@16 606 );
Chris@16 607 }
Chris@16 608
Chris@16 609 template<class R1, class R2, class P>
Chris@16 610 bool operator()(R1& r1, R2& r2, P p) const
Chris@16 611 {
Chris@16 612 return std::lexicographical_compare(
Chris@16 613 detail::begin_(r1), detail::end_(r1)
Chris@16 614 , detail::begin_(r2), detail::end_(r2)
Chris@16 615 , p
Chris@16 616 );
Chris@16 617 }
Chris@16 618 };
Chris@16 619
Chris@16 620 }
Chris@16 621
Chris@16 622 BOOST_PHOENIX_ADAPT_CALLABLE(find, impl::find, 2)
Chris@16 623 BOOST_PHOENIX_ADAPT_CALLABLE(find_if, impl::find_if, 2)
Chris@16 624 BOOST_PHOENIX_ADAPT_CALLABLE(find_end, impl::find_end, 2)
Chris@16 625 BOOST_PHOENIX_ADAPT_CALLABLE(find_end, impl::find_end, 3)
Chris@16 626 BOOST_PHOENIX_ADAPT_CALLABLE(find_first_of, impl::find_first_of, 2)
Chris@16 627 BOOST_PHOENIX_ADAPT_CALLABLE(find_first_of, impl::find_first_of, 3)
Chris@16 628 BOOST_PHOENIX_ADAPT_CALLABLE(adjacent_find, impl::adjacent_find, 1)
Chris@16 629 BOOST_PHOENIX_ADAPT_CALLABLE(adjacent_find, impl::adjacent_find, 2)
Chris@16 630 BOOST_PHOENIX_ADAPT_CALLABLE(count, impl::count, 2)
Chris@16 631 BOOST_PHOENIX_ADAPT_CALLABLE(count_if, impl::count_if, 2)
Chris@16 632 BOOST_PHOENIX_ADAPT_CALLABLE(distance, impl::distance, 1)
Chris@16 633 BOOST_PHOENIX_ADAPT_CALLABLE(equal, impl::equal, 2)
Chris@16 634 BOOST_PHOENIX_ADAPT_CALLABLE(equal, impl::equal, 3)
Chris@16 635 BOOST_PHOENIX_ADAPT_CALLABLE(search, impl::search, 2)
Chris@16 636 BOOST_PHOENIX_ADAPT_CALLABLE(search, impl::search, 3)
Chris@16 637 BOOST_PHOENIX_ADAPT_CALLABLE(lower_bound, impl::lower_bound, 2)
Chris@16 638 BOOST_PHOENIX_ADAPT_CALLABLE(lower_bound, impl::lower_bound, 3)
Chris@16 639 BOOST_PHOENIX_ADAPT_CALLABLE(upper_bound, impl::upper_bound, 2)
Chris@16 640 BOOST_PHOENIX_ADAPT_CALLABLE(upper_bound, impl::upper_bound, 3)
Chris@16 641 BOOST_PHOENIX_ADAPT_CALLABLE(equal_range, impl::equal_range, 2)
Chris@16 642 BOOST_PHOENIX_ADAPT_CALLABLE(equal_range, impl::equal_range, 3)
Chris@16 643 BOOST_PHOENIX_ADAPT_CALLABLE(mismatch, impl::mismatch, 2)
Chris@16 644 BOOST_PHOENIX_ADAPT_CALLABLE(mismatch, impl::mismatch, 3)
Chris@16 645 BOOST_PHOENIX_ADAPT_CALLABLE(binary_search, impl::binary_search, 2)
Chris@16 646 BOOST_PHOENIX_ADAPT_CALLABLE(binary_search, impl::binary_search, 3)
Chris@16 647 BOOST_PHOENIX_ADAPT_CALLABLE(includes, impl::includes, 2)
Chris@16 648 BOOST_PHOENIX_ADAPT_CALLABLE(includes, impl::includes, 3)
Chris@16 649 BOOST_PHOENIX_ADAPT_CALLABLE(min_element, impl::min_element, 1)
Chris@16 650 BOOST_PHOENIX_ADAPT_CALLABLE(min_element, impl::min_element, 2)
Chris@16 651 BOOST_PHOENIX_ADAPT_CALLABLE(max_element, impl::max_element, 1)
Chris@16 652 BOOST_PHOENIX_ADAPT_CALLABLE(max_element, impl::max_element, 2)
Chris@16 653 BOOST_PHOENIX_ADAPT_CALLABLE(lexicographical_compare, impl::lexicographical_compare, 2)
Chris@16 654 BOOST_PHOENIX_ADAPT_CALLABLE(lexicographical_compare, impl::lexicographical_compare, 3)
Chris@16 655
Chris@16 656 }}
Chris@16 657
Chris@16 658 #endif