Skip to content

Commit 524fb65

Browse files
author
John Wellbelove
committed
Sync to ETL 20.43.3
1 parent b5e2b1c commit 524fb65

File tree

12 files changed

+118
-207
lines changed

12 files changed

+118
-207
lines changed

library.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "Embedded Template Library ETL",
3-
"version": "20.43.2",
3+
"version": "20.43.3",
44
"authors": {
55
"name": "John Wellbelove",
66
"email": "[email protected]"

library.properties

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
name=Embedded Template Library ETL
2-
version=20.43.2
2+
version=20.43.3
33
author= John Wellbelove <[email protected]>
44
maintainer=John Wellbelove <[email protected]>
55
license=MIT

src/etl/alignment.h

Lines changed: 36 additions & 65 deletions
Original file line numberDiff line numberDiff line change
@@ -450,17 +450,10 @@ namespace etl
450450
template <typename... TArgs>
451451
reference create(TArgs&&... args) ETL_NOEXCEPT_EXPR(ETL_NOT_USING_EXCEPTIONS)
452452
{
453-
if (has_value())
454-
{
455-
storage.value = T(args...);
456-
}
457-
else
458-
{
459-
valid = true;
460-
::new (&storage.value) value_type(etl::forward<TArgs>(args)...);
461-
}
462-
463-
return storage.value;
453+
ETL_ASSERT(!has_value(), ETL_ERROR(etl::typed_storage_error));
454+
pointer p = ::new (&storage.value) value_type(etl::forward<TArgs>(args)...);
455+
valid = true;
456+
return *p;
464457
}
465458
#else
466459
//***************************************************************************
@@ -470,17 +463,10 @@ namespace etl
470463
template <typename T1>
471464
reference create(const T1& t1)
472465
{
473-
if (has_value())
474-
{
475-
storage.value = T(t1);
476-
}
477-
else
478-
{
479-
valid = true;
480-
::new (&storage.value) value_type(t1);
481-
}
482-
483-
return storage.value;
466+
ETL_ASSERT(!has_value(), ETL_ERROR(etl::typed_storage_error));
467+
pointer p = ::new (&storage.value) value_type(t1);
468+
valid = true;
469+
return *p;
484470
}
485471

486472
//***************************************************************************
@@ -490,17 +476,10 @@ namespace etl
490476
template <typename T1, typename T2>
491477
reference create(const T1& t1, const T2& t2)
492478
{
493-
if (has_value())
494-
{
495-
storage.value = T(t1, t2);
496-
}
497-
else
498-
{
499-
valid = true;
500-
::new (&storage.value) value_type(t1, t2);
501-
}
502-
503-
return storage.value;
479+
ETL_ASSERT(!has_value(), ETL_ERROR(etl::typed_storage_error));
480+
pointer p = ::new (&storage.value) value_type(t1, t2);
481+
valid = true;
482+
return *p;
504483
}
505484

506485
//***************************************************************************
@@ -510,17 +489,10 @@ namespace etl
510489
template <typename T1, typename T2, typename T3>
511490
reference create(const T1& t1, const T2& t2, const T3& t3)
512491
{
513-
if (has_value())
514-
{
515-
storage.value = T(t1, t2, t3);
516-
}
517-
else
518-
{
519-
valid = true;
520-
::new (&storage.value) value_type(t1, t2, t3);
521-
}
522-
523-
return storage.value;
492+
ETL_ASSERT(!has_value(), ETL_ERROR(etl::typed_storage_error));
493+
pointer p = ::new (&storage.value) value_type(t1, t2, t3);
494+
valid = true;
495+
return *p;
524496
}
525497

526498
//***************************************************************************
@@ -530,17 +502,10 @@ namespace etl
530502
template <typename T1, typename T2, typename T3, typename T4>
531503
reference create(const T1& t1, const T2& t2, const T3& t3, const T4& t4)
532504
{
533-
if (has_value())
534-
{
535-
storage.value = T(t1, t2, t3, t4);
536-
}
537-
else
538-
{
539-
valid = true;
540-
::new (&storage.value) value_type(t1, t2, t3, t4);
541-
}
542-
543-
return storage.value;
505+
ETL_ASSERT(!has_value(), ETL_ERROR(etl::typed_storage_error));
506+
pointer p = ::new (&storage.value) value_type(t1, t2, t3, t4);
507+
valid = true;
508+
return *p;
544509
}
545510
#endif
546511

@@ -684,6 +649,7 @@ namespace etl
684649
, valid(false)
685650
{
686651
ETL_ASSERT(etl::is_aligned(pbuffer_, etl::alignment_of<T>::value), ETL_ERROR(etl::alignment_error));
652+
create(t1);
687653
}
688654

689655
//***************************************************************************
@@ -744,62 +710,67 @@ namespace etl
744710
#if ETL_USING_CPP11
745711
//***************************************************************************
746712
/// Constructs the instance of T forwarding the given \p args to its constructor.
747-
/// \returns the instance of T which has been constructed in the internal byte array.
713+
/// \returns the instance of T which has been constructed in the external buffer.
748714
//***************************************************************************
749715
template <typename... TArgs>
750716
reference create(TArgs&&... args) ETL_NOEXCEPT_EXPR(ETL_NOT_USING_EXCEPTIONS)
751717
{
752718
ETL_ASSERT(!has_value(), ETL_ERROR(etl::typed_storage_error));
719+
pointer p = ::new (pbuffer) value_type(etl::forward<TArgs>(args)...);
753720
valid = true;
754-
return *::new (pbuffer) value_type(etl::forward<TArgs>(args)...);
721+
return *p;
755722
}
756723
#else
757724
//***************************************************************************
758725
/// Constructs the instance of T with type T1
759-
/// \returns the instance of T which has been constructed in the internal byte array.
726+
/// \returns the instance of T which has been constructed in the external buffer.
760727
//***************************************************************************
761728
template <typename T1>
762729
reference create(const T1& t1)
763730
{
764731
ETL_ASSERT(!has_value(), ETL_ERROR(etl::typed_storage_error));
732+
pointer p = ::new (pbuffer) value_type(t1);
765733
valid = true;
766-
return *::new (pbuffer) value_type(t1);
734+
return *p;
767735
}
768736

769737
//***************************************************************************
770738
/// Constructs the instance of T with types T1, T2
771-
/// \returns the instance of T which has been constructed in the internal byte array.
739+
/// \returns the instance of T which has been constructed in the external buffer.
772740
//***************************************************************************
773741
template <typename T1, typename T2>
774742
reference create(const T1& t1, const T2& t2)
775743
{
776744
ETL_ASSERT(!has_value(), ETL_ERROR(etl::typed_storage_error));
745+
pointer p = ::new (pbuffer) value_type(t1, t2);
777746
valid = true;
778-
return *::new (pbuffer) value_type(t1, t2);
747+
return *p;
779748
}
780749

781750
//***************************************************************************
782751
/// Constructs the instance of T with types T1, T2, T3
783-
/// \returns the instance of T which has been constructed in the internal byte array.
752+
/// \returns the instance of T which has been constructed in the external buffer.
784753
//***************************************************************************
785754
template <typename T1, typename T2, typename T3>
786755
reference create(const T1& t1, const T2& t2, const T3& t3)
787756
{
788757
ETL_ASSERT(!has_value(), ETL_ERROR(etl::typed_storage_error));
758+
pointer p = ::new (pbuffer) value_type(t1, t2, t3);
789759
valid = true;
790-
return *::new (pbuffer) value_type(t1, t2, t3);
760+
return *p;
791761
}
792762

793763
//***************************************************************************
794764
/// Constructs the instance of T with types T1, T2, T3, T4
795-
/// \returns the instance of T which has been constructed in the internal byte array.
765+
/// \returns the instance of T which has been constructed in the external buffer.
796766
//***************************************************************************
797767
template <typename T1, typename T2, typename T3, typename T4>
798768
reference create(const T1& t1, const T2& t2, const T3& t3, const T4& t4)
799769
{
800770
ETL_ASSERT(!has_value(), ETL_ERROR(etl::typed_storage_error));
771+
pointer p = ::new (pbuffer) value_type(t1, t2, t3, t4);
801772
valid = true;
802-
return *::new (pbuffer) value_type(t1, t2, t3, t4);
773+
return *p;
803774
}
804775
#endif
805776

0 commit comments

Comments
 (0)