@@ -740,6 +740,87 @@ template<class T>
740
740
void as_const (T &&) = delete;
741
741
#endif
742
742
743
+ /* C++17 byte */
744
+ #if __cplusplus >= 201703 || __cpp_lib_byte >= 201603
745
+ using std::byte;
746
+ #else
747
+ enum class byte : unsigned char {};
748
+
749
+ template <class IntType >
750
+ constexpr std::enable_if_t <std::is_integral<IntType>::value,
751
+ byte &> operator <<=(byte &b, IntType shift) noexcept
752
+ {
753
+ return b = byte (static_cast <unsigned char >(b) << shift);
754
+ }
755
+
756
+ template <class IntType >
757
+ constexpr std::enable_if_t <std::is_integral<IntType>::value,
758
+ byte> operator <<(byte b, IntType shift) noexcept
759
+ {
760
+ return byte (static_cast <unsigned char >(b) << shift);
761
+ }
762
+
763
+ template <class IntType >
764
+ constexpr std::enable_if_t <std::is_integral<IntType>::value,
765
+ byte &> operator >>=(byte &b, IntType shift) noexcept {
766
+ return b = byte (static_cast <unsigned char >(b) >> shift);
767
+ }
768
+
769
+ template <class IntType >
770
+ constexpr std::enable_if_t <std::is_integral<IntType>::value,
771
+ byte> operator >>(byte b, IntType shift) noexcept
772
+ {
773
+ return byte (static_cast <unsigned char >(b) >> shift);
774
+ }
775
+
776
+ template <class IntType >
777
+ constexpr byte &operator |=(byte &l, byte r) noexcept
778
+ {
779
+ return l = byte (static_cast <unsigned char >(l) | static_cast <unsigned char >(r));
780
+ }
781
+
782
+ template <class IntType >
783
+ constexpr byte operator |(byte &l, byte r) noexcept {
784
+ return byte (static_cast <unsigned char >(l) | static_cast <unsigned char >(r));
785
+ }
786
+
787
+ template <class IntType >
788
+ constexpr byte &operator &=(byte &l, byte r) noexcept
789
+ {
790
+ return l = byte (static_cast <unsigned char >(l) & static_cast <unsigned char >(r));
791
+ }
792
+
793
+ template <class IntType >
794
+ constexpr byte operator &(byte &l, byte r) noexcept
795
+ {
796
+ return byte (static_cast <unsigned char >(l) & static_cast <unsigned char >(r));
797
+ }
798
+
799
+ template <class IntType >
800
+ constexpr byte &operator ^=(byte &l, byte r) noexcept
801
+ {
802
+ return l = byte (static_cast <unsigned char >(l) ^ static_cast <unsigned char >(r));
803
+ }
804
+
805
+ template <class IntType >
806
+ constexpr byte operator ^(byte &l, byte r) noexcept
807
+ {
808
+ return byte (static_cast <unsigned char >(l) ^ static_cast <unsigned char >(r));
809
+ }
810
+
811
+ template <class IntType >
812
+ constexpr byte operator ~(byte b) noexcept
813
+ {
814
+ return byte (~static_cast <unsigned char >(b));
815
+ }
816
+
817
+ template <class IntType >
818
+ constexpr std::enable_if_t <std::is_integral<IntType>::value,
819
+ IntType> to_integer (byte b) noexcept
820
+ {
821
+ return IntType (b);
822
+ }
823
+ #endif
743
824
} // namespace mbed
744
825
745
826
#endif // MBED_CXXSUPPORT_H
0 commit comments