etl/README.md
John Wellbelove 2a0b83408d Squashed commit of the following:
commit 70651fc29bb3eb8832d4dc7ba9aa24b16c0a1de3
Author: John Wellbelove <github@wellbelove.co.uk>
Date:   Tue May 12 19:24:46 2020 +0100

    CircleCI works

commit bdffb3635fe00b8089bd7afa6b8b689616d4abb1
Author: John Wellbelove <github@wellbelove.co.uk>
Date:   Tue May 12 19:08:17 2020 +0100

    Attempt at getting CircleCI to work

commit 3f3c1f1c23b8fb9ce43bd70f99bca33df82648c1
Author: John Wellbelove <github@wellbelove.co.uk>
Date:   Tue May 12 18:25:25 2020 +0100

    Attempt at getting CircleCI to work

commit 253c9b0171f38877ef6d62d8afa9f7dcb55bcc4a
Author: John Wellbelove <github@wellbelove.co.uk>
Date:   Tue May 12 18:21:03 2020 +0100

    Attempt at getting CircleCI to work

commit df730d4de5cec878bbf01b015d08fdf2d847497d
Author: John Wellbelove <github@wellbelove.co.uk>
Date:   Tue May 12 18:16:38 2020 +0100

    Attempt at getting CircleCI to work

commit 48d692ddd2701ad6c3145ef3251274f1df75853f
Author: John Wellbelove <github@wellbelove.co.uk>
Date:   Tue May 12 18:03:20 2020 +0100

    Attempt at getting CircleCI to work

commit 13a6a578046869cba60ef078c66c3c3edd88fa59
Author: John Wellbelove <github@wellbelove.co.uk>
Date:   Tue May 12 17:57:26 2020 +0100

    Attempt at getting CircleCI to work

commit 9bf22248d0bb9d802b616ae54257c62d47ec31e1
Author: John Wellbelove <github@wellbelove.co.uk>
Date:   Tue May 12 17:55:38 2020 +0100

    Attempt at getting CircleCI to work

commit da5cb68c97229e214ab0b737c8e48b48c777b842
Author: John Wellbelove <github@wellbelove.co.uk>
Date:   Tue May 12 17:51:17 2020 +0100

    Attempt at getting CircleCI to work

commit 94a59d4b9a9ceda22ba794c238c43ab8cf27d31c
Author: John Wellbelove <github@wellbelove.co.uk>
Date:   Tue May 12 17:40:30 2020 +0100

    Attempt at getting CircleCI to work

commit 07d17bfe01adb8ee4731dfa8d9f64216700a6324
Author: John Wellbelove <github@wellbelove.co.uk>
Date:   Tue May 12 17:38:46 2020 +0100

    Attempt at getting CircleCI to work

commit 4c9ae8a90ae7e785f618e95d484470d66c248477
Author: John Wellbelove <github@wellbelove.co.uk>
Date:   Tue May 12 17:33:13 2020 +0100

    Attempt at getting CircleCI to work

commit 72438721c15763790cbf55b1b8baf9c118924fdf
Author: John Wellbelove <github@wellbelove.co.uk>
Date:   Tue May 12 17:23:29 2020 +0100

    Attempt at getting CircleCI to work

commit 4ccc85ef071f4a5706a06a0cef6b6f166e672cd9
Author: John Wellbelove <github@wellbelove.co.uk>
Date:   Tue May 12 17:22:21 2020 +0100

    Attempt at getting CircleCI to work

commit 2a555f55b18eb56dd6a3e0e4dcbdc86ca8d47c1d
Author: John Wellbelove <github@wellbelove.co.uk>
Date:   Tue May 12 17:21:16 2020 +0100

    Attempt at getting CircleCI to work

commit a6c1c84aa9472f119bcf416c6cd6ebda611944ce
Author: John Wellbelove <github@wellbelove.co.uk>
Date:   Tue May 12 17:20:15 2020 +0100

    Attempt at getting CircleCI to work

commit ae535f3c79dfe1448327869e28f751eeac703744
Author: John Wellbelove <github@wellbelove.co.uk>
Date:   Tue May 12 17:18:31 2020 +0100

    Attempt at getting CircleCI to work

commit d34c6e46dacf38700dbe49ef716ca5455c5e4824
Author: John Wellbelove <github@wellbelove.co.uk>
Date:   Tue May 12 17:16:44 2020 +0100

    Attempt at getting CircleCI to work

commit 156ae5220c9781ea2fa5d8c07eadab47afd5b1c7
Author: John Wellbelove <github@wellbelove.co.uk>
Date:   Tue May 12 17:02:19 2020 +0100

    Attempt at getting CircleCI to work

commit 07c2910ded57185b946e9ff39795c90729ff8540
Author: John Wellbelove <github@wellbelove.co.uk>
Date:   Tue May 12 16:59:50 2020 +0100

    Attempt at getting CircleCI to work

commit 7ac59e5f2086e44bf3d22d9699670973d763eba2
Author: John Wellbelove <github@wellbelove.co.uk>
Date:   Tue May 12 16:54:57 2020 +0100

    Attempt at getting CircleCI to work

commit 12a5e406faf4186ec5c4357ecf50d7dfaf5b6b10
Author: John Wellbelove <github@wellbelove.co.uk>
Date:   Tue May 12 16:53:08 2020 +0100

    Attempt at getting CircleCI to work

commit e1c0294019dc680f973e6d7220d58cc4655c75c4
Author: John Wellbelove <github@wellbelove.co.uk>
Date:   Tue May 12 16:50:49 2020 +0100

    Attempt at getting CircleCI to work

commit 0e3537526b6df30d0b329144ad8f509f57a230dc
Merge: ebe0bb66 db1ed024
Author: John Wellbelove <github@wellbelove.co.uk>
Date:   Tue May 12 16:47:24 2020 +0100

    Merge branch 'development' into feature/add_circle-ci_support

commit ebe0bb6667322005387931cccbf064ee3a896569
Author: John Wellbelove <github@wellbelove.co.uk>
Date:   Tue May 12 14:55:33 2020 +0100

    Attempt at getting CircleCI to work

commit 8fc4565599c0d6937fb34016501a6d5408749f53
Author: John Wellbelove <github@wellbelove.co.uk>
Date:   Tue May 12 14:53:32 2020 +0100

    Attempt at getting CircleCI to work

commit 3793b591226459456c31f0b6bacfa65022abc977
Author: John Wellbelove <github@wellbelove.co.uk>
Date:   Tue May 12 14:44:44 2020 +0100

    Attempt at getting CircleCI to work

commit 6795d4132c55367e797b428be9cc33f4e3b05a44
Author: John Wellbelove <github@wellbelove.co.uk>
Date:   Tue May 12 12:59:58 2020 +0100

    Attempt at getting CircleCI to work

commit 9206209392251120407665e8778e25163c3d5796
Merge: d7ac41b9 638d6ac8
Author: John Wellbelove <github@wellbelove.co.uk>
Date:   Tue May 12 12:34:06 2020 +0100

    Merge branch 'development' into feature/add_circle-ci_support

    # Conflicts:
    #	include/etl/version.h
    #	library.json
    #	library.properties
    #	support/Release notes.txt
    #	test/test_make_string.cpp
    #	test/test_string_char.cpp
    #	test/vs2017/etl.vcxproj.filters

commit d7ac41b96c8529a74fb15cedfb69cad0ae8ba3c7
Author: John Wellbelove <github@wellbelove.co.uk>
Date:   Fri Dec 6 22:16:14 2019 +0000

    Removed artifacts path

commit af768e0cad2869cb46041e060cbd7e00c8b7f512
Author: John Wellbelove <github@wellbelove.co.uk>
Date:   Fri Dec 6 22:13:48 2019 +0000

    Added artifacts path

commit e0403d85ebe8ed8c28114361638ae889b67ce0d0
Author: John Wellbelove <github@wellbelove.co.uk>
Date:   Fri Dec 6 22:02:51 2019 +0000

    restore old CMakeLists.txt

commit 63cc9b6acdd2c4e143d29568d4fbde6795e82ea3
Author: John Wellbelove <github@wellbelove.co.uk>
Date:   Fri Dec 6 21:49:45 2019 +0000

    Added install git

commit 01bb5cb7b88d5fb9c21f75e9b40ceff7786cef29
Author: John Wellbelove <github@wellbelove.co.uk>
Date:   Fri Dec 6 21:46:46 2019 +0000

    Added install git

commit 42876cad96d2bff58957b2e41698fdf61c212f7f
Author: John Wellbelove <github@wellbelove.co.uk>
Date:   Fri Dec 6 21:43:19 2019 +0000

    Added install git

commit 3e5b19d30718fb91ba7daef3788cd51e70610ba0
Author: John Wellbelove <github@wellbelove.co.uk>
Date:   Fri Dec 6 21:39:39 2019 +0000

    Alternate CMakeLists.txt

commit f4ce6e75c8d9a03fc9784bf1ad48711727fc47ab
Author: John Wellbelove <github@wellbelove.co.uk>
Date:   Fri Dec 6 21:25:50 2019 +0000

    cat log file

commit 06983faf02621355690134aed70e73c2eae76c4e
Author: John Wellbelove <github@wellbelove.co.uk>
Date:   Fri Dec 6 21:16:31 2019 +0000

    Listing

commit f7670253bf97a29518843a6e329b1c6e3ffa1f8f
Author: John Wellbelove <github@wellbelove.co.uk>
Date:   Fri Dec 6 21:11:00 2019 +0000

    Touch config.yml file

commit bf167aa0303e3a89716098a95b0f3b9525e7cacd
Author: John Wellbelove <github@wellbelove.co.uk>
Date:   Fri Dec 6 21:05:01 2019 +0000

    Touch config.yml file

commit 5bca35821384c28bd93e3b993369365c36681e2f
Author: John Wellbelove <github@wellbelove.co.uk>
Date:   Fri Dec 6 20:20:57 2019 +0000

    Change image to ubuntu:latest

commit ad63db02c762f20d4bfd3ef10ca17f89e633c7e0
Author: John Wellbelove <github@wellbelove.co.uk>
Date:   Fri Dec 6 20:12:14 2019 +0000

    Touch config.yml file

commit 3f33be8ac03e572cd6dc2baca69a7d2a5c72e7ec
Author: John Wellbelove <github@wellbelove.co.uk>
Date:   Fri Dec 6 20:08:28 2019 +0000

    Touch config.yml file

commit 3bf0e93d4cb7b5f36097a502902cccb6cd1509e0
Author: John Wellbelove <github@wellbelove.co.uk>
Date:   Fri Dec 6 19:36:08 2019 +0000

    Update readme

commit 68653df3fe57d7a668b59bc7a6cefed43c01da2b
Author: John Wellbelove <github@wellbelove.co.uk>
Date:   Fri Dec 6 19:25:45 2019 +0000

    Fix readme

commit 12bfc61ed14f563a9aa7c6d5a8ff657932bab490
Author: John Wellbelove <github@wellbelove.co.uk>
Date:   Fri Dec 6 18:57:31 2019 +0000

    Touch config.yml file

commit 984534e89cad59675d1752768dada90a56b624f6
Author: John Wellbelove <github@wellbelove.co.uk>
Date:   Fri Dec 6 18:39:10 2019 +0000

    Added virtual destructors

commit 1d7f7bb44399a37433003320583bd39dc195ca51
Author: John Wellbelove <github@wellbelove.co.uk>
Date:   Fri Dec 6 18:21:08 2019 +0000

    Touch config.yml file

commit c66c5eb12204c1028d9071cd6e29e38722089760
Author: John Wellbelove <github@wellbelove.co.uk>
Date:   Fri Dec 6 14:34:11 2019 +0000

    Added master branch

commit d31ec7b7a674b19d9c30796f2676876017ef9450
Author: John Wellbelove <github@wellbelove.co.uk>
Date:   Fri Dec 6 14:14:15 2019 +0000

    Removed tabs

commit dad04c0a56abe25c5a4f2ecc9c79b569d4014f81
Author: John Wellbelove <github@wellbelove.co.uk>
Date:   Fri Dec 6 14:06:31 2019 +0000

    Removed tabs

commit a265c68fcb9abf622e3b4ab708b79a2b260f3863
Author: John Wellbelove <github@wellbelove.co.uk>
Date:   Fri Dec 6 14:03:58 2019 +0000

    Updated selected branch in config.yml

commit 7abf39b83d308dc7cc459bf27ad11f688197b11c
Author: John Wellbelove <github@wellbelove.co.uk>
Date:   Fri Dec 6 13:58:40 2019 +0000

    Updated selected branch in config.yml

commit 10f8d63cf2d926ee61dca691abce503ec5e08a4e
Author: John Wellbelove <github@wellbelove.co.uk>
Date:   Fri Dec 6 13:56:43 2019 +0000

    Updated selected branch in config.yml

commit e9db085677ad620e227800acc6fad2bee6f59456
Author: John Wellbelove <github@wellbelove.co.uk>
Date:   Fri Dec 6 13:52:42 2019 +0000

    Changed bin directory

commit 2dfff5b5c2c993ed14cc5fd7a936560faa6eedc0
Author: John Wellbelove <github@wellbelove.co.uk>
Date:   Fri Dec 6 13:50:56 2019 +0000

    Merge remote-tracking branch 'origin/master' into feature/add_circle-ci_support

    # Conflicts:
    #	include/etl/cstring.h
    #	include/etl/u16string.h
    #	include/etl/u32string.h
    #	include/etl/wstring.h
2020-05-12 19:41:13 +01:00

3.7 KiB

Embedded Template Library (ETL)

AppVeyor Build status ETLCPP Codacy Badge GitHub release (latest by date) License

Motivation

C++ is a great language to use for embedded applications and templates are a powerful aspect. The standard library can offer a great deal of well tested functionality, but there are some parts of the standard library that do not fit well with deterministic behaviour and limited resource requirements. These limitations usually preclude the use of dynamically allocated memory and containers with open ended sizes.

What is needed is a template library where the user can declare the size, or maximum size of any object upfront. Most embedded compilers do not currently support the standard beyond C++ 03, therefore excluding the programmer from using the enhanced features of the later library.

This is what the ETL attempts to achieve.

Summary

The ETL is not designed to completely replace the STL, but complement it. Its design objective covers three areas.

  • Create a set of containers where the size or maximum size is determined at compile time. These containers are direct equivalents of those supplied in the STL.
  • Be compatible with C++ 03 but implement as many of the C++ 11 additions as possible.
  • Add other useful components that are not present in the standard library.

The embedded template library has been designed for lower resource embedded applications. It contains a set of containers, algorithms and utilities, some of which emulate parts of the STL. There is no dynamic memory allocation. The library makes no use of the heap. All of the containers have a fixed capacity allowing all memory allocation to be determined at compile time. The library is intended for any compiler that supports C++ 03.

Main features:

  • Cross platform. This library is not specific to any processor type.
  • No dynamic memory allocation
  • No RTTI required
  • Very little use of virtual functions. They are used only when they are absolutely necessary for the required functionality
  • A set of fixed capacity containers. (array, bitset, deque, forward_list, list, queue, stack, vector, map, set, etc.)
  • As the storage for all of the container types is allocated as a contiguous block, they are extremely cache friendly
  • Templated compile time constants
  • Templated design pattern base classes (Visitor, Observer)
  • Reverse engineered C++ 0x11 features (type traits, algorithms, containers etc.)
  • Type-safe enumerations
  • Type-safe typedefs
  • 8, 16, 32 & 64 bit CRC calculations
  • Checksums & hash functions
  • Variants (a type that can store many types in a type-safe interface)
  • Choice of asserts, exceptions, error handler or no checks on errors
  • Many utilities for template support.
  • Easy to read and documented source.
  • Free email support

Any help porting the library to work under different platforms and compilers would be gratefully received. I am especially interested in people who are using Keil, IAR, Green Hills, TI Code Composer etc, bare metal or RTOS, and DSPs.

See (https://www.etlcpp.com) for up-to-date information.