Compare commits

...

23 Commits

Author SHA1 Message Date
e8504e45a4 Merge pull request #124 from georgthegreat/patch-1
Add missing include
2025-06-25 20:43:28 -07:00
dbd2ea4617 Merge pull request #125 from jeking3/fix_minmax_timer
Fix minmax_timer build, iteration count errors, and math errors
2025-06-25 20:43:14 -07:00
c9e890bb85 Fix minmax_timer build 2025-06-23 21:06:23 -04:00
7012619c80 Add missing include 2025-05-05 18:01:59 +02:00
6eb48dd863 Merge pull request #112 from glywk/develop
Add is_blank() string functor classification
2025-04-13 13:46:42 -07:00
1395fe720c Merge pull request #123 from ahamez/develop
Fix documentation for  trim_all and trim_fill
2025-04-13 13:44:34 -07:00
35a55238a7 Fix documentation for trim_all and trim_fill 2025-01-13 11:20:30 +01:00
7f07838f8b Merge pull request #121 from grafikrobot/modular
Add support for modular build structure.
2024-09-03 11:59:17 -07:00
bbfcdf1322 Change Boost Test build refs to work with both old and modular test lib targets. 2024-08-08 21:45:19 -05:00
5c8e6ce9ba Add timer dependency for minmax examples. 2024-07-30 08:03:47 -05:00
0c0e84b112 Adjust self dependencies as inter-lib deps no longer apply globally. 2024-07-27 10:28:38 -05:00
81e46297b5 Move inter-lib dependencies to a project variable and into the build targets. 2024-07-23 22:34:22 -05:00
8189606c93 Update copyright dates. 2024-07-20 22:52:03 -05:00
c63c45a932 Bump B2 require to 5.2 2024-06-14 11:33:55 -05:00
1213b9fd1f Add requires-b2 check to top-level build file. 2024-05-05 09:00:00 -05:00
b3b2ff4d0c Remove relative references to boost-root in Jamfiles. 2024-04-13 16:18:29 -05:00
14922e71c0 Avoid global references to boost-root. 2024-04-13 11:15:55 -05:00
fcf95e504b Switch to library requirements instead of source. As source puts extra source in install targets. 2024-03-29 21:12:36 -05:00
6b1d2fc5ad Make the library modular usable. 2024-03-11 08:27:02 -05:00
dc14b69189 Add negative is_blank predicate tests 2023-07-27 23:15:48 +02:00
61fa3e461f Merge branch 'boostorg:develop' into develop 2023-07-27 01:17:32 +02:00
3401f0398f fix range-base gather algorithm 2023-07-27 01:04:04 +02:00
1d9706feb7 Add is_blank classifier 2023-01-21 00:42:52 +01:00
16 changed files with 161 additions and 89 deletions

11
Jamfile
View File

@ -1,11 +0,0 @@
# Boost.Algorithm Library Jamfile
#
# Copyright (c) 2018 James E. King III
#
# Use, modification, and distribution are 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)
# please order by name to ease maintenance
build-project example ;
build-project test ;

42
build.jam Normal file
View File

@ -0,0 +1,42 @@
# Copyright René Ferdinand Rivera Morell 2023-2024
# 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)
require-b2 5.2 ;
constant boost_dependencies :
/boost/array//boost_array
/boost/assert//boost_assert
/boost/bind//boost_bind
/boost/concept_check//boost_concept_check
/boost/config//boost_config
/boost/core//boost_core
/boost/exception//boost_exception
/boost/function//boost_function
/boost/iterator//boost_iterator
/boost/mpl//boost_mpl
/boost/range//boost_range
/boost/regex//boost_regex
/boost/static_assert//boost_static_assert
/boost/throw_exception//boost_throw_exception
/boost/tuple//boost_tuple
/boost/type_traits//boost_type_traits
/boost/unordered//boost_unordered ;
project /boost/algorithm
: common-requirements
<include>include
;
explicit
[ alias boost_algorithm : : : : <library>$(boost_dependencies) ]
[ alias all : boost_algorithm test
example
minmax/example minmax/test
string/example string/test
]
;
call-if : boost-library algorithm
;

View File

@ -18,11 +18,11 @@ using boostbook ;
doxygen autodoc doxygen autodoc
: :
[ glob ../../../boost/algorithm/*.hpp [ glob ../include/boost/algorithm/*.hpp
../../../boost/algorithm/searching/*.hpp ../include/boost/algorithm/searching/*.hpp
../../../boost/algorithm/cxx11/*.hpp ../include/boost/algorithm/cxx11/*.hpp
../../../boost/algorithm/cxx14/*.hpp ../include/boost/algorithm/cxx14/*.hpp
../../../boost/algorithm/cxx17/*.hpp ../include/boost/algorithm/cxx17/*.hpp
] ]
: :
<doxygen:param>"PREDEFINED=\"BOOST_ALGORITHM_DOXYGEN=1\"" <doxygen:param>"PREDEFINED=\"BOOST_ALGORITHM_DOXYGEN=1\""

View File

@ -8,9 +8,9 @@
# See http://www.boost.org for updates, documentation, and revision history. # See http://www.boost.org for updates, documentation, and revision history.
project /boost/algorithm/example project
: requirements : requirements
<include>../../../ <library>/boost/algorithm//boost_algorithm
<optimization>speed <optimization>speed
<toolset>msvc:<define>_SCL_SECURE_NO_WARNINGS <toolset>msvc:<define>_SCL_SECURE_NO_WARNINGS
<toolset>msvc:<define>NOMINMAX <toolset>msvc:<define>NOMINMAX

View File

@ -10,6 +10,7 @@
#ifndef BOOST_ALGORITHM_BOYER_MOORE_SEARCH_HPP #ifndef BOOST_ALGORITHM_BOYER_MOORE_SEARCH_HPP
#define BOOST_ALGORITHM_BOYER_MOORE_SEARCH_HPP #define BOOST_ALGORITHM_BOYER_MOORE_SEARCH_HPP
#include <algorithm> // for std::reverse_copy
#include <iterator> // for std::iterator_traits #include <iterator> // for std::iterator_traits
#include <boost/config.hpp> #include <boost/config.hpp>

View File

@ -85,6 +85,22 @@ namespace boost {
return detail::is_classifiedF(std::ctype_base::alpha, Loc); return detail::is_classifiedF(std::ctype_base::alpha, Loc);
} }
#ifndef BOOST_NO_CXX11
//! is_blank predicate
/*!
Construct the \c is_classified predicate for the \c ctype_base::blank category.
\param Loc A locale used for classification
\return An instance of the \c is_classified predicate
\since c++11
*/
inline detail::is_classifiedF
is_blank(const std::locale& Loc=std::locale())
{
return detail::is_classifiedF(std::ctype_base::blank, Loc);
}
#endif
//! is_cntrl predicate //! is_cntrl predicate
/*! /*!
Construct the \c is_classified predicate for the \c ctype_base::cntrl category. Construct the \c is_classified predicate for the \c ctype_base::cntrl category.
@ -294,6 +310,9 @@ namespace boost {
// pull names to the boost namespace // pull names to the boost namespace
using algorithm::is_classified; using algorithm::is_classified;
using algorithm::is_space; using algorithm::is_space;
#ifndef BOOST_NO_CXX11
using algorithm::is_blank;
#endif
using algorithm::is_alnum; using algorithm::is_alnum;
using algorithm::is_alpha; using algorithm::is_alpha;
using algorithm::is_cntrl; using algorithm::is_cntrl;

View File

@ -108,7 +108,6 @@ namespace boost {
\param Input An input sequence \param Input An input sequence
\param Loc A locale used for 'space' classification \param Loc A locale used for 'space' classification
\return A trimmed copy of the input
*/ */
template<typename SequenceT> template<typename SequenceT>
inline void trim_all(SequenceT& Input, const std::locale& Loc =std::locale()) inline void trim_all(SequenceT& Input, const std::locale& Loc =std::locale())
@ -191,7 +190,6 @@ namespace boost {
\param Input An input sequence \param Input An input sequence
\param Fill A string used to fill the inner spaces \param Fill A string used to fill the inner spaces
\param Loc A locale used for 'space' classification \param Loc A locale used for 'space' classification
\return A trimmed copy of the input
*/ */
template<typename SequenceT, typename RangeT> template<typename SequenceT, typename RangeT>
inline void trim_fill(SequenceT& Input, const RangeT& Fill, const std::locale& Loc =std::locale()) inline void trim_fill(SequenceT& Input, const RangeT& Fill, const std::locale& Loc =std::locale())

View File

@ -7,6 +7,11 @@
# http://www.boost.org/LICENSE_1_0.txt) # http://www.boost.org/LICENSE_1_0.txt)
# #
project
: requirements
<library>/boost/algorithm//boost_algorithm
<library>/boost/timer//boost_timer ;
exe minmax_ex : minmax_ex.cpp ; exe minmax_ex : minmax_ex.cpp ;
exe minmax_timer : minmax_timer.cpp ; exe minmax_timer : minmax_timer.cpp ;

View File

@ -15,8 +15,10 @@
// What's the proper BOOST_ flag for <iomanip.h> vs <ios> // What's the proper BOOST_ flag for <iomanip.h> vs <ios>
#include <iomanip> #include <iomanip>
#include <boost/timer.hpp>
#include <boost/algorithm/minmax.hpp> #include <boost/algorithm/minmax.hpp>
#include <boost/algorithm/minmax_element.hpp>
#include <boost/iterator/filter_iterator.hpp>
#include <boost/timer/timer.hpp>
template <class T1, class T2> template <class T1, class T2>
void tie(std::pair<T1, T2> p, T1& min, T2& max) void tie(std::pair<T1, T2> p, T1& min, T2& max)
@ -56,17 +58,19 @@ inline int opt_boost_minmax_count(int n) {
int repeats = 10; int repeats = 10;
#define TIMER( n, cmd , cmdname ) \ #define TIMER( n, cmd , cmdname ) \
t.restart(); \ t.start(); \
for (int i=0; i<repeats; ++i) { cmd ; } \ for (int i=0; i<n*repeats; ++i) { cmd ; } \
t.stop(); \
std::cout << " " << std::setprecision(4) \ std::cout << " " << std::setprecision(4) \
<< (double)n*repeats/t.elapsed()/1.0E6 \ << 1e3 * (double)(n*repeats) / (double)t.elapsed().wall \
<< "M items/sec " << cmdname << "\n" << "M items/sec " << cmdname << "\n"
#define CTIMER( n, cmd , cmdname, count, opt ) \ #define CTIMER( n, cmd , cmdname, count, opt ) \
t.restart(); lc.reset(); \ t.start(); lc.reset(); \
for (int i=0; i<repeats; ++i) { cmd ; } \ for (int i=0; i<n*repeats; ++i) { cmd ; } \
t.stop(); \
std::cout << " " << std::setprecision(4) \ std::cout << " " << std::setprecision(4) \
<< (double)n*repeats/t.elapsed()/1.0E6 \ << 1e3 * (double)(n*repeats) / (double)t.elapsed().wall \
<< "M items/sec " << cmdname \ << "M items/sec " << cmdname \
<< " ("<< (count)/repeats << " vs " << opt << ")\n" << " ("<< (count)/repeats << " vs " << opt << ")\n"
@ -74,7 +78,7 @@ template <class CIterator>
void test_minmax_element(CIterator first, CIterator last, int n, char* name) void test_minmax_element(CIterator first, CIterator last, int n, char* name)
{ {
typedef typename std::iterator_traits<CIterator>::value_type vtype; typedef typename std::iterator_traits<CIterator>::value_type vtype;
boost::timer t; boost::timer::cpu_timer t;
std::cout << " ON " << name << " WITH OPERATOR<()\n"; std::cout << " ON " << name << " WITH OPERATOR<()\n";
TIMER( n, std::min_element(first, last), TIMER( n, std::min_element(first, last),
@ -99,15 +103,11 @@ void test_minmax_element(CIterator first, CIterator last, int n, char* name)
"boost::last_min_last_max_element" << name << " "); "boost::last_min_last_max_element" << name << " ");
#define pred std::bind2nd( std::greater<vtype>(), vtype(10) ) #define pred std::bind2nd( std::greater<vtype>(), vtype(10) )
TIMER( n, boost::min_element_if(first, last, pred), TIMER( n, std::min_element(boost::make_filter_iterator(pred, first, last),
"boost::min_element_if" << name << ""); boost::make_filter_iterator(pred, last, last)),
TIMER( n, boost::max_element_if(first, last, pred),
"boost::max_element_if" << name << "");
TIMER( n, std::min_element(boost::make_filter_iterator(first, last, pred),
boost::make_filter_iterator(last, last, pred)),
"std::min_element_with_filter_iterator" << name << ""); "std::min_element_with_filter_iterator" << name << "");
TIMER( n, std::max_element(boost::make_filter_iterator(first, last, pred), TIMER( n, std::max_element(boost::make_filter_iterator(pred, first, last),
boost::make_filter_iterator(last, last, pred)), boost::make_filter_iterator(pred, last, last)),
"std::max_element_if_with_filter_iterator" << name << ""); "std::max_element_if_with_filter_iterator" << name << "");
#undef pred #undef pred
@ -199,10 +199,9 @@ void test(int n)
test_range(first, last, n); test_range(first, last, n);
} }
int int main(int argc, char** argv)
main(char argc, char** argv)
{ {
int n = 100; int n = 1000;
if (argc > 1) n = atoi(argv[1]); if (argc > 1) n = atoi(argv[1]);
if (argc > 2) repeats = atoi(argv[2]); if (argc > 2) repeats = atoi(argv[2]);

View File

@ -9,9 +9,11 @@
import testing ; import testing ;
project : requirements <library>/boost/algorithm//boost_algorithm ;
alias unit_test_framework alias unit_test_framework
: # sources : # sources
/boost//unit_test_framework /boost/test//boost_unit_test_framework
; ;
{ {

View File

@ -18,32 +18,32 @@ boostbook string_algo : string_algo.xml autodoc
doxygen autodoc doxygen autodoc
: :
[ glob ../../../../boost/algorithm/string.hpp ] [ glob ../../include/boost/algorithm/string.hpp ]
[ glob ../../../../boost/algorithm/string_regex.hpp ] [ glob ../../include/boost/algorithm/string_regex.hpp ]
[ glob ../../../../boost/algorithm/string/classification.hpp ] [ glob ../../include/boost/algorithm/string/classification.hpp ]
[ glob ../../../../boost/algorithm/string/iterator_range.hpp ] [ glob ../../include/boost/algorithm/string/iterator_range.hpp ]
[ glob ../../../../boost/algorithm/string/sequence_traits.hpp ] [ glob ../../include/boost/algorithm/string/sequence_traits.hpp ]
[ glob ../../../../boost/algorithm/string/std_containers_traits.hpp ] [ glob ../../include/boost/algorithm/string/std_containers_traits.hpp ]
[ glob ../../../../boost/algorithm/string/concept.hpp ] [ glob ../../include/boost/algorithm/string/concept.hpp ]
[ glob ../../../../boost/algorithm/string/compare.hpp ] [ glob ../../include/boost/algorithm/string/compare.hpp ]
[ glob ../../../../boost/algorithm/string/constants.hpp ] [ glob ../../include/boost/algorithm/string/constants.hpp ]
[ glob ../../../../boost/algorithm/string/case_conv.hpp ] [ glob ../../include/boost/algorithm/string/case_conv.hpp ]
[ glob ../../../../boost/algorithm/string/find.hpp ] [ glob ../../include/boost/algorithm/string/find.hpp ]
[ glob ../../../../boost/algorithm/string/finder.hpp ] [ glob ../../include/boost/algorithm/string/finder.hpp ]
[ glob ../../../../boost/algorithm/string/find_iterator.hpp ] [ glob ../../include/boost/algorithm/string/find_iterator.hpp ]
[ glob ../../../../boost/algorithm/string/trim.hpp ] [ glob ../../include/boost/algorithm/string/trim.hpp ]
[ glob ../../../../boost/algorithm/string/predicate.hpp ] [ glob ../../include/boost/algorithm/string/predicate.hpp ]
[ glob ../../../../boost/algorithm/string/split.hpp ] [ glob ../../include/boost/algorithm/string/split.hpp ]
[ glob ../../../../boost/algorithm/string/iter_find.hpp ] [ glob ../../include/boost/algorithm/string/iter_find.hpp ]
[ glob ../../../../boost/algorithm/string/erase.hpp ] [ glob ../../include/boost/algorithm/string/erase.hpp ]
[ glob ../../../../boost/algorithm/string/join.hpp ] [ glob ../../include/boost/algorithm/string/join.hpp ]
[ glob ../../../../boost/algorithm/string/replace.hpp ] [ glob ../../include/boost/algorithm/string/replace.hpp ]
[ glob ../../../../boost/algorithm/string/find_format.hpp ] [ glob ../../include/boost/algorithm/string/find_format.hpp ]
[ glob ../../../../boost/algorithm/string/formatter.hpp ] [ glob ../../include/boost/algorithm/string/formatter.hpp ]
[ glob ../../../../boost/algorithm/string/regex.hpp ] [ glob ../../include/boost/algorithm/string/regex.hpp ]
[ glob ../../../../boost/algorithm/string/regex_find_format.hpp ] [ glob ../../include/boost/algorithm/string/regex_find_format.hpp ]
[ glob ../../../../boost/algorithm/string/trim_all.hpp ] [ glob ../../include/boost/algorithm/string/trim_all.hpp ]
: :
<doxygen:param>HIDE_UNDOC_MEMBERS=YES <doxygen:param>HIDE_UNDOC_MEMBERS=YES
<doxygen:param>EXTRACT_PRIVATE=NO <doxygen:param>EXTRACT_PRIVATE=NO

View File

@ -667,6 +667,13 @@
<functionname>is_space()</functionname> <functionname>is_space()</functionname>
</entry> </entry>
</row> </row>
<row>
<entry>is_blank</entry>
<entry>Recognize blanks</entry>
<entry>
<functionname>is_blank()</functionname>
</entry>
</row>
<row> <row>
<entry>is_alnum</entry> <entry>is_alnum</entry>
<entry>Recognize alphanumeric characters</entry> <entry>Recognize alphanumeric characters</entry>

View File

@ -7,6 +7,7 @@
# #
# See http://www.boost.org for updates, documentation, and revision history. # See http://www.boost.org for updates, documentation, and revision history.
project : requirements <library>/boost/algorithm//boost_algorithm ;
exe conv_example : conv_example.cpp ; exe conv_example : conv_example.cpp ;
exe predicate_example : predicate_example.cpp ; exe predicate_example : predicate_example.cpp ;

View File

@ -9,9 +9,11 @@
import testing ; import testing ;
project : requirements <library>/boost/algorithm//boost_algorithm ;
alias unit_test_framework alias unit_test_framework
: # sources : # sources
/boost//unit_test_framework /boost/test//boost_unit_test_framework
; ;
test-suite algorithm/string test-suite algorithm/string

View File

@ -139,6 +139,11 @@ void classification_test()
TEST_CLASS( is_any_of( "abc" ), "aaabbcc", "aaxb" ); TEST_CLASS( is_any_of( "abc" ), "aaabbcc", "aaxb" );
TEST_CLASS( is_from_range( 'a', 'c' ), "aaabbcc", "aaxb" ); TEST_CLASS( is_from_range( 'a', 'c' ), "aaabbcc", "aaxb" );
#ifndef BOOST_NO_CXX11
TEST_CLASS( is_blank(), " \t", "\t \n\r" );
TEST_CLASS( !is_blank(), "abc\n\v\f\r", "a x\t" );
#endif
TEST_CLASS( !is_classified(std::ctype_base::space), "...", "..\n\r\t " ); TEST_CLASS( !is_classified(std::ctype_base::space), "...", "..\n\r\t " );
TEST_CLASS( ( !is_any_of("abc") && is_from_range('a','e') ) || is_space(), "d e", "abcde" ); TEST_CLASS( ( !is_any_of("abc") && is_from_range('a','e') ) || is_space(), "d e", "abcde" );

View File

@ -9,9 +9,11 @@
import testing ; import testing ;
project : requirements <library>/boost/algorithm//boost_algorithm ;
alias unit_test_framework alias unit_test_framework
: # sources : # sources
/boost//unit_test_framework /boost/test//boost_unit_test_framework
; ;