From 6ed978051668c08f5a957c97570f364dd580c807 Mon Sep 17 00:00:00 2001 From: Mel Date: Fri, 21 Oct 2022 01:03:18 +0200 Subject: Namespace and Folder refactor --- src/GFX/Image/PPMParser.hpp | 44 ++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 44 insertions(+) create mode 100644 src/GFX/Image/PPMParser.hpp (limited to 'src/GFX/Image/PPMParser.hpp') diff --git a/src/GFX/Image/PPMParser.hpp b/src/GFX/Image/PPMParser.hpp new file mode 100644 index 0000000..3909cee --- /dev/null +++ b/src/GFX/Image/PPMParser.hpp @@ -0,0 +1,44 @@ +#pragma once + +#include +#include +#include "RawImage.hpp" + +namespace MC::GFX::Image { + +class PPMParser { +public: + explicit PPMParser(std::string_view source) : m_source(source) {}; + + RawImage parse(); +private: + enum PPMType { + None, + P3, + P6 + }; + + struct PPMHeader { + PPMType type; + uint32_t width; + uint32_t height; + uint8_t max_color; + }; + + PPMHeader parse_header(); + RawImage::Pixel parse_pixel(uint8_t max_color); + uint64_t parse_sample(); + + uint64_t chomp_number(); + std::string_view chomp_part(); + + void skip_whitespace(); + void skip_comment(); + + bool is_eof(); + + std::string_view m_source; + uint64_t m_cursor = 0; +}; + +} -- cgit 1.4.1