Compare commits

...

8 Commits

14 changed files with 441 additions and 362 deletions

View File

@ -1,3 +1,30 @@
# Generated by `boostdep --cmake static_string`
# Copyright 2020 Peter Dimov
# Distributed under the Boost Software License, Version 1.0.
# https://www.boost.org/LICENSE_1_0.txt
cmake_minimum_required(VERSION 3.5...3.16)
project(boost_static_string VERSION "${BOOST_SUPERPROJECT_VERSION}" LANGUAGES CXX)
if(NOT CMAKE_SOURCE_DIR STREQUAL CMAKE_CURRENT_SOURCE_DIR)
add_library(boost_static_string INTERFACE)
add_library(Boost::static_string ALIAS boost_static_string)
target_include_directories(boost_static_string INTERFACE include)
target_link_libraries(boost_static_string
INTERFACE
Boost::assert
Boost::container_hash
Boost::static_assert
Boost::throw_exception
Boost::utility
)
else()
#
# Copyright (c) 2016-2017 Vinnie Falco (vinnie dot falco at gmail dot com)
#
@ -7,12 +34,6 @@
# Official repository: https://github.com/boostorg/static_string
#
cmake_minimum_required (VERSION 3.5.1)
if (POLICY CMP0074)
cmake_policy (SET CMP0074 NEW)
endif()
#-------------------------------------------------------------------------------
function (DoGroupSources curdir rootdir folder)
@ -40,8 +61,6 @@ endfunction()
#
#-------------------------------------------------------------------------------
project (StaticString VERSION 1)
set_property (GLOBAL PROPERTY USE_FOLDERS ON)
if (MSVC)
@ -150,3 +169,5 @@ file (GLOB_RECURSE PROJECT_FILES
)
add_subdirectory (test)
endif()

View File

@ -101,26 +101,13 @@ make common.xsl : $(docca)/include/docca/common.xsl
make stage1.xsl : $(docca)/include/docca/stage1.xsl : @copy_script ;
make base-stage1.xsl : $(docca)/include/docca/base-stage1.xsl : @copy_script ;
make stage2.xsl : $(docca)/include/docca/stage2.xsl : @copy_script ;
make base-stage2.xsl : $(docca)/include/docca/base-stage2.xsl : @copy_script ;
make assemble-quickbook.xsl : $(docca)/include/docca/assemble-quickbook.xsl : @copy_script ;
make emphasized-types.xsl : $(docca)/include/docca/emphasized-types.xsl : @copy_script ;
make base-config.xsl : $(docca)/include/docca/base-config.xsl : @copy_script ;
make config.xsl
:
$(docca)/include/docca/config.xsl
xsl/config.xsl
xsl/class_detail.xsl
xsl/includes.xsl
:
@make_config
;
actions make_config
{
cp $(2[1]) $(1)
sed -i -e "/<!-- CONFIG_TEMPLATE -->/{r $(2[2])" -e "d}" $(1)
sed -i -e "/<!-- CLASS_DETAIL_TEMPLATE -->/{r $(2[3])" -e "d}" $(1)
sed -i -e "/<!-- INCLUDES_TEMPLATE -->/{r $(2[4])" -e "d}" $(1)
}
# Copy the project-specific config XSLT
make custom-overrides.xsl : xsl/custom-overrides.xsl : @copy_script ;
# Make a copy of the given file.
#
@ -145,7 +132,8 @@ make xml-pages.xml
# Make bjam aware of additional dependencies
base-extract-xml-pages.xsl
config.xsl
base-config.xsl
custom-overrides.xsl
common.xsl
:
saxonhe.saxonhe
@ -176,7 +164,8 @@ make stage1/results
# additional dependencies
xml-pages.xml
base-stage1.xsl
config.xsl
base-config.xsl
custom-overrides.xsl
common.xsl
:
saxonhe.saxonhe_dir
@ -189,6 +178,10 @@ make stage2/results
# additional dependencies
emphasized-types.xsl
base-stage2.xsl
base-config.xsl
custom-overrides.xsl
common.xsl
:
saxonhe.saxonhe_dir
;

View File

@ -32,6 +32,7 @@
[template include_file[path][^<'''<ulink url="../../../../'''[path]'''">'''[path]'''</ulink>'''>]]
[def __InputIterator__ [@https://en.cppreference.com/w/cpp/named_req/InputIterator ['InputIterator]]]
[def __UnaryPredicate__ [@https://en.cppreference.com/w/cpp/named_req/Predicate ['Predicate]]]
[/-----------------------------------------------------------------------------]

View File

@ -1,3 +0,0 @@
<!-- CLASS_DETAIL_TEMPLATE BEGIN -->
<xsl:when test="$normal-tparam = 'InputIterator'"><xsl:text>__InputIterator__</xsl:text></xsl:when>
<!-- CLASS_DETAIL_TEMPLATE END -->

View File

@ -1,6 +0,0 @@
<!-- Variables (Edit for your project) -->
<xsl:variable name="doc-ref" select="'static_string.ref'"/>
<xsl:variable name="doc-ns" select="'boost::static_strings'"/>
<xsl:variable name="debug" select="0"/>
<xsl:variable name="private" select="0"/>
<!-- End Variables -->

View File

@ -0,0 +1,11 @@
<xsl:stylesheet version="3.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:xs="http://www.w3.org/2001/XMLSchema"
exclude-result-prefixes="xs"
expand-text="yes">
<xsl:variable name="doc-ref" select="'static_string.ref'"/>
<xsl:variable name="doc-ns" select="'boost::static_strings'"/>
<xsl:variable name="include-private-members" select="false()"/>
</xsl:stylesheet>

View File

@ -1,5 +0,0 @@
<!-- INCLUDES_TEMPLATE BEGIN -->
<xsl:text>Defined in header [include_file </xsl:text>
<xsl:value-of select="substring-after($file,'include/')"/>
<xsl:text>]&#xd;&#xd;</xsl:text>
<!-- INCLUDES_TEMPLATE END -->

View File

@ -1,7 +0,0 @@
<!-- INCLUDES_FOOT_TEMPLATE BEGIN -->
<xsl:choose>
<xsl:when test="contains($file, 'supercalifragilisticexpialidocious')">
<xsl:text>&#xd;&#xd;Easter Egg&#xd;</xsl:text>
</xsl:when>
</xsl:choose>
<!-- INCLUDES_FOOT_TEMPLATE END -->

View File

@ -5614,6 +5614,31 @@ operator+(
std::size_t(0), +lhs);
}
//------------------------------------------------------------------------------
//
// erase_if
//
//------------------------------------------------------------------------------
template<
std::size_t N, typename CharT,
typename Traits, typename UnaryPredicate>
BOOST_STATIC_STRING_CPP14_CONSTEXPR
typename
basic_static_string<N, CharT, Traits>::size_type
erase_if(
basic_static_string<N, CharT, Traits>& str,
UnaryPredicate pred)
{
auto first = str.begin();
for (auto it = first; it != str.end(); ++it)
if (!pred(*it))
*first++ = std::move(*it);
const auto count = str.end() - first;
str.erase(first, str.end());
return count;
}
//------------------------------------------------------------------------------
//
// swap
@ -5845,7 +5870,7 @@ to_static_wstring(long double value) noexcept
#ifdef BOOST_STATIC_STRING_USE_DEDUCT
template<std::size_t N, typename CharT>
basic_static_string(CharT(&)[N]) ->
basic_static_string(const CharT(&)[N]) ->
basic_static_string<N, CharT, std::char_traits<CharT>>;
#endif

View File

@ -11,6 +11,8 @@
"String"
],
"maintainers": [
"Krystian Stasiowski <sdkrystian@gmail.com>"
]
"Krystian Stasiowski <sdkrystian@gmail.com>",
"Vinnie Falco <vinnie.falco@gmail.com>"
],
"cxxstd": "11"
}

View File

@ -16,6 +16,7 @@
#include <boost/core/lightweight_test.hpp>
#include <cstdlib>
#include <cwchar>
#include <cctype>
#include <sstream>
#include <string>
@ -1848,6 +1849,51 @@ testErase()
BOOST_TEST(testE(S("abcdefghijklmnopqrst"), 21, 0, S("can't happen")));
}
// done
static
void
testEraseIf()
{
// erase_if(static_string& str, UnaryPredicate pred)
{
static_string<3> s{""};
BOOST_TEST(erase_if(s, [](char c) { return c == 'a'; }) == 0);
BOOST_TEST(s == "");
BOOST_TEST(*s.end() == 0);
}
{
static_string<3> s{"aaa"};
BOOST_TEST(erase_if(s, [](char c) { return c == 'a'; }) == 3);
BOOST_TEST(s == "");
BOOST_TEST(*s.end() == 0);
}
{
static_string<3> s{"abc"};
BOOST_TEST(erase_if(s, [](char c) { return c == 'a'; }) == 1);
BOOST_TEST(s == "bc");
BOOST_TEST(*s.end() == 0);
}
{
static_string<3> s{"abc"};
BOOST_TEST(erase_if(s, [](char c) { return c == 'b'; }) == 1);
BOOST_TEST(s == "ac");
BOOST_TEST(*s.end() == 0);
}
{
static_string<3> s{"abc"};
BOOST_TEST(erase_if(s, [](char c) { return c == 'c'; }) == 1);
BOOST_TEST(s == "ab");
BOOST_TEST(*s.end() == 0);
}
{
static_string<3> s{"abc"};
BOOST_TEST(erase_if(s, [](char c) { return c == 'd'; }) == 0);
BOOST_TEST(s == "abc");
BOOST_TEST(*s.end() == 0);
}
}
// done
static
void
@ -7171,6 +7217,7 @@ runTests()
testClear();
testInsert();
testErase();
testEraseIf();
testPushBack();
testPopBack();
testAppend();