diff --git a/src/common/p25/NID.cpp b/src/common/p25/NID.cpp index 82a7c65b..f6cf1f32 100644 --- a/src/common/p25/NID.cpp +++ b/src/common/p25/NID.cpp @@ -60,17 +60,7 @@ NID::NID(uint32_t nac) : /// NID::~NID() { - for (uint8_t i = 0; i < 16U; i++) - { - if (m_rxTx[i] != nullptr) { - delete[] m_rxTx[i]; - } - - if (m_tx[i] != nullptr) { - delete[] m_tx[i]; - } - } - + cleanupArrays(); delete[] m_rxTx; delete[] m_tx; } @@ -90,6 +80,7 @@ bool NID::decode(const uint8_t* data) // handle digital "squelch" NAC if ((m_nac == P25_NAC_DIGITAL_SQ) || (m_nac == P25_NAC_REUSE_RX_NAC)) { uint32_t nac = ((nid[0U] << 4) + (nid[1U] >> 4)) & 0xFFFU; + cleanupArrays(); createRxTxNID(nac); // bryanb: I hate this and it'll be slow } @@ -165,6 +156,7 @@ void NID::encode(uint8_t* data, uint8_t duid) else { // handle digital "squelch" NAC if (m_nac == P25_NAC_DIGITAL_SQ) { + cleanupArrays(); createRxTxNID(P25_DEFAULT_NAC); } @@ -202,6 +194,23 @@ void NID::setTxNAC(uint32_t nac) // Private Class Members // --------------------------------------------------------------------------- +/// +/// +/// +void NID::cleanupArrays() +{ + for (uint8_t i = 0; i < 16U; i++) + { + if (m_rxTx[i] != nullptr) { + delete[] m_rxTx[i]; + } + + if (m_tx[i] != nullptr) { + delete[] m_tx[i]; + } + } +} + /// /// /// diff --git a/src/common/p25/NID.h b/src/common/p25/NID.h index 6c1fd335..0bfcdc24 100644 --- a/src/common/p25/NID.h +++ b/src/common/p25/NID.h @@ -51,6 +51,8 @@ namespace p25 bool m_splitNac; + /// + void cleanupArrays(); /// void createRxTxNID(uint32_t nac); ///