/** * Helper Class for handling Entity IdentifierStructs * $Id$ * $HeadURL$ * $Author$ * Created by Malte Diers, NLE, 2019-07-11 */ #include "identifierstruct.h" #include "settings.h" #include namespace HighLevelArchitecture { quint16 IdentifierStruct::s_nextId = 1; quint16 IdentifierStruct::s_ownSiteId = 1; IdentifierStruct::IdentifierStruct(const rpr2::EntityIdentifierStruct &eis) : m_siteId(eis.FederateIdentifier.SiteID) { setSiteId(eis.FederateIdentifier.SiteID); setApplicationId(eis.FederateIdentifier.ApplicationID); setEntityNumber(eis.EntityNumber); } rpr2::EntityIdentifierStruct IdentifierStruct::toEIS() const { rpr2::EntityIdentifierStruct eis; eis.FederateIdentifier.SiteID = siteId(); eis.FederateIdentifier.ApplicationID = applicationId(); eis.EntityNumber = entityNumber(); return eis; } void IdentifierStruct::makeOwn() { setSiteId(ownSiteId()); setApplicationId(ownApplicationId()); } QString IdentifierStruct::toString() const { return QStringLiteral("[Site %1 | Application: %2 | Entity %3]") .arg(siteId()) .arg(applicationId()) .arg(entityNumber()); } qint64 IdentifierStruct::toInt64() const { quint64 res = 0; res += siteId(); res <<= 16; res += applicationId(); res <<= 16; res += entityNumber(); return static_cast(res); } IdentifierStruct IdentifierStruct::fromInt64(qint64 value) { const quint64 uvalue = static_cast(value); IdentifierStruct is; if ((uvalue >> 32) == 0) is.setSiteId(ownSiteId()); else is.setSiteId((uvalue >> 32) & 0xffffU); if (((uvalue >> 16) & 0xffffU) == 0) is.setApplicationId(ownApplicationId()); else is.setApplicationId((uvalue >> 16 & 0xffffU)); is.setEntityNumber(uvalue & 0xffffU); return is; } quint16 IdentifierStruct::ownSiteId() { return s_ownSiteId; } quint16 IdentifierStruct::ownApplicationId() { static const int s_applicationId = Settings::applicationId(); return s_applicationId; } } // namespace