diff --git a/include/gnss_utils/observations.h b/include/gnss_utils/observations.h index f41812f2a64ebf5515b47b7a1b7564add10a8cde..f0715dc58893ee4fe3e3b48868089cbc5c480923 100644 --- a/include/gnss_utils/observations.h +++ b/include/gnss_utils/observations.h @@ -26,6 +26,7 @@ class Observations public: // Constructor & Destructor Observations(); + Observations(const Observations& obs); ~Observations(); // Public objects diff --git a/src/observations.cpp b/src/observations.cpp index 3b2e5fe28b683427e90d16a67111f0ef9a31197f..1b39857bbe0252fdf45491c6ebba405c42c8c051 100644 --- a/src/observations.cpp +++ b/src/observations.cpp @@ -10,6 +10,31 @@ Observations::Observations() } +Observations::Observations(const Observations& obs) + : sat_2_idx_(obs.sat_2_idx_) + , idx_2_sat_(obs.idx_2_sat_) + , obs_(obs.obs_.size()) +{ + // copy all elements + for (auto i = 0; i<obs.obs_.size(); i++) + { + obs_[i].time = obs.obs_[i].time; + obs_[i].eventime = obs.obs_[i].eventime; + obs_[i].timevalid = obs.obs_[i].timevalid; + obs_[i].sat = obs.obs_[i].sat; + obs_[i].rcv = obs.obs_[i].rcv; + std::copy(obs.obs_[i].SNR, obs.obs_[i].SNR + NFREQ+NEXOBS, obs_[i].SNR); + std::copy(obs.obs_[i].LLI, obs.obs_[i].LLI + NFREQ+NEXOBS, obs_[i].LLI); + std::copy(obs.obs_[i].code, obs.obs_[i].code + NFREQ+NEXOBS, obs_[i].code); + std::copy(obs.obs_[i].qualL, obs.obs_[i].qualL + NFREQ+NEXOBS, obs_[i].qualL); + std::copy(obs.obs_[i].qualP, obs.obs_[i].qualP + NFREQ+NEXOBS, obs_[i].qualP); + obs_[i].freq = obs.obs_[i].freq; + std::copy(obs.obs_[i].L, obs.obs_[i].L + NFREQ+NEXOBS, obs_[i].L); + std::copy(obs.obs_[i].P, obs.obs_[i].P + NFREQ+NEXOBS, obs_[i].P); + std::copy(obs.obs_[i].D, obs.obs_[i].D + NFREQ+NEXOBS, obs_[i].D); + } +} + Observations::~Observations() { } @@ -28,19 +53,20 @@ void Observations::addObservation(const obsd_t & obs) // copy obsd_t object obsd_t copy_obs; - std::copy(obs.D, obs.D + 3, copy_obs.D); - std::copy(obs.L, obs.L + 3, copy_obs.L); - std::copy(obs.LLI, obs.LLI + 3, copy_obs.LLI); - std::copy(obs.P, obs.P + 3, copy_obs.P); - std::copy(obs.SNR, obs.SNR + 3, copy_obs.SNR); - std::copy(obs.code, obs.code + 3, copy_obs.code); - std::copy(obs.qualL, obs.qualL + 3, copy_obs.qualL); - copy_obs.eventime = obs.eventime; + copy_obs.time = obs.time; + copy_obs.eventime = obs.eventime; + copy_obs.timevalid = obs.timevalid; + copy_obs.sat = obs.sat; + copy_obs.rcv = obs.rcv; + std::copy(obs.SNR, obs.SNR + NFREQ+NEXOBS, copy_obs.SNR); + std::copy(obs.LLI, obs.LLI + NFREQ+NEXOBS, copy_obs.LLI); + std::copy(obs.code, obs.code + NFREQ+NEXOBS, copy_obs.code); + std::copy(obs.qualL, obs.qualL + NFREQ+NEXOBS, copy_obs.qualL); + std::copy(obs.qualP, obs.qualP + NFREQ+NEXOBS, copy_obs.qualP); copy_obs.freq = obs.freq; - copy_obs.rcv = obs.rcv; - copy_obs.sat = obs.sat; - copy_obs.time = obs.time; - copy_obs.timevalid = obs.timevalid; + std::copy(obs.L, obs.L + NFREQ+NEXOBS, copy_obs.L); + std::copy(obs.P, obs.P + NFREQ+NEXOBS, copy_obs.P); + std::copy(obs.D, obs.D + NFREQ+NEXOBS, copy_obs.D); assert(!hasSatellite(copy_obs.sat) && "adding an observation of a satellite already stored!"); this->obs_.push_back(copy_obs);