Merge pull request #807 from kuzkry/implemented_features

Add a table of features
This commit is contained in:
Jordan Maples [MSFT] 2020-08-13 09:34:31 -07:00 committed by GitHub
commit 83ce710d6c
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

View File

@ -5,8 +5,6 @@ The Guidelines Support Library (GSL) contains functions and types that are sugge
[C++ Core Guidelines](https://github.com/isocpp/CppCoreGuidelines) maintained by the [Standard C++ Foundation](https://isocpp.org). [C++ Core Guidelines](https://github.com/isocpp/CppCoreGuidelines) maintained by the [Standard C++ Foundation](https://isocpp.org).
This repo contains Microsoft's implementation of GSL. This repo contains Microsoft's implementation of GSL.
The library includes types like `span<T>`, `string_span`, `owner<>` and others.
The entire implementation is provided inline in the headers under the [gsl](./include/gsl) directory. The implementation generally assumes a platform that implements C++14 support. The entire implementation is provided inline in the headers under the [gsl](./include/gsl) directory. The implementation generally assumes a platform that implements C++14 support.
While some types have been broken out into their own headers (e.g. [gsl/span](./include/gsl/span)), While some types have been broken out into their own headers (e.g. [gsl/span](./include/gsl/span)),
@ -21,6 +19,71 @@ This project has adopted the [Microsoft Open Source Code of Conduct](https://ope
# Usage of Third Party Libraries # Usage of Third Party Libraries
This project makes use of the [Google Test](https://github.com/google/googletest) testing library. Please see the [ThirdPartyNotices.txt](./ThirdPartyNotices.txt) file for details regarding the licensing of Google Test. This project makes use of the [Google Test](https://github.com/google/googletest) testing library. Please see the [ThirdPartyNotices.txt](./ThirdPartyNotices.txt) file for details regarding the licensing of Google Test.
# Supported features
## Microsoft GSL implements the following from the C++ Core Guidelines:
Feature | Supported? | Description
-----------------------------------|:----------:|-------------
[**1. Views**][cg-views] | |
owner | &#x2611; | an alias for a raw pointer
not_null | &#x2611; | restricts a pointer / smart pointer to hold non-null values
strict_not_null | &#x2611; | a stricter version of `not_null` with explicit constructors
span | &#x2611; | a view over a contiguous sequence of memory. Based on the standardized verison of `std::span`, however `gsl::span` enforces bounds checking.
span_p | &#x2610; | spans a range starting from a pointer to the first place for which the predicate is true
basic_zstring | &#x2611; | a pointer to a C-string (zero-terminated array) with a templated char type
zstring | &#x2611; | an alias to `basic_zstring` with a char type of char
czstring | &#x2611; | an alias to `basic_zstring` with a char type of const char
wzstring | &#x2611; | an alias to `basic_zstring` with a char type of wchar_t
cwzstring | &#x2611; | an alias to `basic_zstring` with a char type of const wchar_t
u16zstring | &#x2611; | an alias to `basic_zstring` with a char type of char16_t
cu16zstring | &#x2611; | an alias to `basic_zstring` with a char type of const char16_t
u32zstring | &#x2611; | an alias to `basic_zstring` with a char type of char32_t
cu32zstring | &#x2611; | an alias to `basic_zstring` with a char type of const char32_t
basic_string_span | &#x2611; | like `span` but for strings with a templated char type
string_span | &#x2611; | an alias to `basic_string_span` with a char type of char
cstring_span | &#x2611; | an alias to `basic_string_span` with a char type of const char
wstring_span | &#x2611; | an alias to `basic_string_span` with a char type of wchar_t
cwstring_span | &#x2611; | an alias to `basic_string_span` with a char type of const wchar_t
u16string_span | &#x2611; | an alias to `basic_string_span` with a char type of char16_t
cu16string_span | &#x2611; | an alias to `basic_string_span` with a char type of const char16_t
u32string_span | &#x2611; | an alias to `basic_string_span` with a char type of char32_t
cu32string_span | &#x2611; | an alias to `basic_string_span` with a char type of const char32_t
[**2. Owners**][cg-owners] | |
unique_ptr | &#x2611; | an alias to `std::unique_ptr`
shared_ptr | &#x2611; | an alias to `std::shared_ptr`
stack_array | &#x2610; | a stack-allocated array
dyn_array | &#x2610; | a heap-allocated array
[**3. Assertions**][cg-assertions] | |
Expects | &#x2611; | a precondition assertion; on failure it terminates
Ensures | &#x2611; | a postcondition assertion; on failure it terminates
[**4. Utitilies**][cg-utilities] | |
move_owner | &#x2610; | a helper function that moves one `owner` to the other
byte | &#x2611; | either an alias to std::byte or a byte type
final_action | &#x2611; | a RAII style class that invokes a functor on its destruction
finally | &#x2611; | a helper function instantiating `final_action`
GSL_SUPPRESS | &#x2611; | a macro that takes an argument and turns it into `[[gsl::suppress(x)]]` or `[[gsl::suppress("x")]]`
[[implicit]] | &#x2610; | a "marker" to put on single-argument constructors to explicitly make them non-explicit
index | &#x2611; | a type to use for all container and array indexing (currently an alias for std::ptrdiff_t)
joining_thread | &#x2610; | a RAII style version of `std::thread` that joins
narrow | &#x2611; | a checked version of narrow_cast; it can throw `narrowing_error`
narrow_cast | &#x2611; | a narrowing cast for values and a synonym for static_cast
narrowing_error | &#x2611; | a custom exception type thrown by `narrow()`
[**5. Concepts**][cg-concepts] | &#x2610; |
## The following features do not exist in C++ Core Guidelines:
Feature | Supported? | Description
-----------------------------------|:----------:|-------------
multi_span | &#x2610; | Deprecated. Support for this type has been discontinued.
strided_span | &#x2610; | Deprecated. Support for this type has been discontinued.
This is based on [CppCoreGuidelines semi-specification](https://github.com/isocpp/CppCoreGuidelines/blob/master/CppCoreGuidelines.md#gsl-guidelines-support-library).
[cg-views]: https://github.com/isocpp/CppCoreGuidelines/blob/master/CppCoreGuidelines.md#gslview-views
[cg-owners]: https://github.com/isocpp/CppCoreGuidelines/blob/master/CppCoreGuidelines.md#gslowner-ownership-pointers
[cg-assertions]: https://github.com/isocpp/CppCoreGuidelines/blob/master/CppCoreGuidelines.md#gslassert-assertions
[cg-utilities]: https://github.com/isocpp/CppCoreGuidelines/blob/master/CppCoreGuidelines.md#gslutil-utilities
[cg-concepts]: https://github.com/isocpp/CppCoreGuidelines/blob/master/CppCoreGuidelines.md#gslconcept-concepts
# Quick Start # Quick Start
## Supported Compilers ## Supported Compilers
The GSL officially supports the current and previous major release of MSVC, GCC, Clang, and XCode's Apple-Clang. The GSL officially supports the current and previous major release of MSVC, GCC, Clang, and XCode's Apple-Clang.