summaryrefslogtreecommitdiff
path: root/lib/nes/common/path-builder.hh
blob: 727d18cbc6db0ffe7a3001e406df784cfbebf6e4 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
#pragma once

#include "nes/common/types.hh"
#include "nes/common/path-view.hh"
#include <string_view>

namespace nes
{
	/// A mutable path with a fixed-length buffer.
	class path_builder
	{
		char* buffer_{ nullptr };
		u32 buffer_length_{ 0 };
		u32 actual_length_{ 0 };

	public:
		explicit path_builder(char* buffer, u32 buffer_length);

		auto get_components() const -> path_view { return path_view{ get_path() }; }
		auto get_path() const -> std::string_view { return std::string_view{ buffer_, actual_length_ }; }

		auto push(std::string_view) -> bool;
		auto pop() -> bool;
	};

	/// A path builder with a buffer embedded into it.
	template<u32 Capacity>
	class path_buffer : public path_builder
	{
		char buffer_[Capacity];

	public:
		explicit path_buffer()
			: path_builder{ buffer_, Capacity }
		{
		}
	};
} // namespace nes