Line data Source code
1 : // Copyright 2024 Accenture. 2 : 3 : #pragma once 4 : 5 : #include <platform/estdint.h> 6 : 7 : namespace docan 8 : { 9 : /** 10 : * helper class to store a pair of addresses. An address pair is valid if 11 : * at least one of the addresses is not invalid. 12 : * \tparam T address type 13 : */ 14 : template<class T> 15 : class DoCanDataLinkAddressPair 16 : { 17 : public: 18 : using AddressType = T; 19 : 20 : DoCanDataLinkAddressPair(); 21 : DoCanDataLinkAddressPair(AddressType receptionAddress, AddressType targetAddress); 22 : DoCanDataLinkAddressPair(DoCanDataLinkAddressPair const& other); 23 : 24 : bool isValid() const; 25 : 26 : AddressType getReceptionAddress() const; 27 : AddressType getTransmissionAddress() const; 28 : 29 : bool operator==(DoCanDataLinkAddressPair const& other) const; 30 : DoCanDataLinkAddressPair& operator=(DoCanDataLinkAddressPair const& other); 31 : 32 : private: 33 : AddressType _receptionAddress; 34 : AddressType _transmissionAddress; 35 : }; 36 : 37 : /** 38 : * Inline implementations. 39 : */ 40 : template<class T> 41 57 : inline DoCanDataLinkAddressPair<T>::DoCanDataLinkAddressPair() : DoCanDataLinkAddressPair(0, 0) 42 : {} 43 : 44 : template<class T> 45 217 : inline DoCanDataLinkAddressPair<T>::DoCanDataLinkAddressPair( 46 : AddressType const receptionAddress, AddressType const targetAddress) 47 121 : : _receptionAddress(receptionAddress), _transmissionAddress(targetAddress) 48 : {} 49 : 50 : template<class T> 51 324 : inline DoCanDataLinkAddressPair<T>::DoCanDataLinkAddressPair(DoCanDataLinkAddressPair const& other) 52 324 : : _receptionAddress(other.getReceptionAddress()) 53 324 : , _transmissionAddress(other.getTransmissionAddress()) 54 : {} 55 : 56 : template<class T> 57 : inline bool DoCanDataLinkAddressPair<T>::isValid() const 58 : { 59 : return _receptionAddress != _transmissionAddress; 60 : } 61 : 62 : template<class T> 63 : inline typename DoCanDataLinkAddressPair<T>::AddressType 64 2344 : DoCanDataLinkAddressPair<T>::getReceptionAddress() const 65 : { 66 1976 : return _receptionAddress; 67 : } 68 : 69 : template<class T> 70 : inline typename DoCanDataLinkAddressPair<T>::AddressType 71 115 : DoCanDataLinkAddressPair<T>::getTransmissionAddress() const 72 : { 73 110 : return _transmissionAddress; 74 : } 75 : 76 : template<class T> 77 31 : inline bool DoCanDataLinkAddressPair<T>::operator==(DoCanDataLinkAddressPair const& other) const 78 : { 79 31 : return (_receptionAddress == other._receptionAddress) 80 31 : && (_transmissionAddress == other._transmissionAddress); 81 : } 82 : 83 : template<class T> 84 : inline DoCanDataLinkAddressPair<T>& 85 73 : DoCanDataLinkAddressPair<T>::operator=(DoCanDataLinkAddressPair const& other) 86 : { 87 43 : if (&other != this) 88 : { 89 73 : _receptionAddress = other._receptionAddress; 90 73 : _transmissionAddress = other._transmissionAddress; 91 : } 92 : return *this; 93 : } 94 : } // namespace docan