Added new fonts

Added new documentation
This commit is contained in:
John Wellbelove 2026-03-24 00:08:10 +00:00
parent bb284f98a8
commit da8831eaae
16 changed files with 649 additions and 235 deletions

View File

@ -0,0 +1,78 @@
---
title: "Setup"
---
---
This page describes the steps needed to integrate the ETL with your project.
The ETL requires no special installation. Just copy or clone the GitHub project into an appropriate directory.
For additional information pertaining to compilers, see this page.
The ETL does not depend on the STL, but can use the algorithms and definitions from it, if the project does.
This is controlled by the ETL_NO_STL macro. If this macro is defined in the profile then the ETL will use its own reverse engineered versions.
See No STL
## User defined files
The user may create a file named `etl_profile.h` that exists in the include path for the project.
The file will define any ETL configuration macros. See here for further information.
This header is included from ETL's `platform.h`
An example of `etl_profile.h` could be:-
```C++
#ifndef ETL_PROFILE_H
#define ETL_PROFILE_H
#define ETL_THROW_EXCEPTIONS
#define ETL_VERBOSE_ERRORS
#define ETL_CHECK_PUSH_POP
#endif
```
There are several example profiles available in the ETL's `profiles/` directory. They may be used as a base for your own project specific variant.
If `etl_profile.h` does not exist then `platform.h` will attempt to automatically deduce the development OS, compiler
type, version and language support level.
## platform.h
This header is defined by the ETL and is included in all ETL headers. It will attempt to identify the development OS, compiler and language support level. Using this information it will define various ETL configuration macros.
The user does not need to modify this file.
## Additional include directories
The compiler will normally expect paths to additional include directories to be specified
A path to `etl/include` would normally be set, allowing header files to be specified as follows:-
```C++
#include "etl/vector.h"
#include "etl/fsm.h"
```
A path to a user generated `etl_profile.h` must be defined.
## WSL
There is a WSL Ubuntu image for running unit tests on Windows Subsystem for Linux.
## Arduino
The ETL is available through the Arduino library manager.
## Missing <new>
The Arduino is often not supplied with a definition of the header `<new>` causing compilation to fail.
One option, if you have this problem, is to define your own empty header `new`.
## STL
The Arduino programming platform is not supplied with an implementation of the STL. Probably the best option for Arduino users to define ETL_NO_STL which will allow the ETL to be compiled without the standard library.
If `ETL_NO_STL` is not defined then one must be acquired.
A suitable STL implementation may be downloaded from the Arduino library resource. It is called ArduinoSTL.
Add `#include <ArduinoSTL.h>` to the start of every file that uses the ETL.
Remember to add the directory to the include path.
## PlatformIO
Many people are now using PlatformIO in conjunction with Visual Studio Code, which supports many platforms, including Arduino.
## Compatibility with CppUTest
There are some issues with using the ETL with a project that uses CppUTest for unit testing.
The unit test library redefines the new operator. The ETL uses 'placement new' in many of its classes and the CppUTest redefinition breaks this functionality.
To allow CppUTest to work with the ETL these macros must be disabled, either by commenting them out in the source files or removing the header files from the Makefile. A recompilation of CppUTest will be necessary.

View File

@ -0,0 +1,4 @@
---
title: "Getting started"
weight: 2
---

76
docs/Is the ETL free.md Normal file
View File

@ -0,0 +1,76 @@
---
title: "Is the ETL free?"
# Force it to the top of the list
weight: 1
# Disable the Table of Contents entirely for this page
toc: false
---
---
The ETL is free for you or your company to use, including in commercial applications.
*However, it is not free for me to create or maintain.*
## Why Open Source Needs Support
Development, support, documentation, testing, and hosting all require time and resources.
*Currently, this work is carried entirely by me, usually without compensation.*
As the ETL has grown in functionality and popularity, so has the workload. In some weeks, maintaining the project takes over 30 hours. Without financial support, this is difficult to sustain alongside paid work and personal obligations.
## Why Sponsor the Embedded Template Library (ETL)?
The Embedded Template Library (ETL) is a modern, high-performance C++ library designed specifically for embedded systems. It provides STL-like functionality for environments where efficiency, reliability, and low overhead are essential.
The ETL is used by hobbyists, engineers, and international companies developing commercial embedded products. Yet it is maintained by a single developer in their spare time.
If the ETL has helped your project or become part of your development toolset, please consider supporting its continued growth.
## Why Sponsorship Matters
- **Sustainability**
Ongoing support helps keep the library maintained and up to date.
- **Reliability**
Sponsorship allows for regular testing, bug fixes, and improvements.
- **Responsibility**
Supporting the tools you depend on strengthens the software ecosystem.
- **Recognition**
Sponsors can be publicly acknowledged if desired.
Whether you use the ETL in personal projects or commercial products, your support helps keep it available and improving.
The ETL began as a way to share years of embedded development experience. Since 2014, it has grown into a feature-rich and widely used library.
*But it is still powered by one developer, without corporate funding.*
If you or your company benefit from the ETL, please consider becoming a sponsor. Even small contributions help cover hosting, tools, and time spent supporting the library and its users.
[Why CFOs should care about Open Source software](https://opensourcepledge.com/blog/CFOs-care-about-OSS/)
## How to sponsor
There are two ways that you can help me with the maintenance and further development of the library.
**Through the GitHub donations link.**
[Github sponsors](https://github.com/sponsors/ETLCPP)
---
**By direct bank transfer**
Donations are accepted in many world currencies.
AED, AUD, BGN, CAD, CHF, CLP, COP, CZK, DKK, EGP, EUR, GBP, HKD, HUF, ILS, INR, ISK, JPY, KRW,
KZT, MAD, MXN, NOK, NZD, PHP, PLN, QAR, RON, RSD, SAR, SEK, SGD, THB, TRY, USD, ZAR
I can supply invoices for companies that require one for accounting and tax purposes.
**UK**
Beneficiary John Wellbelove
Account 12655643
Sort code 04-00-75
**Swift (International)**
Beneficiary John Wellbelove
IBAN GB17 REVO 0099 7000 7513 26
BIC REVOGB21
Many thanks for any support you can give to keep this project actively supported,
*John Wellbelove*

View File

@ -1,6 +0,0 @@
plugins:
- jekyll-relative-links
relative_links:
enabled: true
include:
- manchester.md

View File

@ -1,8 +1,13 @@
---
title: "Embedded Template Library"
alwaysopen: true
---
---
{{< callout emoji="❓">}}
### [Is the ETL free?]({{< ref "Is the ETL free.md" >}})
{{< /callout >}}
## Motivation

View File

@ -5,15 +5,17 @@ weight: 1
---
#### Header: `delegate.h`
#### Support: `20.45.0`
#### Similar to: `std::function`
{{< callout type="info">}}
Header: `delegate.h`
Support: `20.45.0`
Similar to: [std::function](https://en.cppreference.com/w/cpp/utility/functional/function.html)
{{< /callout >}}
A small, in-place function wrapper that stores callable objects inside a fixed-size buffer (no dynamic allocation). It supports free functions, member functions, functors, and lambdas, with both runtime and compile-time bindings.
```C++
template <typename TSignature,
size_t Object_Size = ETL_DEFAULT_INPLACE_FUNCTION_SIE,
size_t Object_Size = ETL_DEFAULT_INPLACE_FUNCTION_SIZE,
size_t Object_Alignment = ETL_DEFAULT_INPLACE_FUNCTION_ALIGNMENT>
class inplace_function;
```
@ -21,8 +23,8 @@ class inplace_function;
The defaults are defined as follows:-
```C++
#if !defined(ETL_DEFAULT_INPLACE_FUNCTION_SIE)
#define ETL_DEFAULT_INPLACE_FUNCTION_SIE 32
#if !defined(ETL_DEFAULT_INPLACE_FUNCTION_SIZE)
#define ETL_DEFAULT_INPLACE_FUNCTION_SIZE 32
#endif
```
@ -46,8 +48,8 @@ The function signature. e.g. `int(char, float)`
```C++
Object_Size
```
Size of the internal storage buffer.
Defaults to `ETL_DEFAULT_INPLACE_FUNCTION_SIE`.
Size of the internal storage buffer.
Defaults to `ETL_DEFAULT_INPLACE_FUNCTION_SIZE`.
---
@ -89,24 +91,33 @@ argument_types
## Constructors
**Description**
Default constructor.
**Description**
Copy/move constructors.
**Description**
Construction from a free function pointer.
**Description**
Construction from an object + member function pointer (const or non-const).
**Description**
Construction from a lambda/functor (const or non-const).
## Assignment
**Description**
Copy/move assignment.
**Description**
Assignment from nullptr clears the target.
**Description**
Assignment from function pointer.
**Description**
Assignment from lambda/functor.
## Invocation
@ -114,21 +125,35 @@ Assignment from lambda/functor.
```C++
operator()
```
**Description**
Invokes the bound callable and asserts if uninitialised.
**Parameters**
**Returns**
---
```C++
call_if(...)
```
For `void` return bool indicating whether it executed.
For non-void returns etl::optional<TReturn>.
**Description**
Calls the delegate function, if valid.
Indicates success in the return type.
**Parameters**
`TArgs...`
**Returns**
For `void` return `bool` indicating whether it executed.
For non-void returns `etl::optional<TReturn>`.
---
```C++
call_or(...)
```
**Description**
Invokes the target or a fallback callable.
## Observers
@ -136,6 +161,7 @@ Invokes the target or a fallback callable.
```C++
bool is_valid() const
```
**Returns**
Returns `true` if there is a valid callable.
---
@ -143,6 +169,11 @@ Returns `true` if there is a valid callable.
```C++
explicit operator bool() const
```
**Description**
**Parameters**
**Returns**
Returns the result of `is_valid()`
## Modifiers
@ -150,6 +181,7 @@ Returns the result of `is_valid()`
```C++
void clear()
```
**Description**
Clears any stored callable.
---
@ -157,6 +189,7 @@ Clears any stored callable.
```C++
void swap(inplace_function& other)
```
**Description**
Swaps with another inplace_function.
---
@ -166,6 +199,7 @@ Swaps with another inplace_function.
```C++
static constexpr size_t size()
```
**Returns**
Returns the size of the internal storage.
---
@ -173,6 +207,7 @@ Returns the size of the internal storage.
```C++
static constexpr size_t alignment()
```
**Returns**
Returns the alignment of the internal storage.
## Compile-Time Binding (No Payload)
@ -193,6 +228,7 @@ inplace_function<TReturn(TArgs...),
Object_Size,
Object_Alignment> create()
```
**Description**
Creates an `etl::inplace_function` using `Function`.
### Member function + instance (external linkage)
@ -201,6 +237,7 @@ Creates an `etl::inplace_function` using `Function`.
template <typename TObject, TReturn(TObject::*Method)(TArgs...), TObject& Instance>
set<TObject, &TMethod, Instance>()
```
**Description**
Sets the callable to the member function `Method` for the object `Instance`.
---
@ -208,44 +245,53 @@ Sets the callable to the member function `Method` for the object `Instance`.
```C++
create<TObject, &TMethod, Instance>()
```
**Description**
### Callable object + instance (operator())
```C++
set<T, Instance>()
```
**Description**
```C++
create<T, Instance>()
```
**Description**
## Helper Aliases
```C++
etl::inplace_function_for<TSignature, TStorage>
```
**Description**
```C++
etl::inplace_function_for_any<TSignature, T0, ...>
```
**Description**
## Helper Factories
```C++
make_inplace_function(function_ptr)
```
**Description**
```C++
make_inplace_function(obj, &Type::Method)
```
**Description**
```C++
make_inplace_function(lambda_or_functor)
```
**Description**
```C++
make_inplace_function<TSignature>(function_like)
```
**Description**
C++17-only overloads also exist for compile-time binding.

View File

@ -5,15 +5,17 @@ weight: 1
---
#### Header: `inplace_function.h`
#### Support: `20.45.0`
#### Similar to: `std::function`
{{< callout type="info">}}
Header: `inplace_function.h`
Support: `20.45.0`
Similar to: [std::function](https://en.cppreference.com/w/cpp/utility/functional/function.html)
{{< /callout >}}
A small, in-place function wrapper that stores callable objects inside a fixed-size buffer (no dynamic allocation). It supports free functions, member functions, functors, and lambdas, with both runtime and compile-time bindings.
```C++
template <typename TSignature,
size_t Object_Size = ETL_DEFAULT_INPLACE_FUNCTION_SIE,
size_t Object_Size = ETL_DEFAULT_INPLACE_FUNCTION_SIZE,
size_t Object_Alignment = ETL_DEFAULT_INPLACE_FUNCTION_ALIGNMENT>
class inplace_function;
```
@ -21,8 +23,8 @@ class inplace_function;
The defaults are defined as follows:-
```C++
#if !defined(ETL_DEFAULT_INPLACE_FUNCTION_SIE)
#define ETL_DEFAULT_INPLACE_FUNCTION_SIE 32
#if !defined(ETL_DEFAULT_INPLACE_FUNCTION_SIZE)
#define ETL_DEFAULT_INPLACE_FUNCTION_SIZE 32
#endif
```
@ -32,26 +34,32 @@ The defaults are defined as follows:-
#endif
```
Set your own definitions in `etl_profile.h` if you require different defaults.
Set your own definitions if you require different defaults.
## Template Parameters
```C++
TSignature
```
The function signature.
e.g. `int(char, float)`
**Description**
The function signature. e.g. `int(char, float)`
---
```C++
Object_Size
```
**Description**
Size of the internal storage buffer.
Defaults to `ETL_DEFAULT_INPLACE_FUNCTION_SIZE`.
---
```C++
Object_Alignment
```
Alignment of the internal storage buffer.
**Description**
Alignment of the internal storage buffer.
Defaults to `ETL_DEFAULT_INPLACE_FUNCTION_ALIGNMENT`.
## Exceptions
@ -59,77 +67,133 @@ Defaults to `ETL_DEFAULT_INPLACE_FUNCTION_ALIGNMENT`.
```C++
etl::inplace_function_exception
```
**Description**
Base exception.
---
```C++
etl::inplace_function_uninitialized
```
**Description**
Thrown (via `ETL_ASSERT`) when invoked without a target.
---
## Member Types
```C++
function_type
```
**Description**
```C++
return_type
```
**Description**
```C++
argument_types
```
**Description**
## Constructors
**Description**
Default constructor.
**Description**
Copy/move constructors.
**Description**
Construction from a free function pointer.
**Description**
Construction from an object + member function pointer (const or non-const).
**Description**
Construction from a lambda/functor (const or non-const).
## Assignment
**Description**
Copy/move assignment.
---
**Description**
Assignment from nullptr clears the target.
---
**Description**
Assignment from function pointer.
---
**Description**
Assignment from lambda/functor.
---
## Invocation
```C++
operator()
```
**Description**
Invokes the bound callable and asserts if uninitialised.
**Parameters**
**Returns**
---
```C++
call_if(...)
```
For `void` return bool indicating whether it executed.
For non-void returns etl::optional<TReturn>.
**Description**
Calls the delegate function, if valid.
Indicates success in the return type.
**Parameters**
`TArgs...`
**Returns**
For `void` return `bool` indicating whether it executed.
For non-void returns `etl::optional<TReturn>`.
---
```C++
call_or(...)
```
**Description**
Invokes the target or a fallback callable.
**Parameters**
**Returns**
## Observers
```C++
bool is_valid() const
```
**Returns**
Returns `true` if there is a valid callable.
---
```C++
explicit operator bool() const
```
**Description**
**Parameters**
**Returns**
Returns the result of `is_valid()`
## Modifiers
@ -137,23 +201,58 @@ Returns the result of `is_valid()`
```C++
void clear()
```
Clears any stored callable.
**Description**
Clears any stored callable.
**Parameters**
None
**Returns**
Void.
---
```C++
void swap(inplace_function& other)
```
**Description**
Swaps with another inplace_function.
**Parameters**
None
**Returns**
Void.
---
## Storage Introspection
```C++
static constexpr size_t size()
```
**Description**
Interogates the internal storage size.
**Parameters**
None
**Returns**
Returns the size of the internal storage.
---
```C++
static constexpr size_t alignment()
```
**Description**
Interogates the internal storage alignment.
**Parameters**
None
**Returns**
Returns the alignment of the internal storage.
## Compile-Time Binding (No Payload)
@ -166,12 +265,15 @@ void set()
```
Sets the callable to `Function`.
---
```C++
template <TReturn(*Function)(TArgs...)>
inplace_function<TReturn(TArgs...),
Object_Size,
Object_Alignment> create()
```
**Description**
Creates an `etl::inplace_function` using `Function`.
### Member function + instance (external linkage)
@ -180,49 +282,95 @@ Creates an `etl::inplace_function` using `Function`.
template <typename TObject, TReturn(TObject::*Method)(TArgs...), TObject& Instance>
set<TObject, &TMethod, Instance>()
```
**Description**
Sets the callable to the member function `Method` for the object `Instance`.
---
```C++
create<TObject, &TMethod, Instance>()
```
**Description**
**Parameters**
**Returns**
### Callable object + instance (operator())
```C++
set<T, Instance>()
```
**Description**
**Parameters**
**Returns**
```C++
create<T, Instance>()
```
**Description**
**Parameters**
**Returns**
## Helper Aliases
```C++
etl::inplace_function_for<TSignature, TStorage>
```
**Description**
**Parameters**
**Returns**
```C++
etl::inplace_function_for_any<TSignature, T0, ...>
```
**Description**
**Parameters**
**Returns**
## Helper Factories
```C++
make_inplace_function(function_ptr)
```
**Description**
**Parameters**
**Returns**
```C++
make_inplace_function(obj, &Type::Method)
```
**Description**
**Parameters**
**Returns**
```C++
make_inplace_function(lambda_or_functor)
```
**Description**
```C++
make_inplace_function<TSignature>(function_like)
```
**Description**
**Parameters**
**Returns**
C++17-only overloads also exist for compile-time binding.

View File

@ -3,7 +3,14 @@ title: Manchester encoding and decoding
weight: 1
---
Efficient Manchester encoding and decoding of data. The Manchester code represents a data bit as a sequence of a 'high' and a 'low' value. In software this translates to a conversion from one to two bits, or in a practical situation, from `n` bytes to `n*2` bytes.
---
{{< callout type="info">}}
Header: `manchester.h`
Support: `20.45.0`
{{< /callout >}}
Efficient Manchester encoding and decoding of data. The Manchester code represents a data bit as a sequence of a 'high' and a 'low' values. In software this translates to a conversion from one to two bits, or in a practical situation, from `n` bytes to `n*2` bytes.
## See also
@ -58,13 +65,11 @@ Comparing all 8 bit pairs in a 16-bit word is done as follows.
Most traditional ways to Manchester encode data consist of a loop over all bits and a nested if-statement to check the value of the current bit. This approach does not scale well to increasing number of bits. The algorithm implemented here contains no conditional code and scales well. Doubling the number of processed bits per step (the chunk size) adds a single row to the bit duplication table. Because of the lack of loops and conditional code, this algorithm is likely to perform better than traditional ones on simple processors or when compiler optimization is disabled. On modern, powerful processors with caches and advanced optimization possibilities this algorithm may not show much benefit. In any case, the performance of the algorithm depends heavily on the processor type, compiler and compiler (optimization) settings.
## API Reference
### Classes
## Classes
Classes `etl::manchester` and `etl::manchester_inverted` contain static functions for encoding, decoding and validity checking. It is not necessary to instantiate objects of these classes.
#### etl::manchester
### etl::manchester
```cpp
typedef manchester_base<private_manchester::manchester_type_normal> manchester;
@ -72,7 +77,7 @@ typedef manchester_base<private_manchester::manchester_type_normal> manchester;
Manchester encoder using normal encoding (no inversion).
#### etl::manchester_inverted
### etl::manchester_inverted
```cpp
typedef manchester_base<private_manchester::manchester_type_inverted> manchester_inverted;
@ -80,9 +85,9 @@ typedef manchester_base<private_manchester::manchester_type_inverted> manchester
Manchester encoder using inverted encoding.
### Encoding Functions
## Encoding Functions
#### Encode single value
### Encode single value
```cpp
template <typename TDecoded>
@ -91,21 +96,21 @@ static ETL_CONSTEXPR14 typename encoded<TDecoded>::type encode(TDecoded decoded)
Encodes a single value using Manchester encoding.
**Parameters:**
**Parameters**
- `decoded`: The value to encode (`uint8_t`, `uint16_t`, or `uint32_t`)
`decoded`: The value to encode (`uint8_t`, `uint16_t`, or `uint32_t`)
**Returns:**
**Returns**
- The Manchester encoded value (twice the bit width of input)
The Manchester encoded value (twice the bit width of input)
**Example:**
**Example**
```cpp
uint16_t encoded = etl::manchester::encode(0x55);
```
#### Encode range
### Encode range
```cpp
template <typename TChunk = uint_least8_t>
@ -115,16 +120,16 @@ static ETL_CONSTEXPR14 void encode(etl::span<const uint_least8_t> decoded,
Encodes a span of data using the specified chunk size.
**Parameters:**
**Parameters**
- `decoded`: Source data to encode
- `encoded`: Destination for encoded data (must be twice the size of `decoded`)
`decoded`: Source data to encode
`encoded`: Destination for encoded data (must be twice the size of `decoded`)
**Template Parameters:**
**Template Parameters**
- `TChunk`: Chunk size for encoding (`uint8_t`, `uint16_t` or `uint32_t`)
`TChunk`: Chunk size for encoding (`uint8_t`, `uint16_t` or `uint32_t`)
**Example:**
**Example**
```cpp
std::array<uint8_t, 4> data = {0x12, 0x34, 0x56, 0x78};
@ -138,51 +143,56 @@ etl::manchester::encode(data, encoded_data1);
etl::manchester::encode<uint32_t>(data, encoded_data2);
```
### Decoding Functions
## Decoding Functions
#### Decode single value
### Decode single value
```cpp
template <typename TEncoded>
static ETL_CONSTEXPR14 typename decoded<TEncoded>::type decode(TEncoded encoded)
```
**Description**
Decodes a single Manchester encoded value.
**Parameters:**
**Parameters**
- `encoded`: The encoded value to decode (`uint16_t`, `uint32_t`, or `uint64_t`)
`encoded`: The encoded value to decode (`uint16_t`, `uint32_t`, or `uint64_t`)
**Returns:**
**Returns**
- The Manchester decoded value (half the bit width of input)
The Manchester decoded value (half the bit width of input)
**Example:**
**Example**
```cpp
uint8_t decoded = etl::manchester::decode(0x5A5A);
```
---
#### Decode range
### Decode range
```cpp
template <typename TChunk = typename private_manchester::encoded<uint_least8_t>::type>
static ETL_CONSTEXPR14 void decode(etl::span<const uint_least8_t> encoded,
etl::span<uint_least8_t> decoded)
template <typename TChunk =
typename private_manchester::encoded<uint_least8_t>::type>
static ETL_CONSTEXPR14
void decode(etl::span<const uint_least8_t> encoded,
etl::span<uint_least8_t> decoded)
```
Decodes a span of Manchester encoded data.
**Parameters:**
**Parameters**
- `encoded`: Source data to decode
- `decoded`: Destination for decoded data (must be half the size of `encoded`)
`encoded`: Source data to decode
`decoded`: Destination for decoded data (must be half the size of `encoded`)
**Template Parameters:**
**Template Parameters**
- `TChunk`: Chunk type for decoding (`uint16_t`, `uint32_t`, or `uint64_t`)
`TChunk`: Chunk type for decoding (`uint16_t`, `uint32_t`, or `uint64_t`)
**Example:**
**Example**
```cpp
std::array<uint8_t, 8> encoded = {/* ... */};
@ -196,9 +206,9 @@ etl::manchester::decode(encoded, decoded1);
etl::manchester::decode<uint64_t>(encoded, decoded2);
```
### Validation Functions
## Validation Functions
#### Single value
### Single value
```cpp
template <typename TChunk>
@ -207,53 +217,53 @@ static ETL_CONSTEXPR14 bool is_valid(TChunk encoded)
Validates that a single value contains valid Manchester encoded data.
**Parameters:**
**Parameters**
- `encoded`: The encoded value to validate
`encoded`: The encoded value to validate
**Returns:**
**Returns**
- `true` if the value contains valid Manchester encoded data, `false` otherwise
`true` if the value contains valid Manchester encoded data, `false` otherwise
**Example:**
**Example**
```cpp
bool valid = etl::manchester::is_valid(0x5A5A);
```
#### Range
### Range
```cpp
static ETL_CONSTEXPR14 bool is_valid(etl::span<const uint_least8_t> encoded)
static
ETL_CONSTEXPR14
bool is_valid(etl::span<const uint_least8_t> encoded)
```
Validates that a range contains valid Manchester encoded data.
**Parameters:**
**Parameters**
- `encoded`: The range of encoded data to validate
`encoded`: The range of encoded data to validate
**Returns:**
**Returns**
- `true` if all data is valid Manchester encoding, `false` otherwise
`true` if all data is valid Manchester encoding, `false` otherwise
**Example:**
**Example**
```cpp
std::array<uint8_t, 8> encoded_data = {/* ... */};
bool valid = etl::manchester::is_valid(encoded_data);
```
## Supported Types
## Input/chunk types for encoding
### Input/chunk types for encoding
`uint8_t``uint16_t` (if 8-bit types are supported)
`uint16_t``uint32_t`
`uint32_t``uint64_t` (if 64-bit types are supported)
- `uint8_t``uint16_t` (if 8-bit types are supported)
- `uint16_t``uint32_t`
- `uint32_t``uint64_t` (if 64-bit types are supported)
## Input/chunk types for decoding
### Input/chunk types for decoding
- `uint16_t``uint8_t` (if 8-bit types are supported)
- `uint32_t``uint16_t`
- `uint64_t``uint32_t` (if 64-bit types are supported)
`uint16_t``uint8_t` (if 8-bit types are supported)
`uint32_t``uint16_t`
`uint64_t``uint32_t` (if 64-bit types are supported)

View File

@ -20,45 +20,45 @@ Click on the links to see the original Github page.
## 20.46.0
**Pull requests:**
#1257 Fix `year_month` arithmetic and correct `chrono` API behavior
[#1257](https://github.com/ETLCPP/etl/pull/1257) Fix `year_month` arithmetic and correct `chrono` API behavior
[#1259](https://github.com/ETLCPP/etl/pull/1259) Suppress warnings from std in optimized builds
[#1261](https://github.com/ETLCPP/etl/pull/1261) Fix incorrect namespace for `iter_swap` calls
#1262 Document how to implement platform specifics
#1264 Add template deduction guide for `span` from `vector`
#1265 Fix etl::tuple template signature error in pair assignment operator
#1266 Fix etl::as_bytes for etl::span<const T>
#1267 Update C++26 deprecated constructs to ensure future standard compliance
#1268 Remove some UB in test_vector_non_trivial.cpp
#1269 Deduce underlying storage size when constructing string_ext from char[].
#1271 Fix return value of get_token_list
#1275 Add etl::type_list API to more classes.
#1277 Fix for issue 1276 "Data corruption in the etl::bip_buffer_spsc_atomic"
#1281 Remove advance() on static spans
#1285 Manchester coding
#1286 Add missing includes
#1287 Move comparison operators of etl::expected to namespace etl
#1288 Add basic_format_arg constructor for ibasic_string
#1290 Add support for size_t and unsigned long to etl::format
#1291 Make typed_storage constructor constexpr
#1292 Add ref-qualifiers to basic_format_spec
#1299 Fix link rotations for etl::tree_node
#1303 Add constexpr to array comparison operators
#1304 Fix etl::variant get() for ambiguous types
#1307 Add more features to etl::type_list
#1308 Fix comparison and swap operators not in etl namespace
#1309 Reduce string flash usage
#1312 Enforce worse-case O(log n) dispatch for messages when using message router for c++11 and up
#1315 Add get endianness to byte stream reader
[#1262](https://github.com/ETLCPP/etl/pull/1262) Document how to implement platform specifics
[#1264](https://github.com/ETLCPP/etl/pull/1264) Add template deduction guide for `span` from `vector`
[#1265](https://github.com/ETLCPP/etl/pull/1265) Fix etl::tuple template signature error in pair assignment operator
[#1266](https://github.com/ETLCPP/etl/pull/1266) Fix etl::as_bytes for etl::span<const T>
[#1267](https://github.com/ETLCPP/etl/pull/1267) Update C++26 deprecated constructs to ensure future standard compliance
[#1268](https://github.com/ETLCPP/etl/pull/1268) Remove some UB in test_vector_non_trivial.cpp
[#1269](https://github.com/ETLCPP/etl/pull/1269) Deduce underlying storage size when constructing string_ext from char[].
[#1271](https://github.com/ETLCPP/etl/pull/1271) Fix return value of get_token_list
[#1275](https://github.com/ETLCPP/etl/pull/1275) Add etl::type_list API to more classes.
[#1277](https://github.com/ETLCPP/etl/pull/1277) Fix for issue 1276 "Data corruption in the etl::bip_buffer_spsc_atomic"
[#1281](https://github.com/ETLCPP/etl/pull/1281) Remove advance() on static spans
[#1285](https://github.com/ETLCPP/etl/pull/1285) Manchester coding
[#1286](https://github.com/ETLCPP/etl/pull/1286) Add missing includes
[#1287](https://github.com/ETLCPP/etl/pull/1287) Move comparison operators of etl::expected to namespace etl
[#1288](https://github.com/ETLCPP/etl/pull/1288) Add basic_format_arg constructor for ibasic_string
[#1290](https://github.com/ETLCPP/etl/pull/1290) Add support for size_t and unsigned long to etl::format
[#1291](https://github.com/ETLCPP/etl/pull/1291) Make typed_storage constructor constexpr
[#1292](https://github.com/ETLCPP/etl/pull/1292) Add ref-qualifiers to basic_format_spec
[#1299](https://github.com/ETLCPP/etl/pull/1299) Fix link rotations for etl::tree_node
[#1303](https://github.com/ETLCPP/etl/pull/1303) Add constexpr to array comparison operators
[#1304](https://github.com/ETLCPP/etl/pull/1304) Fix etl::variant get() for ambiguous types
[#1307](https://github.com/ETLCPP/etl/pull/1307) Add more features to etl::type_list
[#1308](https://github.com/ETLCPP/etl/pull/1308) Fix comparison and swap operators not in etl namespace
[#1309](https://github.com/ETLCPP/etl/pull/1309) Reduce string flash usage
[#1312](https://github.com/ETLCPP/etl/pull/1312) Enforce worse-case O(log n) dispatch for messages when using message router for c++11 and up
[#1315](https://github.com/ETLCPP/etl/pull/1315) Add get endianness to byte stream reader
## 20.45.0
**Issues:**
#1184 Request: Adding a method to check whether a etl::callback_timer_atomic is currently running
#1189 Request: make useage of osMutexRobust in etl::mutex optional
#1207 Monadic Operations for etl::expected
#1240 Add redundant semicolon checks to CMakeLists.txt and fix issues
#1241 Add -pedantic-errors to unit test CMakeLists.txt and fix issues
#1242 Add begin() and end() to etl::optional
[#1184](https://github.com/ETLCPP/etl/issues/1184) Request: Adding a method to check whether a etl::callback_timer_atomic is currently running
[#1189](https://github.com/ETLCPP/etl/issues/1189) Request: make useage of osMutexRobust in etl::mutex optional
[#1207](https://github.com/ETLCPP/etl/issues/1207) Monadic Operations for etl::expected
[#1240](https://github.com/ETLCPP/etl/issues/1240) Add redundant semicolon checks to CMakeLists.txt and fix issues
[#1241](https://github.com/ETLCPP/etl/issues/1241) Add -pedantic-errors to unit test CMakeLists.txt and fix issues
[#1242](https://github.com/ETLCPP/etl/issues/1242) Add begin() and end() to etl::optional
**Pull requests:**
#1204 Add etl::format

View File

@ -1,11 +1,12 @@
/* Definitions for light mode */
html:not(.dark) h1 {
color: coral !important;
}
html:not(.dark) h2 {
color: #4884cc !important;
border-bottom: 2px solid black !important;
color: royalblue !important;
border-bottom: 3px solid black !important;
}
html:not(.dark) h3,
@ -26,14 +27,14 @@ html:not(.dark) dl,
html:not(.dark) dl dt code,
html:not(.dark) dl dd {
color: black !important;
background-color: dddddd !important;
background-color: #eeeeee !important;
}
html:not(.dark) code,
html:not(.dark) pre,
html:not(.dark) pre code {
color: darkslategrey !important;
background-color: #dddddd !important;
color: black !important;
background-color: #eeeeee !important;
}
html:not(.dark) hr {
@ -41,9 +42,9 @@ html:not(.dark) hr {
}
html:not(.dark) .hx\:font-extrabold {
font-family: Tahoma, sans-serif !important;
font-family: Roboto, sans-serif !important;
font-size: 1.6rem !important;
color: black !important;
color: royalblue !important;
}
/* inactive */
@ -56,8 +57,11 @@ html:not(.dark) .hextra-sidebar-active-item {
color: black !important;
}
html:not(.dark) .content p.red-text {
color: red !important;
}
/* Definitions for dark mode */
html.dark body {
background-color: #1e1e1e !important;
}
@ -88,8 +92,8 @@ html.dark h1
}
html.dark h2 {
color: skyblue !important;
border-bottom: 2px solid #f0f0f0 !important;
color: #7099c7 !important;
border-bottom: 3px solid #f0f0f0 !important;
}
html.dark h3,
@ -120,7 +124,7 @@ html.dark hr {
}
html.dark .hx\:font-extrabold {
font-family: Tahoma, sans-serif !important;
font-family: Roboto, sans-serif !important;
font-size: 1.6rem !important;
color: #7099c7 !important;
}
@ -135,10 +139,53 @@ html.dark .hextra-sidebar-active-item {
color: white !important;
}
html.dark .content p.red-text {
color: salmon !important;
}
/* Common definitions */
@font-face {
font-family: Roboto;
src: url('/fonts/roboto-v51-latin-regular.woff2') format('woff2');
font-weight:500;
font-style: normal;
}
@font-face {
font-family: 'Roboto Mono';
src: url('/fonts/roboto-mono-v31-latin-500.woff2') format('woff2');
font-weight: nornal;
font-style: normal;
}
/* Regular item hover */
.hextra-sidebar-item a:hover,
.hextra-sidebar-item a:hover span {
background-color: rgb(250, 195, 175) !important;
color: black !important;
}
/* Active item default + hover - must come AFTER regular hover */
.hextra-sidebar-item[data-active="true"] a,
.hextra-sidebar-item[data-active="true"] a span,
.hextra-sidebar-item[data-active="true"] a:hover,
.hextra-sidebar-item[data-active="true"] a:hover span {
background-color: coral !important;
color: #ffffff !important;
}
.content ul li {
font-family: Roboto, sans-serif !important;
font-style: normal !important;
font-weight: normal !important;
font-size: 110% !important;
}
h1 {
font-family: Tahoma, sans-serif !important;
font-family: Roboto, sans-serif !important;
font-style: normal !important;
font-weight: normal !important;
margin-top: 0.5em !important;
@ -146,7 +193,7 @@ h1 {
}
h2 {
font-family: Tahoma, sans-serif !important;
font-family: Roboto, sans-serif !important;
font-style: normal !important;
font-weight: normal !important;
font-size: 150% !important;
@ -155,7 +202,7 @@ h2 {
}
h3 {
font-family: Tahoma, sans-serif !important;
font-family: Roboto, sans-serif !important;
font-style: normal !important;
font-weight: normal !important;
font-size: 130% !important;
@ -164,7 +211,7 @@ h3 {
}
h4 {
font-family: Tahoma, sans-serif !important;
font-family: Roboto, sans-serif !important;
font-style: normal !important;
font-weight: normal !important;
font-size: 110% !important;
@ -173,48 +220,48 @@ h4 {
}
dl {
font-family: Consolas, monospace !important;
font-family: 'Roboto Mono', monospace !important;
font-style: normal !important;
font-weight: normal !important;
font-size: 1rem !important;
}
dl dt code {
font-family: Consolas, monospace !important;
font-family: 'Roboto Mono', monospace !important;
font-style: normal !important;
font-weight: normal !important;
font-size: 1rem !important;
}
dl dd {
font-family: Tahoma, sans-serif !important;
font-family: Roboto, sans-serif !important;
font-style: normal !important;
font-weight: normal !important;
font-size: 1rem !important;
}
code {
font-family: Consolas, monospace !important;
font-family: 'Roboto Mono', monospace !important;
font-style: normal !important;
font-weight: normal !important;
font-size: 1rem !important;
font-size: 0.9rem !important;
border: none !important;
border-radius: 2px !important;
}
pre code {
font-family: Consolas, monospace !important;
font-family: 'Roboto Mono', monospace !important;
font-style: normal !important;
font-weight: normal !important;
font-size: 1rem !important;
font-size: 0.9rem !important;
padding-left: 0 !important;
margin-left: 0 !important;
border: none !important;
}
pre {
font-family: Consolas, monospace !important;
font-size: 1rem !important;
font-family: 'Roboto Mono', monospace !important;
font-size: 0.9rem !important;
margin-top: 2em !important;
margin-bottom: 0em !important;
padding-top: 0.5em !important;
@ -232,7 +279,7 @@ hr {
}
p {
font-family: Tahoma, sans-serif !important;
font-family: Roboto, sans-serif !important;
font-style: normal !important;
font-weight: normal !important;
font-size: 110% !important;

View File

@ -1,74 +1,79 @@
/* Generated using: hugo gen chromastyles --style=aura-theme-dark-soft */
/* Generated using: hugo gen chromastyles --style=github-dark */
/* Background */ .bg { color:#bdbdbd;background-color:#15141b; }
/* PreWrapper */ .chroma { color:#bdbdbd;background-color:#15141b;-webkit-text-size-adjust:none; }
/* Error */ .chroma .err { color:#c55858 }
/* Background */ .bg { color:#e6edf3;background-color:#0d1117; }
/* PreWrapper */ .chroma { color:#e6edf3;background-color:#0d1117;-webkit-text-size-adjust:none; }
/* Error */ .chroma .err { color:#f85149 }
/* LineLink */ .chroma .lnlinks { outline:none;text-decoration:none;color:inherit }
/* LineTableTD */ .chroma .lntd { vertical-align:top;padding:0;margin:0;border:0; }
/* LineTable */ .chroma .lntable { border-spacing:0;padding:0;margin:0;border:0; }
/* LineHighlight */ .chroma .hl { background-color:#29263c }
/* LineNumbersTable */ .chroma .lnt { white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#6d6d6d }
/* LineNumbers */ .chroma .ln { white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#6d6d6d }
/* LineHighlight */ .chroma .hl { background-color:#6e7681 }
/* LineNumbersTable */ .chroma .lnt { white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#737679 }
/* LineNumbers */ .chroma .ln { white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#6e7681 }
/* Line */ .chroma .line { display:flex; }
/* Keyword */ .chroma .k { color:#8464c6 }
/* KeywordConstant */ .chroma .kc { color:#54c59f }
/* KeywordDeclaration */ .chroma .kd { color:#8464c6 }
/* KeywordNamespace */ .chroma .kn { color:#8464c6 }
/* KeywordPseudo */ .chroma .kp { color:#8464c6 }
/* KeywordReserved */ .chroma .kr { color:#8464c6 }
/* KeywordType */ .chroma .kt { color:#6cb2c7 }
/* NameAttribute */ .chroma .na { color:#c17ac8 }
/* NameClass */ .chroma .nc { color:#6cb2c7 }
/* NameConstant */ .chroma .no { color:#54c59f }
/* NameDecorator */ .chroma .nd { color:#c17ac8 }
/* NameEntity */ .chroma .ni { color:#c7a06f }
/* NameException */ .chroma .ne { color:#c55858 }
/* NameLabel */ .chroma .nl { color:#c17ac8 }
/* NameProperty */ .chroma .py { color:#c17ac8 }
/* NameTag */ .chroma .nt { color:#8464c6 }
/* NameBuiltin */ .chroma .nb { color:#6cb2c7 }
/* NameBuiltinPseudo */ .chroma .bp { color:#6cb2c7 }
/* NameFunction */ .chroma .nf { color:#c7a06f }
/* NameFunctionMagic */ .chroma .fm { color:#c7a06f }
/* Literal */ .chroma .l { color:#54c59f }
/* LiteralDate */ .chroma .ld { color:#54c59f }
/* LiteralString */ .chroma .s { color:#54c59f }
/* LiteralStringAffix */ .chroma .sa { color:#8464c6 }
/* LiteralStringBacktick */ .chroma .sb { color:#54c59f }
/* LiteralStringChar */ .chroma .sc { color:#54c59f }
/* LiteralStringDelimiter */ .chroma .dl { color:#54c59f }
/* LiteralStringDoc */ .chroma .sd { color:#6d6d6d }
/* LiteralStringDouble */ .chroma .s2 { color:#54c59f }
/* LiteralStringEscape */ .chroma .se { color:#8464c6 }
/* LiteralStringHeredoc */ .chroma .sh { color:#6d6d6d }
/* LiteralStringInterpol */ .chroma .si { color:#54c59f }
/* LiteralStringOther */ .chroma .sx { color:#54c59f }
/* LiteralStringRegex */ .chroma .sr { color:#54c59f }
/* LiteralStringSingle */ .chroma .s1 { color:#54c59f }
/* LiteralStringSymbol */ .chroma .ss { color:#54c59f }
/* LiteralNumber */ .chroma .m { color:#54c59f }
/* LiteralNumberBin */ .chroma .mb { color:#54c59f }
/* LiteralNumberFloat */ .chroma .mf { color:#54c59f }
/* LiteralNumberHex */ .chroma .mh { color:#54c59f }
/* LiteralNumberInteger */ .chroma .mi { color:#54c59f }
/* LiteralNumberIntegerLong */ .chroma .il { color:#54c59f }
/* LiteralNumberOct */ .chroma .mo { color:#54c59f }
/* Operator */ .chroma .o { color:#8464c6 }
/* OperatorWord */ .chroma .ow { color:#8464c6 }
/* Punctuation */ .chroma .p { color:#c17ac8 }
/* Comment */ .chroma .c { color:#6d6d6d;font-style:italic }
/* CommentHashbang */ .chroma .ch { color:#6d6d6d;font-style:italic }
/* CommentMultiline */ .chroma .cm { color:#6d6d6d;font-style:italic }
/* CommentSingle */ .chroma .c1 { color:#6d6d6d;font-style:italic }
/* CommentSpecial */ .chroma .cs { color:#6d6d6d;font-style:italic }
/* CommentPreproc */ .chroma .cp { color:#6d6d6d;font-style:italic }
/* CommentPreprocFile */ .chroma .cpf { color:#6d6d6d;font-style:italic }
/* GenericDeleted */ .chroma .gd { color:#c55858 }
/* Keyword */ .chroma .k { color:#ff7b72 }
/* KeywordConstant */ .chroma .kc { color:#79c0ff }
/* KeywordDeclaration */ .chroma .kd { color:#ff7b72 }
/* KeywordNamespace */ .chroma .kn { color:#ff7b72 }
/* KeywordPseudo */ .chroma .kp { color:#79c0ff }
/* KeywordReserved */ .chroma .kr { color:#ff7b72 }
/* KeywordType */ .chroma .kt { color:#ff7b72 }
/* NameClass */ .chroma .nc { color:#f0883e;font-weight:bold }
/* NameConstant */ .chroma .no { color:#79c0ff;font-weight:bold }
/* NameDecorator */ .chroma .nd { color:#d2a8ff;font-weight:bold }
/* NameEntity */ .chroma .ni { color:#ffa657 }
/* NameException */ .chroma .ne { color:#f0883e;font-weight:bold }
/* NameLabel */ .chroma .nl { color:#79c0ff;font-weight:bold }
/* NameNamespace */ .chroma .nn { color:#ff7b72 }
/* NameProperty */ .chroma .py { color:#79c0ff }
/* NameTag */ .chroma .nt { color:#7ee787 }
/* NameVariable */ .chroma .nv { color:#79c0ff }
/* NameVariableClass */ .chroma .vc { color:#79c0ff }
/* NameVariableGlobal */ .chroma .vg { color:#79c0ff }
/* NameVariableInstance */ .chroma .vi { color:#79c0ff }
/* NameVariableMagic */ .chroma .vm { color:#79c0ff }
/* NameFunction */ .chroma .nf { color:#d2a8ff;font-weight:bold }
/* NameFunctionMagic */ .chroma .fm { color:#d2a8ff;font-weight:bold }
/* Literal */ .chroma .l { color:#a5d6ff }
/* LiteralDate */ .chroma .ld { color:#79c0ff }
/* LiteralString */ .chroma .s { color:#a5d6ff }
/* LiteralStringAffix */ .chroma .sa { color:#79c0ff }
/* LiteralStringBacktick */ .chroma .sb { color:#a5d6ff }
/* LiteralStringChar */ .chroma .sc { color:#a5d6ff }
/* LiteralStringDelimiter */ .chroma .dl { color:#79c0ff }
/* LiteralStringDoc */ .chroma .sd { color:#a5d6ff }
/* LiteralStringDouble */ .chroma .s2 { color:#a5d6ff }
/* LiteralStringEscape */ .chroma .se { color:#79c0ff }
/* LiteralStringHeredoc */ .chroma .sh { color:#79c0ff }
/* LiteralStringInterpol */ .chroma .si { color:#a5d6ff }
/* LiteralStringOther */ .chroma .sx { color:#a5d6ff }
/* LiteralStringRegex */ .chroma .sr { color:#79c0ff }
/* LiteralStringSingle */ .chroma .s1 { color:#a5d6ff }
/* LiteralStringSymbol */ .chroma .ss { color:#a5d6ff }
/* LiteralNumber */ .chroma .m { color:#a5d6ff }
/* LiteralNumberBin */ .chroma .mb { color:#a5d6ff }
/* LiteralNumberFloat */ .chroma .mf { color:#a5d6ff }
/* LiteralNumberHex */ .chroma .mh { color:#a5d6ff }
/* LiteralNumberInteger */ .chroma .mi { color:#a5d6ff }
/* LiteralNumberIntegerLong */ .chroma .il { color:#a5d6ff }
/* LiteralNumberOct */ .chroma .mo { color:#a5d6ff }
/* Operator */ .chroma .o { color:#ff7b72;font-weight:bold }
/* OperatorWord */ .chroma .ow { color:#ff7b72;font-weight:bold }
/* Comment */ .chroma .c { color:#8b949e;font-style:italic }
/* CommentHashbang */ .chroma .ch { color:#8b949e;font-style:italic }
/* CommentMultiline */ .chroma .cm { color:#8b949e;font-style:italic }
/* CommentSingle */ .chroma .c1 { color:#8b949e;font-style:italic }
/* CommentSpecial */ .chroma .cs { color:#8b949e;font-weight:bold;font-style:italic }
/* CommentPreproc */ .chroma .cp { color:#8b949e;font-weight:bold;font-style:italic }
/* CommentPreprocFile */ .chroma .cpf { color:#8b949e;font-weight:bold;font-style:italic }
/* GenericDeleted */ .chroma .gd { color:#ffa198;background-color:#490202 }
/* GenericEmph */ .chroma .ge { font-style:italic }
/* GenericError */ .chroma .gr { color:#c55858 }
/* GenericHeading */ .chroma .gh { color:#8464c6;font-weight:bold }
/* GenericInserted */ .chroma .gi { color:#54c59f }
/* GenericError */ .chroma .gr { color:#ffa198 }
/* GenericHeading */ .chroma .gh { color:#79c0ff;font-weight:bold }
/* GenericInserted */ .chroma .gi { color:#56d364;background-color:#0f5323 }
/* GenericOutput */ .chroma .go { color:#8b949e }
/* GenericPrompt */ .chroma .gp { color:#8b949e }
/* GenericStrong */ .chroma .gs { font-weight:bold }
/* GenericSubheading */ .chroma .gu { color:#8464c6;font-weight:bold }
/* GenericTraceback */ .chroma .gt { color:#c55858 }
/* GenericSubheading */ .chroma .gu { color:#79c0ff }
/* GenericTraceback */ .chroma .gt { color:#ff7b72 }
/* GenericUnderline */ .chroma .gl { text-decoration:underline }
/* TextWhitespace */ .chroma .w { color:#6e7681 }

View File

@ -13,6 +13,9 @@ theme = 'hextra'
[markup.goldmark.renderer]
unsafe = true
[markup.goldmark.parser.attribute]
block = true
[module]
[[module.mounts]]
source = "../docs"
@ -24,8 +27,26 @@ theme = 'hextra'
[params.theme]
customCSS = ["css/custom.css"]
[params.page]
width = "wide"
[params.navbar]
displayTitle = true
[params.navbar.logo]
path = "images/logo.png"
link = "/"
[params.search]
enable = true
[params.sidebar]
# This stops the sidebar from "drilling down" into H2/H3 headers
levels = 1
# Ensure these are also set to prevent auto-expansion
defaultOpen = false
autoCollapse = true
[[menus.main]]
name = "Home"
pageRef = "/docs"
weight = 10

Binary file not shown.

Binary file not shown.

View File

@ -11492,11 +11492,6 @@
<None Include="..\..\cmake\helpers.cmake" />
<None Include="..\..\CONTRIBUTING.md" />
<None Include="..\..\docs\custom.css" />
<None Include="..\..\docs\inplace_function.md" />
<None Include="..\..\docs\manchester.md" />
<None Include="..\..\docs\ranges.md" />
<None Include="..\..\docs\source-formatting.md" />
<None Include="..\..\docs\_config.yml" />
<None Include="..\..\docs\_index.md" />
<None Include="..\..\etl.pspimage" />
<None Include="..\..\etl.xar" />

View File

@ -3967,27 +3967,12 @@
<None Include="..\..\.github\workflows\gcc-c++23.yml">
<Filter>Resource Files\CI\Github</Filter>
</None>
<None Include="..\..\docs\_config.yml">
<Filter>Documentation</Filter>
</None>
<None Include="..\..\docs\_index.md">
<Filter>Documentation</Filter>
</None>
<None Include="..\..\docs\custom.css">
<Filter>Documentation</Filter>
</None>
<None Include="..\..\docs\inplace_function.md">
<Filter>Documentation</Filter>
</None>
<None Include="..\..\docs\manchester.md">
<Filter>Documentation</Filter>
</None>
<None Include="..\..\docs\ranges.md">
<Filter>Documentation</Filter>
</None>
<None Include="..\..\docs\source-formatting.md">
<Filter>Documentation</Filter>
</None>
</ItemGroup>
<ItemGroup>
<Text Include="..\..\support\Release notes.txt">