Celestia

Форк
0
/
trajmanager.cpp 
51 строка · 1.4 Кб
1
// trajmanager.cpp
2
//
3
// Copyright (C) 2001-2008 Chris Laurel <claurel@gmail.com>
4
//
5
// This program is free software; you can redistribute it and/or
6
// modify it under the terms of the GNU General Public License
7
// as published by the Free Software Foundation; either version 2
8
// of the License, or (at your option) any later version.
9

10
#include "trajmanager.h"
11

12
#include <utility>
13

14
#include <celephem/samporbit.h>
15

16
namespace celestia::engine
17
{
18

19
std::shared_ptr<const ephem::Orbit>
20
TrajectoryManager::find(const fs::path& source,
21
                        const fs::path& path,
22
                        ephem::TrajectoryInterpolation interpolation,
23
                        ephem::TrajectoryPrecision precision)
24
{
25
    auto filename = path.empty()
26
        ? "data" / source
27
        : path / "data" / source;
28

29
    auto it = orbits.try_emplace(Key { std::move(filename), interpolation, precision }).first;
30
    if (auto cachedOrbit = it->second.lock(); cachedOrbit != nullptr)
31
        return cachedOrbit;
32

33
    auto orbit = ephem::LoadSampledTrajectory(it->first.path, interpolation, precision);
34
    if (orbit == nullptr)
35
    {
36
        orbits.erase(it);
37
        return nullptr;
38
    }
39

40
    it->second = orbit;
41
    return orbit;
42
}
43

44
TrajectoryManager*
45
GetTrajectoryManager()
46
{
47
    static TrajectoryManager* const manager = std::make_unique<TrajectoryManager>().release(); //NOSONAR
48
    return manager;
49
}
50

51
} // end namespace celestia::engine
52

Использование cookies

Мы используем файлы cookie в соответствии с Политикой конфиденциальности и Политикой использования cookies.

Нажимая кнопку «Принимаю», Вы даете АО «СберТех» согласие на обработку Ваших персональных данных в целях совершенствования нашего веб-сайта и Сервиса GitVerse, а также повышения удобства их использования.

Запретить использование cookies Вы можете самостоятельно в настройках Вашего браузера.