36 lines
1.1 KiB
C++
36 lines
1.1 KiB
C++
#pragma once
|
|
|
|
#include <expected>
|
|
#include <functional>
|
|
#include <memory>
|
|
#include <string>
|
|
#include <vector>
|
|
|
|
#include <luma.hpp>
|
|
|
|
#include <vamp_zero/types.hpp>
|
|
|
|
|
|
namespace vamp_zero {
|
|
|
|
class score_page_cache {
|
|
public:
|
|
explicit score_page_cache(std::function<std::expected<std::shared_ptr<luma::texture>, modulus::error>(std::string const &)> loader);
|
|
auto get(std::string path) -> std::expected<std::shared_ptr<luma::texture>, modulus::error>;
|
|
auto clear() -> void;
|
|
auto size() const -> std::size_t;
|
|
private:
|
|
struct entry {
|
|
std::string path{};
|
|
std::shared_ptr<luma::texture> texture{};
|
|
};
|
|
std::function<std::expected<std::shared_ptr<luma::texture>, modulus::error>(std::string const &)> loader_{};
|
|
std::vector<entry> entries_{};
|
|
};
|
|
|
|
auto score_page_count(vamp_zero::score_document const &score) -> std::size_t;
|
|
auto validated_page_path(vamp_zero::score_document const &score, std::size_t index) -> std::expected<std::string, modulus::error>;
|
|
auto validate_score_page(vamp_zero::score_document const &score, std::size_t index) -> std::expected<void, modulus::error>;
|
|
|
|
}
|