mirror of
https://github.com/ETLCPP/etl.git
synced 2026-11-09 22:59:47 +08:00
Merge remote-tracking branch 'origin/feature/determine_compiler_versions' into development
# Conflicts: # examples/ArmTimerCallbacks - C++/ArmTimerCallbacks.uvprojx # examples/ArmTimerCallbacks - C++/main.cpp # include/etl/algorithm.h # include/etl/platform.h # include/etl/stl/alternate/limits.h # include/etl/version.h # library.json # library.properties # support/Release notes.txt # test/codeblocks/ETL.cbp # test/etl_profile.h # test/vs2017/etl.vcxproj # test/vs2017/etl.vcxproj.filters
This commit is contained in:
parent
b04e886d48
commit
d6f8b69326
@ -140,7 +140,7 @@
|
||||
<SetRegEntry>
|
||||
<Number>0</Number>
|
||||
<Key>ST-LINKIII-KEIL_SWO</Key>
|
||||
<Name>-U066CFF485550707267024134 -O207 -SF4000 -C0 -A0 -I0 -HNlocalhost -HP7184 -P2 -N00("ARM CoreSight SW-DP") -D00(2BA01477) -L00(0) -TO18 -TC10000000 -TP21 -TDS8007 -TDT0 -TDC1F -TIEFFFFFFFF -TIP8 -FO7 -FD20000000 -FC1000 -FN1 -FF0STM32F4xx_512.FLM -FS08000000 -FL080000 -FP0($$Device:STM32F401RETx$CMSIS\Flash\STM32F4xx_512.FLM)</Name>
|
||||
<Name>-U066CFF485550707267024134 -O207 -SF10000 -C0 -A0 -I0 -HNlocalhost -HP7184 -P2 -N00("ARM CoreSight SW-DP (ARM Core") -D00(2BA01477) -L00(0) -TO131090 -TC10000000 -TT10000000 -TP21 -TDS8007 -TDT0 -TDC1F -TIEFFFFFFFF -TIP8 -FO7 -FD20000000 -FC1000 -FN1 -FF0STM32F4xx_512.FLM -FS08000000 -FL080000 -FP0($$Device:STM32F401RETx$CMSIS\Flash\STM32F4xx_512.FLM)</Name>
|
||||
</SetRegEntry>
|
||||
<SetRegEntry>
|
||||
<Number>0</Number>
|
||||
|
||||
@ -10,8 +10,8 @@
|
||||
<TargetName>Target 1</TargetName>
|
||||
<ToolsetNumber>0x4</ToolsetNumber>
|
||||
<ToolsetName>ARM-ADS</ToolsetName>
|
||||
<pCCUsed>5060750::V5.06 update 6 (build 750)::ARMCC</pCCUsed>
|
||||
<uAC6>0</uAC6>
|
||||
<pCCUsed>6130001::V6.13.1::.\ARMCLANG</pCCUsed>
|
||||
<uAC6>1</uAC6>
|
||||
<TargetOption>
|
||||
<TargetCommonOption>
|
||||
<Device>STM32F401RETx</Device>
|
||||
@ -312,7 +312,7 @@
|
||||
</ArmAdsMisc>
|
||||
<Cads>
|
||||
<interw>1</interw>
|
||||
<Optim>1</Optim>
|
||||
<Optim>7</Optim>
|
||||
<oTime>0</oTime>
|
||||
<SplitLS>0</SplitLS>
|
||||
<OneElfS>1</OneElfS>
|
||||
@ -321,7 +321,7 @@
|
||||
<PlainCh>1</PlainCh>
|
||||
<Ropi>0</Ropi>
|
||||
<Rwpi>0</Rwpi>
|
||||
<wLevel>2</wLevel>
|
||||
<wLevel>3</wLevel>
|
||||
<uThumb>0</uThumb>
|
||||
<uSurpInc>0</uSurpInc>
|
||||
<uC99>1</uC99>
|
||||
@ -336,7 +336,7 @@
|
||||
<v6Rtti>0</v6Rtti>
|
||||
<VariousControls>
|
||||
<MiscControls></MiscControls>
|
||||
<Define></Define>
|
||||
<Define>ETL_NO_STL __STDC_LIMIT_MACROS</Define>
|
||||
<Undefine></Undefine>
|
||||
<IncludePath>..\..\include;..\ArmTimerCallbacks - C++</IncludePath>
|
||||
</VariousControls>
|
||||
|
||||
@ -8,22 +8,8 @@
|
||||
#define ETL_IVECTOR_REPAIR_ENABLE
|
||||
#define ETL_IDEQUE_REPAIR_ENABLE
|
||||
#define ETL_CALLBACK_TIMER_USE_ATOMIC_LOCK
|
||||
#define ETL_NO_STL
|
||||
//#define ETL_NO_STL
|
||||
|
||||
#if (__CC_ARM == 1)
|
||||
// ARM5 compiler
|
||||
#if defined(ETL_NO_STL)
|
||||
#include "etl/profiles/armv5_no_stl.h"
|
||||
#else
|
||||
#include "etl/profiles/armv5.h"
|
||||
#endif
|
||||
#else
|
||||
// ARM6 compiler
|
||||
#if defined(ETL_NO_STL)
|
||||
#include "etl/profiles/armv6_no_stl.h"
|
||||
#else
|
||||
#include "etl/profiles/armv6.h"
|
||||
#endif
|
||||
#endif
|
||||
#include "etl/profiles/auto.h"
|
||||
|
||||
#endif
|
||||
|
||||
@ -18,8 +18,6 @@ extern "C"
|
||||
#include "etl/vector.h"
|
||||
#include "etl/iterator.h"
|
||||
|
||||
static bool b = etl::is_input_iterator<int*>::value;
|
||||
|
||||
struct FP
|
||||
{
|
||||
void (*function)();
|
||||
@ -33,7 +31,6 @@ void register_poweroff_callback(void (*function)())
|
||||
power_callbacks.push_back(fp);
|
||||
}
|
||||
|
||||
|
||||
const int N_TIMERS = 4;
|
||||
|
||||
etl::callback_timer<N_TIMERS> callback_timer;
|
||||
@ -130,12 +127,6 @@ int main()
|
||||
|
||||
LED_Initialize();
|
||||
Buttons_Initialize();
|
||||
|
||||
long int v = __cplusplus;
|
||||
|
||||
char16_t c16;
|
||||
|
||||
int* p = nullptr;
|
||||
|
||||
// The LEDs will start flashing fast after 2 seconds.
|
||||
// After another 5 seconds they will start flashing slower.
|
||||
|
||||
@ -46,6 +46,7 @@ SOFTWARE.
|
||||
#include "platform.h"
|
||||
#include "iterator.h"
|
||||
#include "type_traits.h"
|
||||
#include "container.h"
|
||||
|
||||
namespace etl
|
||||
{
|
||||
@ -1180,7 +1181,7 @@ namespace etl
|
||||
{
|
||||
for (TIterator itr = first; itr != last; ++itr)
|
||||
{
|
||||
ETL_STD::rotate(ETL_STD::upper_bound(first, itr, *itr, compare), itr, ETL_STD::next(itr));
|
||||
ETL_STD::rotate(ETL_STD::upper_bound(first, itr, *itr, compare), itr, etl::next(itr));
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@ -180,11 +180,15 @@ namespace etl
|
||||
return reinterpret_cast<const T*>(data);
|
||||
}
|
||||
|
||||
#if ETL_CPP11_SUPPORTED
|
||||
alignas(ALIGNMENT) char data[LENGTH];
|
||||
#else
|
||||
union
|
||||
{
|
||||
char data[LENGTH];
|
||||
typename etl::type_with_alignment<ALIGNMENT>::type etl_alignment_type; // A POD type that has the same alignment as ALIGNMENT.
|
||||
};
|
||||
#endif
|
||||
};
|
||||
};
|
||||
|
||||
|
||||
@ -446,38 +446,38 @@ namespace etl
|
||||
return id;
|
||||
}
|
||||
|
||||
//*******************************************
|
||||
/// Register a timer.
|
||||
//*******************************************
|
||||
//*******************************************
|
||||
/// Register a timer.
|
||||
//*******************************************
|
||||
#if ETL_CPP11_SUPPORTED
|
||||
etl::timer::id::type register_timer(etl::delegate<void()>& callback_,
|
||||
uint32_t period_,
|
||||
bool repeating_)
|
||||
{
|
||||
etl::timer::id::type id = etl::timer::id::NO_TIMER;
|
||||
etl::timer::id::type register_timer(etl::delegate<void()>& callback_,
|
||||
uint32_t period_,
|
||||
bool repeating_)
|
||||
{
|
||||
etl::timer::id::type id = etl::timer::id::NO_TIMER;
|
||||
|
||||
bool is_space = (registered_timers < MAX_TIMERS);
|
||||
bool is_space = (registered_timers < MAX_TIMERS);
|
||||
|
||||
if (is_space)
|
||||
{
|
||||
// Search for the free space.
|
||||
for (uint_least8_t i = 0; i < MAX_TIMERS; ++i)
|
||||
{
|
||||
etl::callback_timer_data& timer = timer_array[i];
|
||||
if (is_space)
|
||||
{
|
||||
// Search for the free space.
|
||||
for (uint_least8_t i = 0; i < MAX_TIMERS; ++i)
|
||||
{
|
||||
etl::callback_timer_data& timer = timer_array[i];
|
||||
|
||||
if (timer.id == etl::timer::id::NO_TIMER)
|
||||
{
|
||||
// Create in-place.
|
||||
new (&timer) callback_timer_data(i, callback_, period_, repeating_);
|
||||
++registered_timers;
|
||||
id = i;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
if (timer.id == etl::timer::id::NO_TIMER)
|
||||
{
|
||||
// Create in-place.
|
||||
new (&timer) callback_timer_data(i, callback_, period_, repeating_);
|
||||
++registered_timers;
|
||||
id = i;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return id;
|
||||
}
|
||||
return id;
|
||||
}
|
||||
#endif
|
||||
|
||||
//*******************************************
|
||||
|
||||
@ -38,8 +38,10 @@ SOFTWARE.
|
||||
#define ETL_8BIT_SUPPORT (CHAR_BIT == 8)
|
||||
|
||||
// Define a debug macro
|
||||
#if defined(_DEBUG) || defined(DEBUG)
|
||||
#define ETL_DEBUG
|
||||
#if !defined(ETL_DEBUG)
|
||||
#if defined(_DEBUG) || defined(DEBUG)
|
||||
#define ETL_DEBUG
|
||||
#endif
|
||||
#endif
|
||||
|
||||
// Undefine all of the macros.
|
||||
@ -62,25 +64,23 @@ SOFTWARE.
|
||||
|
||||
#include "etl_profile.h"
|
||||
|
||||
// The macros below are dependent on the profile.
|
||||
|
||||
#if defined(ETL_COMPILER_GCC)
|
||||
#define ETL_COMPILER_VERSION __GNUC__
|
||||
#define ETL_COMPILER_FULL_VERSION ((__GNUC__ * 10000) + (__GNUC_MINOR__ * 100) + __GNUC_PATCHLEVEL__)
|
||||
#elif defined(ETL_COMPILER_MICROSOFT)
|
||||
#define ETL_COMPILER_VERSION _MSC_VER
|
||||
#define ETL_COMPILER_FULL_VERSION _MSC_FULL_VER
|
||||
#if defined(ETL_AUTO_DETERMINE_COMPILER_INFO)
|
||||
// Figure out things about the compiler.
|
||||
#include "profiles/determine_compiler.h"
|
||||
#include "profiles/determine_compiler_version.h"
|
||||
#include "profiles/determine_compiler_language_support.h"
|
||||
#endif
|
||||
|
||||
// The macros below are dependent on the profile.
|
||||
#if ETL_CPP11_SUPPORTED
|
||||
#define ETL_CONSTEXPR constexpr
|
||||
#define ETL_CONST constexpr
|
||||
#define ETL_CONST_OR_CONSTEXPR constexpr
|
||||
#define ETL_DELETE = delete
|
||||
#define ETL_NOEXCEPT noexcept
|
||||
#define ETL_NOEXCEPT_EXPR(expression) noexcept(expression)
|
||||
#else
|
||||
#define ETL_CONSTEXPR
|
||||
#define ETL_CONST const
|
||||
#define ETL_CONST_OR_CONSTEXPR const
|
||||
#define ETL_DELETE
|
||||
#define ETL_NOEXCEPT
|
||||
#define ETL_NOEXCEPT_EXPR(expression)
|
||||
|
||||
@ -1,3 +1,5 @@
|
||||
///\file
|
||||
|
||||
/******************************************************************************
|
||||
The MIT License(MIT)
|
||||
|
||||
@ -5,7 +7,7 @@ Embedded Template Library.
|
||||
https://github.com/ETLCPP/etl
|
||||
https://www.etlcpp.com
|
||||
|
||||
Copyright(c) 2017 jwellbelove
|
||||
Copyright(c) 2019 jwellbelove
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
of this software and associated documentation files(the "Software"), to deal
|
||||
@ -26,23 +28,9 @@ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||
SOFTWARE.
|
||||
******************************************************************************/
|
||||
|
||||
#ifndef ECL_USER_INCLUDED
|
||||
#define ECL_USER_INCLUDED
|
||||
#ifndef ETL_AUTO_PROFILE_INCLUDED
|
||||
#define ETL_AUTO_PROFILE_INCLUDED
|
||||
|
||||
#include <stdint.h>
|
||||
|
||||
extern uint32_t timer_semaphore;
|
||||
|
||||
#if defined(_MSC_VER)
|
||||
#include <Windows.h>
|
||||
|
||||
#define ECL_TIMER_DISABLE_PROCESSING InterlockedIncrement((volatile long*)&timer_semaphore)
|
||||
#define ECL_TIMER_ENABLE_PROCESSING InterlockedDecrement((volatile long*)&timer_semaphore)
|
||||
#define ECL_TIMER_PROCESSING_ENABLED (InterlockedAdd((volatile long*)&timer_semaphore, 0) == 0)
|
||||
#else
|
||||
#define ECL_TIMER_DISABLE_PROCESSING __sync_fetch_and_add(&timer_semaphore, 1)
|
||||
#define ECL_TIMER_ENABLE_PROCESSING __sync_fetch_and_sub(&timer_semaphore, 1)
|
||||
#define ECL_TIMER_PROCESSING_ENABLED (__sync_fetch_and_add(&timer_semaphore, 0) == 0)
|
||||
#endif
|
||||
#define ETL_AUTO_DETERMINE_COMPILER_INFO
|
||||
|
||||
#endif
|
||||
37
include/etl/profiles/auto_no_stl.h
Normal file
37
include/etl/profiles/auto_no_stl.h
Normal file
@ -0,0 +1,37 @@
|
||||
///\file
|
||||
|
||||
/******************************************************************************
|
||||
The MIT License(MIT)
|
||||
|
||||
Embedded Template Library.
|
||||
https://github.com/ETLCPP/etl
|
||||
https://www.etlcpp.com
|
||||
|
||||
Copyright(c) 2019 jwellbelove
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
of this software and associated documentation files(the "Software"), to deal
|
||||
in the Software without restriction, including without limitation the rights
|
||||
to use, copy, modify, merge, publish, distribute, sublicense, and / or sell
|
||||
copies of the Software, and to permit persons to whom the Software is
|
||||
furnished to do so, subject to the following conditions :
|
||||
|
||||
The above copyright notice and this permission notice shall be included in all
|
||||
copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.IN NO EVENT SHALL THE
|
||||
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||
SOFTWARE.
|
||||
******************************************************************************/
|
||||
|
||||
#ifndef ETL_AUTO_NO_STL_INCLUDED
|
||||
#define ETL_AUTO_NO_STL_INCLUDED
|
||||
|
||||
#define ETL_AUTO_DETERMINE_COMPILER_INFO
|
||||
#define ETL_NO_STL
|
||||
|
||||
#endif
|
||||
121
include/etl/profiles/determine_compiler.h
Normal file
121
include/etl/profiles/determine_compiler.h
Normal file
@ -0,0 +1,121 @@
|
||||
///\file
|
||||
|
||||
/******************************************************************************
|
||||
The MIT License(MIT)
|
||||
|
||||
Embedded Template Library.
|
||||
https://github.com/ETLCPP/etl
|
||||
https://www.etlcpp.com
|
||||
|
||||
Copyright(c) 2019 jwellbelove
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
of this software and associated documentation files(the "Software"), to deal
|
||||
in the Software without restriction, including without limitation the rights
|
||||
to use, copy, modify, merge, publish, distribute, sublicense, and / or sell
|
||||
copies of the Software, and to permit persons to whom the Software is
|
||||
furnished to do so, subject to the following conditions :
|
||||
|
||||
The above copyright notice and this permission notice shall be included in all
|
||||
copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.IN NO EVENT SHALL THE
|
||||
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||
SOFTWARE.
|
||||
******************************************************************************/
|
||||
|
||||
#ifndef ETL_DETERMINE_COMPILER_H_INCLUDED
|
||||
#define ETL_DETERMINE_COMPILER_H_INCLUDED
|
||||
|
||||
#if !defined(ETL_COMPILER_GCC) && \
|
||||
!defined(ETL_COMPILER_MICROSOFT) && \
|
||||
!defined(ETL_COMPILER_ARM5) && \
|
||||
!defined(ETL_COMPILER_ARM6) && \
|
||||
!defined(ETL_COMPILER_ARM7) && \
|
||||
!defined(ETL_COMPILER_CLANG) && \
|
||||
!defined(ETL_COMPILER_GREEN_HILLS) && \
|
||||
!defined(ETL_COMPILER_IAR) && \
|
||||
!defined(ETL_COMPILER_INTEL) && \
|
||||
!defined(ETL_COMPILER_TEXAS_INSTRUMENTS) && \
|
||||
!defined(ETL_COMPILER_GENERIC)
|
||||
|
||||
#if !defined(ETL_COMPILER_TYPE_DETECTED) && !defined(ETL_COMPILER_ARM5)
|
||||
#if defined(__CC_ARM)
|
||||
#define ETL_COMPILER_ARM5
|
||||
#define ETL_COMPILER_TYPE_DETECTED
|
||||
#endif
|
||||
#endif
|
||||
|
||||
#if !defined(ETL_COMPILER_TYPE_DETECTED) && !defined(ETL_COMPILER_ARM6)
|
||||
#if defined(__ARMCOMPILER_VERSION) && (__ARMCOMPILER_VERSION >= 6000000L) && (__ARMCOMPILER_VERSION < 7000000L)
|
||||
#define ETL_COMPILER_ARM6
|
||||
#define ETL_COMPILER_TYPE_DETECTED
|
||||
#endif
|
||||
#endif
|
||||
|
||||
#if !defined(ETL_COMPILER_TYPE_DETECTED) && !defined(ETL_COMPILER_ARM7)
|
||||
#if defined(__ARMCOMPILER_VERSION) && (__ARMCOMPILER_VERSION >= 7000000L) && (__ARMCOMPILER_VERSION < 8000000L)
|
||||
#define ETL_COMPILER_ARM7
|
||||
#define ETL_COMPILER_TYPE_DETECTED
|
||||
#endif
|
||||
#endif
|
||||
|
||||
#if !defined(ETL_COMPILER_TYPE_DETECTED) && !defined(ETL_COMPILER_GCC)
|
||||
#if defined(__GNUC__)
|
||||
#define ETL_COMPILER_GCC
|
||||
#define ETL_COMPILER_TYPE_DETECTED
|
||||
#endif
|
||||
#endif
|
||||
|
||||
#if !defined(ETL_COMPILER_TYPE_DETECTED) && !defined(ETL_COMPILER_CLANG)
|
||||
#if defined(__clang__) || defined(__llvm__)
|
||||
#define ETL_COMPILER_CLANG
|
||||
#define ETL_COMPILER_TYPE_DETECTED
|
||||
#endif
|
||||
#endif
|
||||
|
||||
#if !defined(ETL_COMPILER_TYPE_DETECTED) && !defined(ETL_COMPILER_GREEN_HILLS)
|
||||
#if defined(__ghs__)
|
||||
#define ETL_COMPILER_GREEN_HILLS
|
||||
#define ETL_COMPILER_TYPE_DETECTED
|
||||
#endif
|
||||
#endif
|
||||
|
||||
#if !defined(ETL_COMPILER_TYPE_DETECTED) && !defined(ETL_COMPILER_IAR)
|
||||
#if defined(__IAR_SYSTEMS_ICC__)
|
||||
#define ETL_COMPILER_IAR
|
||||
#define ETL_COMPILER_TYPE_DETECTED
|
||||
#endif
|
||||
#endif
|
||||
|
||||
#if !defined(ETL_COMPILER_TYPE_DETECTED) && !defined(ETL_COMPILER_INTEL)
|
||||
#if defined(__INTEL_COMPILER)
|
||||
#define ETL_COMPILER_INTEL
|
||||
#define ETL_COMPILER_TYPE_DETECTED
|
||||
#endif
|
||||
#endif
|
||||
|
||||
#if !defined(ETL_COMPILER_TYPE_DETECTED) && !defined(ETL_COMPILER_TEXAS_INSTRUMENTS)
|
||||
#if defined(__TI_COMPILER_VERSION__)
|
||||
#define ETL_COMPILER_TEXAS_INSTRUMENTS
|
||||
#define ETL_COMPILER_TYPE_DETECTED
|
||||
#endif
|
||||
#endif
|
||||
|
||||
#if !defined(ETL_COMPILER_TYPE_DETECTED) && !defined(ETL_COMPILER_MICROSOFT)
|
||||
#if defined(_MSC_VER)
|
||||
#define ETL_COMPILER_MICROSOFT
|
||||
#define ETL_COMPILER_TYPE_DETECTED
|
||||
#endif
|
||||
#endif
|
||||
|
||||
#if !defined(ETL_COMPILER_TYPE_DETECTED)
|
||||
#define ETL_COMPILER_GENERIC
|
||||
#endif
|
||||
#endif
|
||||
|
||||
#endif
|
||||
58
include/etl/profiles/determine_compiler_language_support.h
Normal file
58
include/etl/profiles/determine_compiler_language_support.h
Normal file
@ -0,0 +1,58 @@
|
||||
///\file
|
||||
|
||||
/******************************************************************************
|
||||
The MIT License(MIT)
|
||||
|
||||
Embedded Template Library.
|
||||
https://github.com/ETLCPP/etl
|
||||
https://www.etlcpp.com
|
||||
|
||||
Copyright(c) 2019 jwellbelove
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
of this software and associated documentation files(the "Software"), to deal
|
||||
in the Software without restriction, including without limitation the rights
|
||||
to use, copy, modify, merge, publish, distribute, sublicense, and / or sell
|
||||
copies of the Software, and to permit persons to whom the Software is
|
||||
furnished to do so, subject to the following conditions :
|
||||
|
||||
The above copyright notice and this permission notice shall be included in all
|
||||
copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.IN NO EVENT SHALL THE
|
||||
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||
SOFTWARE.
|
||||
******************************************************************************/
|
||||
|
||||
#ifndef ETL_DETERMINE_COMPILER_LANGUAGE_SUPPORT_H_INCLUDED
|
||||
#define ETL_DETERMINE_COMPILER_LANGUAGE_SUPPORT_H_INCLUDED
|
||||
|
||||
#ifdef __cplusplus
|
||||
#if defined(ETL_COMPILER_MICROSOFT)
|
||||
#define ETL_CPP11_SUPPORTED (_MSC_VER >= 1600)
|
||||
#define ETL_CPP14_SUPPORTED (_MSC_VER >= 1900)
|
||||
#define ETL_CPP17_SUPPORTED (_MSC_VER >= 1914)
|
||||
#elif defined(ETL_COMPILER_ARM5)
|
||||
#define ETL_CPP11_SUPPORTED 0
|
||||
#define ETL_CPP14_SUPPORTED 0
|
||||
#define ETL_CPP17_SUPPORTED 0
|
||||
#else
|
||||
#define ETL_CPP11_SUPPORTED (__cplusplus >= 201103L)
|
||||
#define ETL_CPP14_SUPPORTED (__cplusplus >= 201402L)
|
||||
#define ETL_CPP17_SUPPORTED (__cplusplus >= 201703L)
|
||||
#endif
|
||||
#else
|
||||
#define ETL_CPP11_SUPPORTED 0
|
||||
#define ETL_CPP14_SUPPORTED 0
|
||||
#define ETL_CPP17_SUPPORTED 0
|
||||
#endif
|
||||
|
||||
#define ETL_NO_NULLPTR_SUPPORT !ETL_CPP11_SUPPORTED
|
||||
#define ETL_NO_LARGE_CHAR_SUPPORT !ETL_CPP11_SUPPORTED
|
||||
#define ETL_CPP11_TYPE_TRAITS_IS_TRIVIAL_SUPPORTED ETL_CPP14_SUPPORTED
|
||||
|
||||
#endif
|
||||
71
include/etl/profiles/determine_compiler_version.h
Normal file
71
include/etl/profiles/determine_compiler_version.h
Normal file
@ -0,0 +1,71 @@
|
||||
///\file
|
||||
|
||||
/******************************************************************************
|
||||
The MIT License(MIT)
|
||||
|
||||
Embedded Template Library.
|
||||
https://github.com/ETLCPP/etl
|
||||
https://www.etlcpp.com
|
||||
|
||||
Copyright(c) 2019 jwellbelove
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
of this software and associated documentation files(the "Software"), to deal
|
||||
in the Software without restriction, including without limitation the rights
|
||||
to use, copy, modify, merge, publish, distribute, sublicense, and / or sell
|
||||
copies of the Software, and to permit persons to whom the Software is
|
||||
furnished to do so, subject to the following conditions :
|
||||
|
||||
The above copyright notice and this permission notice shall be included in all
|
||||
copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.IN NO EVENT SHALL THE
|
||||
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||
SOFTWARE.
|
||||
******************************************************************************/
|
||||
|
||||
#ifndef ETL_DETERMINE_COMPILER_VERSION_H_INCLUDED
|
||||
#define ETL_DETERMINE_COMPILER_VERSION_H_INCLUDED
|
||||
|
||||
#if !defined(ETL_COMPILER_VERSION) && !defined(ETL_COMPILER_FULL_VERSION)
|
||||
#if defined(ETL_COMPILER_GCC)
|
||||
#define ETL_COMPILER_VERSION __GNUC__
|
||||
#define ETL_COMPILER_FULL_VERSION ((__GNUC__ * 10000) + (__GNUC_MINOR__ * 100) + __GNUC_PATCHLEVEL__)
|
||||
#elif defined(ETL_COMPILER_MICROSOFT)
|
||||
#define ETL_COMPILER_VERSION _MSC_VER
|
||||
#define ETL_COMPILER_FULL_VERSION _MSC_FULL_VER
|
||||
#elif defined(ETL_COMPILER_ARM5)
|
||||
#define ETL_COMPILER_VERSION __ARMCC_VERSION
|
||||
#define ETL_COMPILER_FULL_VERSION __ARMCC_VERSION
|
||||
#elif defined(ETL_COMPILER_ARM6)
|
||||
#define ETL_COMPILER_VERSION __ARMCOMPILER_VERSION
|
||||
#define ETL_COMPILER_FULL_VERSION __ARMCOMPILER_VERSION
|
||||
#elif defined(ETL_COMPILER_ARM7)
|
||||
#define ETL_COMPILER_VERSION __ARMCOMPILER_VERSION
|
||||
#define ETL_COMPILER_FULL_VERSION __ARMCOMPILER_VERSION
|
||||
#elif defined(ETL_COMPILER_CLANG)
|
||||
#define ETL_COMPILER_VERSION __clang_version__
|
||||
#define ETL_COMPILER_FULL_VERSION ((__clang_major__ * 10000) + (__clang_minor__ * 100) + __clang_patchlevel__)
|
||||
#elif defined(ETL_COMPILER_GREEN_HILLS)
|
||||
#define ETL_COMPILER_VERSION __GHS_VERSION_NUMBER__
|
||||
#define ETL_COMPILER_FULL_VERSION __GHS_VERSION_NUMBER__
|
||||
#elif defined(ETL_COMPILER_IAR)
|
||||
#define ETL_COMPILER_VERSION __VER__
|
||||
#define ETL_COMPILER_FULL_VERSION __VER__
|
||||
#elif defined(ETL_COMPILER_INTEL)
|
||||
#define ETL_COMPILER_VERSION __INTEL_COMPILER
|
||||
#define ETL_COMPILER_FULL_VERSION __INTEL_COMPILER
|
||||
#elif defined(ETL_COMPILER_TEXAS_INSTRUMENTS)
|
||||
#define ETL_COMPILER_VERSION __TI_COMPILER_VERSION__
|
||||
#define ETL_COMPILER_FULL_VERSION __TI_COMPILER_VERSION__
|
||||
#else
|
||||
#define ETL_COMPILER_VERSION 0
|
||||
#define ETL_COMPILER_FULL_VERSION 0
|
||||
#endif
|
||||
#endif
|
||||
|
||||
#endif
|
||||
@ -114,7 +114,7 @@ namespace etlstd
|
||||
|
||||
difference_t count = (se - sb);
|
||||
|
||||
return TIterator2(memcpy(db, sb, sizeof(value_t) * count)) + count;
|
||||
return TIterator2(memmove(db, sb, sizeof(value_t) * count)) + count;
|
||||
}
|
||||
|
||||
// Other iterator
|
||||
@ -156,7 +156,7 @@ namespace etlstd
|
||||
{
|
||||
typedef typename etlstd::iterator_traits<TIterator1>::value_type value_t;
|
||||
|
||||
return TIterator2(memcpy(db, sb, sizeof(value_t) * count)) + count;
|
||||
return TIterator2(memmove(db, sb, sizeof(value_t) * count)) + count;
|
||||
}
|
||||
|
||||
// Other iterator
|
||||
|
||||
@ -71,45 +71,45 @@ namespace etlstd
|
||||
class etl_integral_type
|
||||
{
|
||||
public:
|
||||
static ETL_CONST bool is_specialized = true;
|
||||
static ETL_CONST_OR_CONSTEXPR bool is_specialized = true;
|
||||
|
||||
static ETL_CONST int max_digits10 = 0;
|
||||
static ETL_CONST_OR_CONSTEXPR int max_digits10 = 0;
|
||||
|
||||
static ETL_CONST bool is_integer = true;
|
||||
static ETL_CONST bool is_exact = true;
|
||||
static ETL_CONST_OR_CONSTEXPR bool is_integer = true;
|
||||
static ETL_CONST_OR_CONSTEXPR bool is_exact = true;
|
||||
|
||||
static ETL_CONST int radix = 2;
|
||||
static ETL_CONST_OR_CONSTEXPR int radix = 2;
|
||||
static ETL_CONSTEXPR T epsilon() { return 0; }
|
||||
static ETL_CONSTEXPR T round_error() { return 0; }
|
||||
|
||||
static ETL_CONST int digits = (CHAR_BIT * sizeof(T)) - (etl::is_signed<T>::value ? 1 : 0);
|
||||
static ETL_CONST int digits10 = ETL_LOG2(digits);
|
||||
static ETL_CONST_OR_CONSTEXPR int digits = (CHAR_BIT * sizeof(T)) - (etl::is_signed<T>::value ? 1 : 0);
|
||||
static ETL_CONST_OR_CONSTEXPR int digits10 = ETL_LOG2(digits);
|
||||
|
||||
static ETL_CONST bool is_signed = etl::is_signed<T>::value;
|
||||
static ETL_CONST_OR_CONSTEXPR bool is_signed = etl::is_signed<T>::value;
|
||||
|
||||
static ETL_CONST int min_exponent = 0;
|
||||
static ETL_CONST int min_exponent10 = 0;
|
||||
static ETL_CONST int max_exponent = 0;
|
||||
static ETL_CONST int max_exponent10 = 0;
|
||||
static ETL_CONST_OR_CONSTEXPR int min_exponent = 0;
|
||||
static ETL_CONST_OR_CONSTEXPR int min_exponent10 = 0;
|
||||
static ETL_CONST_OR_CONSTEXPR int max_exponent = 0;
|
||||
static ETL_CONST_OR_CONSTEXPR int max_exponent10 = 0;
|
||||
|
||||
static ETL_CONST bool has_infinity = false;
|
||||
static ETL_CONST bool has_quiet_NaN = false;
|
||||
static ETL_CONST bool has_signaling_NaN = false;
|
||||
static ETL_CONST float_denorm_style has_denorm = denorm_absent;
|
||||
static ETL_CONST bool has_denorm_loss = false;
|
||||
static ETL_CONST_OR_CONSTEXPR bool has_infinity = false;
|
||||
static ETL_CONST_OR_CONSTEXPR bool has_quiet_NaN = false;
|
||||
static ETL_CONST_OR_CONSTEXPR bool has_signaling_NaN = false;
|
||||
static ETL_CONST_OR_CONSTEXPR float_denorm_style has_denorm = denorm_absent;
|
||||
static ETL_CONST_OR_CONSTEXPR bool has_denorm_loss = false;
|
||||
|
||||
static ETL_CONSTEXPR T infinity() { return 0; }
|
||||
static ETL_CONSTEXPR T quiet_NaN() { return 0; }
|
||||
static ETL_CONSTEXPR T signaling_NaN() { return 0; }
|
||||
static ETL_CONSTEXPR T denorm_min() { return 0; }
|
||||
|
||||
static ETL_CONST bool is_iec559 = false;
|
||||
static ETL_CONST bool is_bounded = true;
|
||||
static ETL_CONST bool is_modulo = etl::is_unsigned<T>::value;
|
||||
static ETL_CONST_OR_CONSTEXPR bool is_iec559 = false;
|
||||
static ETL_CONST_OR_CONSTEXPR bool is_bounded = true;
|
||||
static ETL_CONST_OR_CONSTEXPR bool is_modulo = etl::is_unsigned<T>::value;
|
||||
|
||||
static ETL_CONST bool traps = false;
|
||||
static ETL_CONST bool tinyness_before = false;
|
||||
static ETL_CONST float_round_style round_style = round_toward_zero;
|
||||
static ETL_CONST_OR_CONSTEXPR bool traps = false;
|
||||
static ETL_CONST_OR_CONSTEXPR bool tinyness_before = false;
|
||||
static ETL_CONST_OR_CONSTEXPR float_round_style round_style = round_toward_zero;
|
||||
};
|
||||
|
||||
//***************************************************************************
|
||||
@ -118,39 +118,48 @@ namespace etlstd
|
||||
class etl_floating_point_type
|
||||
{
|
||||
public:
|
||||
static ETL_CONST bool is_specialized = true;
|
||||
static ETL_CONST_OR_CONSTEXPR bool is_specialized = true;
|
||||
|
||||
static ETL_CONST bool is_signed = true;
|
||||
static ETL_CONST bool is_integer = false;
|
||||
static ETL_CONST bool is_exact = false;
|
||||
static ETL_CONST_OR_CONSTEXPR bool is_signed = true;
|
||||
static ETL_CONST_OR_CONSTEXPR bool is_integer = false;
|
||||
static ETL_CONST_OR_CONSTEXPR bool is_exact = false;
|
||||
|
||||
static ETL_CONST int radix = 2;
|
||||
static ETL_CONST_OR_CONSTEXPR int radix = 2;
|
||||
|
||||
static ETL_CONST bool has_infinity = false;
|
||||
static ETL_CONST bool has_quiet_NaN = false;
|
||||
static ETL_CONST bool has_signaling_NaN = false;
|
||||
static ETL_CONST float_denorm_style has_denorm = denorm_present;
|
||||
static ETL_CONST bool has_denorm_loss = true;
|
||||
static ETL_CONST_OR_CONSTEXPR bool has_infinity = false;
|
||||
static ETL_CONST_OR_CONSTEXPR bool has_quiet_NaN = false;
|
||||
static ETL_CONST_OR_CONSTEXPR bool has_signaling_NaN = false;
|
||||
static ETL_CONST_OR_CONSTEXPR float_denorm_style has_denorm = denorm_present;
|
||||
static ETL_CONST_OR_CONSTEXPR bool has_denorm_loss = true;
|
||||
|
||||
static ETL_CONST bool is_iec559 = true;
|
||||
static ETL_CONST bool is_bounded = true;
|
||||
static ETL_CONST bool is_modulo = false;
|
||||
static ETL_CONST_OR_CONSTEXPR bool is_iec559 = true;
|
||||
static ETL_CONST_OR_CONSTEXPR bool is_bounded = true;
|
||||
static ETL_CONST_OR_CONSTEXPR bool is_modulo = false;
|
||||
|
||||
static ETL_CONSTEXPR T round_error() { return T(0.5); }
|
||||
static ETL_CONSTEXPR T infinity() { return 0; }
|
||||
static ETL_CONSTEXPR T quiet_NaN() { return 0; }
|
||||
static ETL_CONSTEXPR T signaling_NaN() { return 0; }
|
||||
|
||||
static ETL_CONST bool traps = false;
|
||||
static ETL_CONST bool tinyness_before = true;
|
||||
static ETL_CONST float_round_style round_style = round_to_nearest;
|
||||
static ETL_CONST_OR_CONSTEXPR bool traps = false;
|
||||
static ETL_CONST_OR_CONSTEXPR bool tinyness_before = true;
|
||||
static ETL_CONST_OR_CONSTEXPR float_round_style round_style = round_to_nearest;
|
||||
};
|
||||
|
||||
//***************************************************************************
|
||||
// Default
|
||||
template<class T>
|
||||
template <typename T>
|
||||
class numeric_limits;
|
||||
|
||||
template <typename T>
|
||||
class numeric_limits<const T> : public numeric_limits<T> { };
|
||||
|
||||
template <typename T>
|
||||
class numeric_limits<volatile T> : public numeric_limits<T> { };
|
||||
|
||||
template <typename T>
|
||||
class numeric_limits<const volatile T> : public numeric_limits<T> { };
|
||||
|
||||
//***************************************************************************
|
||||
// bool
|
||||
template<>
|
||||
@ -158,47 +167,47 @@ namespace etlstd
|
||||
{
|
||||
public:
|
||||
|
||||
static ETL_CONST bool is_specialized = true;
|
||||
static ETL_CONST_OR_CONSTEXPR bool is_specialized = true;
|
||||
|
||||
static ETL_CONSTEXPR bool min() { return false; }
|
||||
static ETL_CONSTEXPR bool max() { return true; }
|
||||
static ETL_CONSTEXPR bool lowest() { return false; }
|
||||
|
||||
static ETL_CONST int digits = 1;
|
||||
static ETL_CONST int digits10 = 0;
|
||||
static ETL_CONST int max_digits10 = 0;
|
||||
static ETL_CONST_OR_CONSTEXPR int digits = 1;
|
||||
static ETL_CONST_OR_CONSTEXPR int digits10 = 0;
|
||||
static ETL_CONST_OR_CONSTEXPR int max_digits10 = 0;
|
||||
|
||||
static ETL_CONST bool is_signed = false;
|
||||
static ETL_CONST bool is_integer = true;
|
||||
static ETL_CONST bool is_exact = true;
|
||||
static ETL_CONST_OR_CONSTEXPR bool is_signed = false;
|
||||
static ETL_CONST_OR_CONSTEXPR bool is_integer = true;
|
||||
static ETL_CONST_OR_CONSTEXPR bool is_exact = true;
|
||||
|
||||
static ETL_CONST int radix = 2;
|
||||
static ETL_CONST bool epsilon() { return 0; }
|
||||
static ETL_CONST bool round_error() { return 0; }
|
||||
static ETL_CONST_OR_CONSTEXPR int radix = 2;
|
||||
static ETL_CONST_OR_CONSTEXPR bool epsilon() { return false; }
|
||||
static ETL_CONST_OR_CONSTEXPR bool round_error() { return false; }
|
||||
|
||||
static ETL_CONST int min_exponent = 0;
|
||||
static ETL_CONST int min_exponent10 = 0;
|
||||
static ETL_CONST int max_exponent = 0;
|
||||
static ETL_CONST int max_exponent10 = 0;
|
||||
static ETL_CONST_OR_CONSTEXPR int min_exponent = 0;
|
||||
static ETL_CONST_OR_CONSTEXPR int min_exponent10 = 0;
|
||||
static ETL_CONST_OR_CONSTEXPR int max_exponent = 0;
|
||||
static ETL_CONST_OR_CONSTEXPR int max_exponent10 = 0;
|
||||
|
||||
static ETL_CONST bool has_infinity = false;
|
||||
static ETL_CONST bool has_quiet_NaN = false;
|
||||
static ETL_CONST bool has_signaling_NaN = false;
|
||||
static ETL_CONST float_denorm_style has_denorm = denorm_absent;
|
||||
static ETL_CONST bool has_denorm_loss = false;
|
||||
static ETL_CONST_OR_CONSTEXPR bool has_infinity = false;
|
||||
static ETL_CONST_OR_CONSTEXPR bool has_quiet_NaN = false;
|
||||
static ETL_CONST_OR_CONSTEXPR bool has_signaling_NaN = false;
|
||||
static ETL_CONST_OR_CONSTEXPR float_denorm_style has_denorm = denorm_absent;
|
||||
static ETL_CONST_OR_CONSTEXPR bool has_denorm_loss = false;
|
||||
|
||||
static ETL_CONSTEXPR bool infinity() { return 0; }
|
||||
static ETL_CONSTEXPR bool quiet_NaN() { return 0; }
|
||||
static ETL_CONSTEXPR bool signaling_NaN() { return 0; }
|
||||
static ETL_CONSTEXPR bool denorm_min() { return 0; }
|
||||
static ETL_CONSTEXPR bool infinity() { return false; }
|
||||
static ETL_CONSTEXPR bool quiet_NaN() { return false; }
|
||||
static ETL_CONSTEXPR bool signaling_NaN() { return false; }
|
||||
static ETL_CONSTEXPR bool denorm_min() { return false; }
|
||||
|
||||
static ETL_CONST bool is_iec559 = false;
|
||||
static ETL_CONST bool is_bounded = true;
|
||||
static ETL_CONST bool is_modulo = false;
|
||||
static ETL_CONST_OR_CONSTEXPR bool is_iec559 = false;
|
||||
static ETL_CONST_OR_CONSTEXPR bool is_bounded = true;
|
||||
static ETL_CONST_OR_CONSTEXPR bool is_modulo = false;
|
||||
|
||||
static ETL_CONST bool traps = false;
|
||||
static ETL_CONST bool tinyness_before = false;
|
||||
static ETL_CONST float_round_style round_style = round_toward_zero;
|
||||
static ETL_CONST_OR_CONSTEXPR bool traps = false;
|
||||
static ETL_CONST_OR_CONSTEXPR bool tinyness_before = false;
|
||||
static ETL_CONST_OR_CONSTEXPR float_round_style round_style = round_toward_zero;
|
||||
};
|
||||
|
||||
//***************************************************************************
|
||||
@ -384,14 +393,14 @@ namespace etlstd
|
||||
static ETL_CONSTEXPR float epsilon() { return FLT_EPSILON; }
|
||||
static ETL_CONSTEXPR float denorm_min() { return FLT_MIN; }
|
||||
|
||||
static ETL_CONST int digits = FLT_MANT_DIG;
|
||||
static ETL_CONST int digits10 = FLT_DIG;
|
||||
static ETL_CONST int max_digits10 = ETL_LOG2(FLT_MANT_DIG) + 2;
|
||||
static ETL_CONST_OR_CONSTEXPR int digits = FLT_MANT_DIG;
|
||||
static ETL_CONST_OR_CONSTEXPR int digits10 = FLT_DIG;
|
||||
static ETL_CONST_OR_CONSTEXPR int max_digits10 = ETL_LOG2(FLT_MANT_DIG) + 2;
|
||||
|
||||
static ETL_CONST int min_exponent = FLT_MIN_EXP;
|
||||
static ETL_CONST int min_exponent10 = FLT_MIN_10_EXP;
|
||||
static ETL_CONST int max_exponent = FLT_MAX_EXP;
|
||||
static ETL_CONST int max_exponent10 = FLT_MAX_10_EXP;
|
||||
static ETL_CONST_OR_CONSTEXPR int min_exponent = FLT_MIN_EXP;
|
||||
static ETL_CONST_OR_CONSTEXPR int min_exponent10 = FLT_MIN_10_EXP;
|
||||
static ETL_CONST_OR_CONSTEXPR int max_exponent = FLT_MAX_EXP;
|
||||
static ETL_CONST_OR_CONSTEXPR int max_exponent10 = FLT_MAX_10_EXP;
|
||||
};
|
||||
|
||||
//***************************************************************************
|
||||
@ -407,14 +416,14 @@ namespace etlstd
|
||||
static ETL_CONSTEXPR double epsilon() { return DBL_EPSILON; }
|
||||
static ETL_CONSTEXPR double denorm_min() { return DBL_MIN; }
|
||||
|
||||
static ETL_CONST int digits = DBL_MANT_DIG;
|
||||
static ETL_CONST int digits10 = DBL_DIG;
|
||||
static ETL_CONST int max_digits10 = ETL_LOG2(DBL_MANT_DIG) + 2;
|
||||
static ETL_CONST_OR_CONSTEXPR int digits = DBL_MANT_DIG;
|
||||
static ETL_CONST_OR_CONSTEXPR int digits10 = DBL_DIG;
|
||||
static ETL_CONST_OR_CONSTEXPR int max_digits10 = ETL_LOG2(DBL_MANT_DIG) + 2;
|
||||
|
||||
static ETL_CONST int min_exponent = DBL_MIN_EXP;
|
||||
static ETL_CONST int min_exponent10 = DBL_MIN_10_EXP;
|
||||
static ETL_CONST int max_exponent = DBL_MAX_EXP;
|
||||
static ETL_CONST int max_exponent10 = DBL_MAX_10_EXP;
|
||||
static ETL_CONST_OR_CONSTEXPR int min_exponent = DBL_MIN_EXP;
|
||||
static ETL_CONST_OR_CONSTEXPR int min_exponent10 = DBL_MIN_10_EXP;
|
||||
static ETL_CONST_OR_CONSTEXPR int max_exponent = DBL_MAX_EXP;
|
||||
static ETL_CONST_OR_CONSTEXPR int max_exponent10 = DBL_MAX_10_EXP;
|
||||
};
|
||||
|
||||
//***************************************************************************
|
||||
@ -430,14 +439,14 @@ namespace etlstd
|
||||
static ETL_CONSTEXPR long double epsilon() { return LDBL_EPSILON; }
|
||||
static ETL_CONSTEXPR long double denorm_min() { return LDBL_MIN; }
|
||||
|
||||
static ETL_CONST int digits = LDBL_MANT_DIG;
|
||||
static ETL_CONST int digits10 = LDBL_DIG;
|
||||
static ETL_CONST int max_digits10 = ETL_LOG2(LDBL_MANT_DIG) + 2;
|
||||
static ETL_CONST_OR_CONSTEXPR int digits = LDBL_MANT_DIG;
|
||||
static ETL_CONST_OR_CONSTEXPR int digits10 = LDBL_DIG;
|
||||
static ETL_CONST_OR_CONSTEXPR int max_digits10 = ETL_LOG2(LDBL_MANT_DIG) + 2;
|
||||
|
||||
static ETL_CONST int min_exponent = LDBL_MIN_EXP;
|
||||
static ETL_CONST int min_exponent10 = LDBL_MIN_10_EXP;
|
||||
static ETL_CONST int max_exponent = LDBL_MAX_EXP;
|
||||
static ETL_CONST int max_exponent10 = LDBL_MAX_10_EXP;
|
||||
static ETL_CONST_OR_CONSTEXPR int min_exponent = LDBL_MIN_EXP;
|
||||
static ETL_CONST_OR_CONSTEXPR int min_exponent10 = LDBL_MIN_10_EXP;
|
||||
static ETL_CONST_OR_CONSTEXPR int max_exponent = LDBL_MAX_EXP;
|
||||
static ETL_CONST_OR_CONSTEXPR int max_exponent10 = LDBL_MAX_10_EXP;
|
||||
};
|
||||
}
|
||||
|
||||
|
||||
@ -482,15 +482,16 @@ namespace etl
|
||||
/// Alignment templates.
|
||||
/// These require compiler specific intrinsics.
|
||||
///\ingroup type_traits
|
||||
#ifdef ETL_COMPILER_MICROSOFT
|
||||
template <typename T> struct alignment_of : integral_constant<size_t, size_t(__alignof(T))> {};
|
||||
|
||||
#elif defined(ETL_COMPILER_IAR) || defined(ETL_COMPILER_TI)
|
||||
template <typename T> struct alignment_of : integral_constant<size_t, size_t(__ALIGNOF__(T))> {};
|
||||
|
||||
#if ETL_CPP11_SUPPORTED
|
||||
template <typename T> struct alignment_of : integral_constant<size_t, size_t(alignof(T))> {};
|
||||
#else
|
||||
template <typename T> struct alignment_of : integral_constant<size_t, size_t(__alignof__(T))> {};
|
||||
|
||||
#ifdef ETL_COMPILER_MICROSOFT
|
||||
template <typename T> struct alignment_of : integral_constant<size_t, size_t(__alignof(T))> {};
|
||||
#elif defined(ETL_COMPILER_IAR) || defined(ETL_COMPILER_TI)
|
||||
template <typename T> struct alignment_of : integral_constant<size_t, size_t(__ALIGNOF__(T))> {};
|
||||
#else
|
||||
template <typename T> struct alignment_of : integral_constant<size_t, size_t(__alignof__(T))> {};
|
||||
#endif
|
||||
#endif
|
||||
|
||||
/// Specialisation of 'alignment_of' for 'void'.
|
||||
@ -523,14 +524,14 @@ namespace etl
|
||||
///\ingroup types
|
||||
//***************************************************************************
|
||||
template <typename T,
|
||||
typename T1, typename T2 = void, typename T3 = void, typename T4 = void,
|
||||
typename T5 = void, typename T6 = void, typename T7 = void, typename T8 = void,
|
||||
typename T9 = void, typename T10 = void, typename T11 = void, typename T12 = void,
|
||||
typename T13 = void, typename T14 = void, typename T15 = void, typename T16 = void,
|
||||
typename T1, typename T2 = void, typename T3 = void, typename T4 = void,
|
||||
typename T5 = void, typename T6 = void, typename T7 = void, typename T8 = void,
|
||||
typename T9 = void, typename T10 = void, typename T11 = void, typename T12 = void,
|
||||
typename T13 = void, typename T14 = void, typename T15 = void, typename T16 = void,
|
||||
typename T17 = void>
|
||||
struct is_one_of
|
||||
{
|
||||
static const bool value =
|
||||
static const bool value =
|
||||
etl::is_same<T, T1>::value ||
|
||||
etl::is_same<T, T2>::value ||
|
||||
etl::is_same<T, T3>::value ||
|
||||
|
||||
@ -494,15 +494,16 @@ namespace etl
|
||||
/// Alignment templates.
|
||||
/// These require compiler specific intrinsics.
|
||||
///\ingroup type_traits
|
||||
#ifdef ETL_COMPILER_MICROSOFT
|
||||
template <typename T> struct alignment_of : integral_constant<size_t, size_t(__alignof(T))> {};
|
||||
|
||||
#elif defined(ETL_COMPILER_IAR) || defined(ETL_COMPILER_TI)
|
||||
template <typename T> struct alignment_of : integral_constant<size_t, size_t(__ALIGNOF__(T))> {};
|
||||
|
||||
#if ETL_CPP11_SUPPORTED
|
||||
template <typename T> struct alignment_of : integral_constant<size_t, size_t(alignof(T))> {};
|
||||
#else
|
||||
template <typename T> struct alignment_of : integral_constant<size_t, size_t(__alignof__(T))> {};
|
||||
|
||||
#ifdef ETL_COMPILER_MICROSOFT
|
||||
template <typename T> struct alignment_of : integral_constant<size_t, size_t(__alignof(T))> {};
|
||||
#elif defined(ETL_COMPILER_IAR) || defined(ETL_COMPILER_TI)
|
||||
template <typename T> struct alignment_of : integral_constant<size_t, size_t(__ALIGNOF__(T))> {};
|
||||
#else
|
||||
template <typename T> struct alignment_of : integral_constant<size_t, size_t(__alignof__(T))> {};
|
||||
#endif
|
||||
#endif
|
||||
|
||||
/// Specialisation of 'alignment_of' for 'void'.
|
||||
|
||||
@ -38,8 +38,8 @@ SOFTWARE.
|
||||
///\ingroup utilities
|
||||
|
||||
#define ETL_VERSION_MAJOR 15
|
||||
#define ETL_VERSION_MINOR 4
|
||||
#define ETL_VERSION_PATCH 2
|
||||
#define ETL_VERSION_MINOR 5
|
||||
#define ETL_VERSION_PATCH 0
|
||||
|
||||
#define ETL_VERSION ETL_STRINGIFY(ETL_VERSION_MAJOR) "." ETL_STRINGIFY(ETL_VERSION_MINOR) "." ETL_STRINGIFY(ETL_VERSION_PATCH)
|
||||
#define ETL_VERSION_W ETL_STRINGIFY(ETL_VERSION_MAJOR) L"." ETL_STRINGIFY(ETL_VERSION_MINOR) L"." ETL_STRINGIFY(ETL_VERSION_PATCH)
|
||||
|
||||
@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "Embedded Template Library",
|
||||
"version": "15.4.2",
|
||||
"version": "15.5.0",
|
||||
"authors": {
|
||||
"name": "John Wellbelove",
|
||||
"email": "<john.wellbelove@etlcpp.com>"
|
||||
|
||||
@ -1,5 +1,5 @@
|
||||
name=Embedded Template Library
|
||||
version=15.4.2
|
||||
version=15.5.0
|
||||
author= John Wellbelove <john.wellbelove@etlcpp.com>
|
||||
maintainer=John Wellbelove <john.wellbelove@etlcpp.com>
|
||||
license=MIT
|
||||
|
||||
@ -1,3 +1,10 @@
|
||||
===============================================================================
|
||||
15.5.0
|
||||
Added the ability to self determine the compiler type, version and language support
|
||||
by defining ETL_AUTO_DETERMINE_COMPILER_INFO or including the 'auto.h' profile.
|
||||
Added support for C++11's 'alignas' and 'alignof'
|
||||
Changed 'memcpy' to 'memmove' in alternate STL algorithms.
|
||||
|
||||
===============================================================================
|
||||
15.4.2
|
||||
Fix visitor overridden test virtual visit function parameters
|
||||
|
||||
@ -28,18 +28,35 @@
|
||||
</ExtraCommands>
|
||||
</Target>
|
||||
<Target title="Windows No STL">
|
||||
<Option output="bin/Debug No STL/ETL" prefix_auto="1" extension_auto="1" />
|
||||
<Option object_output="obj/Debug/" />
|
||||
<Option type="1" />
|
||||
<Option compiler="gcc" />
|
||||
<Compiler>
|
||||
<Add option="-std=c++1z" />
|
||||
<Add option="-m32" />
|
||||
<Add option="-g" />
|
||||
<Add option="-D_DEBUG" />
|
||||
<Add option="-DETL_NO_STL" />
|
||||
<Add directory="../../src" />
|
||||
</Compiler>
|
||||
<Linker>
|
||||
<Add option="-m32" />
|
||||
</Linker>
|
||||
<ExtraCommands>
|
||||
<Add after="${TARGET_OUTPUT_DIR}${TARGET_OUTPUT_BASENAME}" />
|
||||
</ExtraCommands>
|
||||
</Target>
|
||||
<Target title="Linux">
|
||||
<Option output="bin/Debug/ETL" prefix_auto="1" extension_auto="1" />
|
||||
<Option object_output="obj/Debug/" />
|
||||
<Option type="1" />
|
||||
<Option compiler="gcc" />
|
||||
<Compiler>
|
||||
<Add option="-std=c++14" />
|
||||
<Add option="-std=c++17" />
|
||||
<Add option="-std=c++11" />
|
||||
<Add option="-m32" />
|
||||
<Add option="-g" />
|
||||
<Add option="-D_DEBUG" />
|
||||
<Add option="-DETL_NO_STL" />
|
||||
<Add directory="../../src" />
|
||||
</Compiler>
|
||||
<Linker>
|
||||
@ -55,7 +72,6 @@
|
||||
<Option type="1" />
|
||||
<Option compiler="gcc" />
|
||||
<Compiler>
|
||||
<Add option="-std=c++11" />
|
||||
<Add option="-m64" />
|
||||
<Add option="-g" />
|
||||
<Add option="-D_DEBUG" />
|
||||
@ -68,32 +84,13 @@
|
||||
<Add after="${TARGET_OUTPUT_DIR}${TARGET_OUTPUT_BASENAME}" />
|
||||
</ExtraCommands>
|
||||
</Target>
|
||||
<Target title="Linux">
|
||||
<Option output="bin/Debug/ETL" prefix_auto="1" extension_auto="1" />
|
||||
<Option object_output="obj/Debug/" />
|
||||
<Option type="1" />
|
||||
<Option compiler="gcc" />
|
||||
<Compiler>
|
||||
<Add option="-std=c++14" />
|
||||
<Add option="-std=c++17" />
|
||||
<Add option="-std=c++11" />
|
||||
<Add option="-g" />
|
||||
<Add option="-D_DEBUG" />
|
||||
</Compiler>
|
||||
<ExtraCommands>
|
||||
<Add after="${TARGET_OUTPUT_DIR}${TARGET_OUTPUT_BASENAME}" />
|
||||
<Mode after="always" />
|
||||
</ExtraCommands>
|
||||
</Target>
|
||||
<Target title="Linux No STL">
|
||||
<Option output="bin/Debug/ETL" prefix_auto="1" extension_auto="1" />
|
||||
<Option object_output="obj/Debug/" />
|
||||
<Option type="1" />
|
||||
<Option compiler="gcc" />
|
||||
<Compiler>
|
||||
<Add option="-std=c++14" />
|
||||
<Add option="-std=c++17" />
|
||||
<Add option="-std=c++11" />
|
||||
<Add option="-g" />
|
||||
<Add option="-D_DEBUG" />
|
||||
<Add option="-DETL_NO_STL" />
|
||||
@ -105,14 +102,12 @@
|
||||
</Target>
|
||||
</Build>
|
||||
<Compiler>
|
||||
<Add option="-Wunused-parameter" />
|
||||
<Add option="-Wstrict-aliasing" />
|
||||
<Add option="-Wshadow" />
|
||||
<Add option="-Wundef" />
|
||||
<Add option="-Wall" />
|
||||
<Add option="-std=c++14" />
|
||||
<Add option="-Wunused-parameter" />
|
||||
<Add option="-Wstrict-aliasing" />
|
||||
<Add option="-std=c++17" />
|
||||
<Add option="-std=c++11" />
|
||||
<Add option="-fexceptions" />
|
||||
<Add directory="../../../unittest-cpp/UnitTest++/" />
|
||||
<Add directory="../../src" />
|
||||
@ -300,10 +295,21 @@
|
||||
<Unit filename="../../include/etl/pool.h" />
|
||||
<Unit filename="../../include/etl/power.h" />
|
||||
<Unit filename="../../include/etl/priority_queue.h" />
|
||||
<Unit filename="../../include/etl/private/choose_namespace.h" />
|
||||
<Unit filename="../../include/etl/private/choose_pair_types.h" />
|
||||
<Unit filename="../../include/etl/private/choose_tag_types.h" />
|
||||
<Unit filename="../../include/etl/private/crc16_poly_0x1021_.h" />
|
||||
<Unit filename="../../include/etl/private/crc16_poly_0x8005.h" />
|
||||
<Unit filename="../../include/etl/private/crc32_poly_0x04c11db7.h" />
|
||||
<Unit filename="../../include/etl/private/crc32_poly_0x1edc6f41.h" />
|
||||
<Unit filename="../../include/etl/private/crc64_poly_0x42f0e1eba9ea3693.h" />
|
||||
<Unit filename="../../include/etl/private/crc8_poly_0x07.h" />
|
||||
<Unit filename="../../include/etl/private/delegate_base.h" />
|
||||
<Unit filename="../../include/etl/private/delegate_base_cpp03.h" />
|
||||
<Unit filename="../../include/etl/private/delegate_cpp03.h" />
|
||||
<Unit filename="../../include/etl/private/ivectorpointer.h" />
|
||||
<Unit filename="../../include/etl/private/minmax_pop.h" />
|
||||
<Unit filename="../../include/etl/private/minmax_push.h" />
|
||||
<Unit filename="../../include/etl/private/pvoidvector.h" />
|
||||
<Unit filename="../../include/etl/private/to_string_helper.h" />
|
||||
<Unit filename="../../include/etl/private/vector_base.h" />
|
||||
@ -321,6 +327,8 @@
|
||||
<Unit filename="../../include/etl/profiles/cpp14_no_stl.h" />
|
||||
<Unit filename="../../include/etl/profiles/cpp17.h" />
|
||||
<Unit filename="../../include/etl/profiles/cpp17_no_stl.h" />
|
||||
<Unit filename="../../include/etl/profiles/determine_compiler.h" />
|
||||
<Unit filename="../../include/etl/profiles/determine_compiler_version.h" />
|
||||
<Unit filename="../../include/etl/profiles/etl_profile.h" />
|
||||
<Unit filename="../../include/etl/profiles/gcc_generic.h" />
|
||||
<Unit filename="../../include/etl/profiles/gcc_linux_x86.h" />
|
||||
|
||||
@ -95,10 +95,14 @@ SOFTWARE.
|
||||
#define ETL_TIMER_SEMAPHORE_TYPE uint32_t
|
||||
#endif
|
||||
|
||||
#ifdef _MSC_VER
|
||||
#include "etl/profiles/msvc_x86.h"
|
||||
#else
|
||||
#include "etl/profiles/gcc_windows_x86.h"
|
||||
#if defined(WIN32) || defined(WIN64) || defined(_WIN32) || defined(_WIN64)
|
||||
#define ETL_TARGET_OS_WINDOWS
|
||||
#endif
|
||||
|
||||
#if defined(linux)
|
||||
#define ETL_TARGET_OS_LINUX
|
||||
#endif
|
||||
|
||||
#include "etl/profiles/auto.h"
|
||||
|
||||
#endif
|
||||
|
||||
@ -30,6 +30,7 @@ SOFTWARE.
|
||||
|
||||
#include <cstdint>
|
||||
#include <type_traits>
|
||||
#include <limits>
|
||||
|
||||
#include "etl/binary.h"
|
||||
#include "etl/bitset.h"
|
||||
|
||||
@ -342,7 +342,7 @@
|
||||
</PrecompiledHeader>
|
||||
<WarningLevel>Level3</WarningLevel>
|
||||
<Optimization>Disabled</Optimization>
|
||||
<PreprocessorDefinitions>WIN32;_DEBUG;_CONSOLE;_LIB;_CRT_SECURE_NO_WARNINGS;_SCL_SECURE_NO_WARNINGS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||
<PreprocessorDefinitions>WIN32;_DEBUG;_CONSOLE;_LIB;_CRT_SECURE_NO_WARNINGS;_SCL_SECURE_NO_WARNINGS;__clang__;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||
<AdditionalIncludeDirectories>../../../unittest-cpp/UnitTest++/;../../include;../../include/etl/c;../../test</AdditionalIncludeDirectories>
|
||||
<UndefinePreprocessorDefinitions>
|
||||
</UndefinePreprocessorDefinitions>
|
||||
@ -350,7 +350,7 @@
|
||||
<LanguageStandard>stdcpp17</LanguageStandard>
|
||||
<SupportJustMyCode>false</SupportJustMyCode>
|
||||
<DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
|
||||
<AdditionalOptions>-Wno-self-assign %(AdditionalOptions)</AdditionalOptions>
|
||||
<AdditionalOptions>-Wno-self-assign /Zc:__cplusplus %(AdditionalOptions)</AdditionalOptions>
|
||||
</ClCompile>
|
||||
<Link>
|
||||
<SubSystem>Console</SubSystem>
|
||||
@ -366,7 +366,7 @@
|
||||
</PrecompiledHeader>
|
||||
<WarningLevel>Level3</WarningLevel>
|
||||
<Optimization>Disabled</Optimization>
|
||||
<PreprocessorDefinitions>WIN32;_DEBUG;_CONSOLE;_LIB;_CRT_SECURE_NO_WARNINGS;_SCL_SECURE_NO_WARNINGS;ETL_NO_STL;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||
<PreprocessorDefinitions>WIN32;_DEBUG;_CONSOLE;_LIB;_CRT_SECURE_NO_WARNINGS;_SCL_SECURE_NO_WARNINGS;ETL_NO_STL;__clang__;%(PreprocessorDefinitions)</PreprocessorDefinitions>
|
||||
<AdditionalIncludeDirectories>../../../unittest-cpp/UnitTest++/;../../include;../../include/etl/c;../../test</AdditionalIncludeDirectories>
|
||||
<UndefinePreprocessorDefinitions>
|
||||
</UndefinePreprocessorDefinitions>
|
||||
@ -374,7 +374,7 @@
|
||||
<LanguageStandard>stdcpp17</LanguageStandard>
|
||||
<SupportJustMyCode>false</SupportJustMyCode>
|
||||
<DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
|
||||
<AdditionalOptions>-Wno-self-assign %(AdditionalOptions)</AdditionalOptions>
|
||||
<AdditionalOptions>-Wno-self-assign /Zc:__cplusplus %(AdditionalOptions)</AdditionalOptions>
|
||||
</ClCompile>
|
||||
<Link>
|
||||
<SubSystem>Console</SubSystem>
|
||||
@ -747,9 +747,13 @@
|
||||
<ClInclude Include="..\..\include\etl\private\to_string_helper.h" />
|
||||
<ClInclude Include="..\..\include\etl\profiles\armv7.h" />
|
||||
<ClInclude Include="..\..\include\etl\profiles\armv7_no_stl.h" />
|
||||
<ClInclude Include="..\..\include\etl\profiles\auto.h" />
|
||||
<ClInclude Include="..\..\include\etl\profiles\clang_generic.h" />
|
||||
<ClInclude Include="..\..\include\etl\profiles\cpp17.h" />
|
||||
<ClInclude Include="..\..\include\etl\profiles\cpp17_no_stl.h" />
|
||||
<ClInclude Include="..\..\include\etl\profiles\determine_compiler.h" />
|
||||
<ClInclude Include="..\..\include\etl\profiles\determine_compiler_language_support.h" />
|
||||
<ClInclude Include="..\..\include\etl\profiles\determine_compiler_version.h" />
|
||||
<ClInclude Include="..\..\include\etl\queue_spsc_locked.h" />
|
||||
<ClInclude Include="..\..\include\etl\scaled_rounding.h" />
|
||||
<ClInclude Include="..\..\include\etl\state_chart.h" />
|
||||
|
||||
@ -846,6 +846,18 @@
|
||||
<ClInclude Include="..\..\include\etl\crc32_posix.h">
|
||||
<Filter>ETL\Maths</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="..\..\include\etl\profiles\determine_compiler_version.h">
|
||||
<Filter>ETL\Profiles</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="..\..\include\etl\profiles\determine_compiler.h">
|
||||
<Filter>ETL\Profiles</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="..\..\include\etl\profiles\auto.h">
|
||||
<Filter>ETL\Profiles</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="..\..\include\etl\profiles\determine_compiler_language_support.h">
|
||||
<Filter>ETL\Profiles</Filter>
|
||||
</ClInclude>
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<ClCompile Include="..\main.cpp">
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user