2d68b2c593 String: Add str_if_stable() as a const alternative to str()
a0841b59bd String: Add support for a ""_s string literal syntax
9d5fe8e96a String: Add 'borrow' member to construct borrowing instances
80802a002c String: Add support for concatenation by operator+
ff69763ca0 String: Add a custom string type
410a3e4b22 Add support for using C++17 string_view or a fallback
Acked-by: Kitware Robot <kwrobot@kitware.com>
Acked-by: Daniel Pfeifer <daniel@pfeifer-mail.de>
Acked-by: Pavel Solodovnikov <hellyeahdominate@gmail.com>
Merge-request: !2578
Offer clients a `project()`-centric view of the build system. This is
similar to the directory-centric view but consolidates subdirectories
that do not call `project()` with a new project name.
Issue: #18398
Co-Author: Kyle Edwards <kyle.edwards@kitware.com>
The introduction of policy CMP0082, to run subdirectory install
rules in the correct order, caused a regression in server mode
where any directory with a subdirectory is marked as having an
install rule even if no "real" install rules are present. This
change fixes this regression for server mode.
33f08eec18 cmOutputConverter: Moved ContainedInDirectory to cmStateDirectory
87e810f223 cmOutputConverter: Moved ForceToRelativePath to cmSystem
Acked-by: Kitware Robot <kwrobot@kitware.com>
Merge-request: !2665
The `str()` method must be non-const because it may need to internally
mutate the representation of the string in order to have an owned
`std::string` instance holding the exact string (not a superstring).
This is inconvenient in contexts where we can ensure that no mutation
is needed to get a `std::string const&`.
Add a `str_if_stable() const` method that returns `std::string const*`
so we can return `nullptr` if if mutation would be necessary to get a
`std::string const&`. Add supporting `is_stable() const` and
`stabilize()` methods to check and enforce stable availability of
`std::string const&`. These can be used to create `String const`
instances from which we can still get a `std::string const&` via
`*str_if_stable()` by maintaining the stability invariant at runtime.
This will allow creation of `cm::String` instances that borrow from
non-owned storage. It is the caller's responsibility to ensure that
no copy of the instance outlives the borrowed buffer.
Create a `cm::String` type that holds a view of a string buffer and
optionally shares ownership of the buffer. Instances can either
borrow longer-lived storage (e.g. static storage of string literals)
or internally own a `std::string` instance. In the latter case,
share ownership with copies and substrings. Allocate a new internal
string only on operations that require mutation.
This will allow us to recover string sharing semantics that we
used to get from C++98 std::string copy-on-write implementations.
Such implementations are not allowed by C++11 so code our own in
a custom string type instead.