#ifndef FSFW_STORAGEMANAGER_STOREADDRESS_H_ #define FSFW_STORAGEMANAGER_STOREADDRESS_H_ #include namespace storeId { static constexpr uint32_t INVALID_STORE_ADDRESS = 0xffffffff; } /** * This union defines the type that identifies where a data packet is * stored in the store. It comprises of a raw part to read it as raw value and * a structured part to use it in pool-like stores. */ union store_address_t { /** * Default Constructor, initializing to INVALID_ADDRESS */ store_address_t(): raw(storeId::INVALID_STORE_ADDRESS){} /** * Constructor to create an address object using the raw address * * @param rawAddress */ store_address_t(uint32_t rawAddress):raw(rawAddress){} /** * Constructor to create an address object using pool * and packet indices * * @param poolIndex * @param packetIndex */ store_address_t(uint16_t poolIndex, uint16_t packetIndex): poolIndex(poolIndex), packetIndex(packetIndex){} /** * A structure with two elements to access the store address pool-like. */ struct { /** * The index in which pool the packet lies. */ uint16_t poolIndex; /** * The position in the chosen pool. */ uint16_t packetIndex; }; /** * Alternative access to the raw value. */ uint32_t raw; bool operator==(const store_address_t& other) const { return raw == other.raw; } }; #endif /* FSFW_STORAGEMANAGER_STOREADDRESS_H_ */