/* * Copyright (C) 2014 Pavel Kirienko */ #pragma once #include #include namespace uavcan { template class ReceivedDataStructure : public DataType_ { const IncomingTransfer* transfer_; template Ret safeget() const { if (!transfer_) { assert(0); return Ret(); } return (transfer_->*Fun)(); } protected: ReceivedDataStructure() : transfer_(NULL) { } void setTransfer(const IncomingTransfer* transfer) { assert(transfer); transfer_ = transfer; } public: typedef DataType_ DataType; uint64_t getMonotonicTimestamp() const { return safeget(); } uint64_t getUtcTimestamp() const { return safeget(); } TransferType getTransferType() const { return safeget(); } TransferID getTransferID() const { return safeget(); } NodeID getSrcNodeID() const { return safeget(); } }; }