//------------------------------------------------------------------------------ // Adds an epoch/data pair to the dataStore. //------------------------------------------------------------------------------ bool CCSDSAEMEulerAngleSegment::AddData(Real epoch, Rvector data) { // First, check for data size and ordering CCSDSAEMSegment::AddData(epoch, data); // We need to store the angles in radians Rvector useData(3, data[0] * GmatMathConstants::RAD_PER_DEG, data[1] * GmatMathConstants::RAD_PER_DEG, data[2] * GmatMathConstants::RAD_PER_DEG); if (!ValidateEulerAngles(useData)) { std::string errmsg = segError; errmsg += "Data within DATA segment are not valid Euler Angles.\n"; throw UtilityException(errmsg); } EpochAndData *newData = new EpochAndData(); newData->epoch = epoch; newData->data = useData; dataStore.push_back(newData); #ifdef DEBUG_AEM_EULER_DATA MessageInterface::ShowMessage("----> For (Euler Angle) segment number %d, added epoch = " "%12.10f and data = %12.10f %12.10f %12.10f\n", segmentNumber, epoch, useData[0], useData[1], useData[2]); #endif return true; }
void Processor::doProcess(DataOwner& dataOwner) { auto l = [this](Data& d) { useData(d); }; class DataOwnerCallback final : public IDataOwnerCallback { decltype(l)& l; public: DataOwnerCallback(decltype(l)& p) : l(p) {} virtual void visit(Data& data) final override { l(data); } } callback; dataOwner.accept(callback); }