BAN: Modify Span constructors to keep constness correctly
This commit is contained in:
		
							parent
							
								
									cef6999dc7
								
							
						
					
					
						commit
						3572e9794a
					
				|  | @ -20,6 +20,10 @@ namespace BAN | |||
| 	public: | ||||
| 		Span() = default; | ||||
| 		Span(T*, size_type); | ||||
| 		Span(Span<T>&); | ||||
| 		template<typename S> | ||||
| 		requires(is_same_v<T, const S>) | ||||
| 		Span(const Span<S>&); | ||||
| 
 | ||||
| 		iterator begin() { return iterator(m_data); } | ||||
| 		iterator end() { return iterator(m_data + m_size); } | ||||
|  | @ -51,6 +55,22 @@ namespace BAN | |||
| 	{ | ||||
| 	} | ||||
| 
 | ||||
| 	template<typename T> | ||||
| 	Span<T>::Span(Span& other) | ||||
| 		: m_data(other.data()) | ||||
| 		, m_size(other.size()) | ||||
| 	{ | ||||
| 	} | ||||
| 
 | ||||
| 	template<typename T> | ||||
| 	template<typename S> | ||||
| 	requires(is_same_v<T, const S>) | ||||
| 	Span<T>::Span(const Span<S>& other) | ||||
| 		: m_data(other.data()) | ||||
| 		, m_size(other.size()) | ||||
| 	{ | ||||
| 	} | ||||
| 
 | ||||
| 	template<typename T> | ||||
| 	T& Span<T>::operator[](size_type index) | ||||
| 	{ | ||||
|  |  | |||
|  | @ -21,8 +21,8 @@ namespace Kernel | |||
| 		const uint8_t* glyph(uint32_t) const; | ||||
| 
 | ||||
| 	private: | ||||
| 		static BAN::ErrorOr<Font> parse_psf1(const BAN::Span<uint8_t>); | ||||
| 		static BAN::ErrorOr<Font> parse_psf2(const BAN::Span<uint8_t>); | ||||
| 		static BAN::ErrorOr<Font> parse_psf1(BAN::Span<const uint8_t>); | ||||
| 		static BAN::ErrorOr<Font> parse_psf2(BAN::Span<const uint8_t>); | ||||
| 
 | ||||
| 	private: | ||||
| 		BAN::HashMap<uint32_t, uint32_t> m_glyph_offsets; | ||||
|  |  | |||
|  | @ -31,7 +31,7 @@ namespace Kernel | |||
| 	BAN::ErrorOr<Font> Font::prefs() | ||||
| 	{ | ||||
| 		size_t font_data_size = _binary_font_prefs_psf_end - _binary_font_prefs_psf_start; | ||||
| 		BAN::Span<uint8_t> font_data(_binary_font_prefs_psf_start, font_data_size); | ||||
| 		BAN::Span<const uint8_t> font_data(_binary_font_prefs_psf_start, font_data_size); | ||||
| 		return parse_psf1(font_data); | ||||
| 	} | ||||
| 
 | ||||
|  | @ -57,8 +57,7 @@ namespace Kernel | |||
| 		return BAN::Error::from_c_string("Unsupported font format"); | ||||
| 	} | ||||
| 
 | ||||
| 
 | ||||
| 	BAN::ErrorOr<Font> Font::parse_psf1(const BAN::Span<uint8_t> font_data) | ||||
| 	BAN::ErrorOr<Font> Font::parse_psf1(BAN::Span<const uint8_t> font_data) | ||||
| 	{ | ||||
| 		if (font_data.size() < 4) | ||||
| 			return BAN::Error::from_c_string("Font file is too small"); | ||||
|  | @ -139,7 +138,7 @@ namespace Kernel | |||
| 		return result; | ||||
| 	} | ||||
| 
 | ||||
| 	BAN::ErrorOr<Font> Font::parse_psf2(const BAN::Span<uint8_t> font_data) | ||||
| 	BAN::ErrorOr<Font> Font::parse_psf2(BAN::Span<const uint8_t> font_data) | ||||
| 	{ | ||||
| 		struct PSF2Header | ||||
| 		{ | ||||
|  |  | |||
|  | @ -40,7 +40,7 @@ namespace Kernel | |||
| 		BAN::LittleEndian<uint64_t> ending_lba; | ||||
| 		BAN::LittleEndian<uint64_t> attributes; | ||||
| 		BAN::LittleEndian<uint16_t> partition_name[36]; | ||||
| 	} __attribute__((packed)); | ||||
| 	}; | ||||
| 
 | ||||
| 	static uint32_t crc32_table[256] = | ||||
| 	{ | ||||
|  | @ -167,7 +167,6 @@ namespace Kernel | |||
| 		for (uint32_t i = 0; i < header.partition_entry_count; i++) | ||||
| 		{ | ||||
| 			const PartitionEntry& entry = *(const PartitionEntry*)(entry_array.data() + header.partition_entry_size * i); | ||||
| 			ASSERT((uintptr_t)&entry % 2 == 0); | ||||
| 
 | ||||
| 			char utf8_name[36 * 4 + 1]; | ||||
| 			BAN::UTF8::from_codepoints(entry.partition_name, 36, utf8_name); | ||||
|  |  | |||
		Loading…
	
		Reference in New Issue