コード例 #1
0
//------------------------------------------------------------------------------
// 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;
}
コード例 #2
0
ファイル: main.cpp プロジェクト: CCJY/coliru
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);
}