Starting work on a buffer type.
This commit is contained in:
		
							parent
							
								
									72e3bf77a7
								
							
						
					
					
						commit
						d1f84be120
					
				|  | @ -0,0 +1,92 @@ | |||
| //
 | ||||
| // Created by kyle on 2023-10-09.
 | ||||
| //
 | ||||
| 
 | ||||
| #include <cstring> | ||||
| #include "Buffer.h" | ||||
| 
 | ||||
| namespace kge { | ||||
| uint8_t * | ||||
| Buffer::Contents() | ||||
| { | ||||
| 	return this->contents; | ||||
| } | ||||
| 
 | ||||
| bool | ||||
| Buffer::Append(uint8_t *data, size_t datalen) | ||||
| { | ||||
| 	return false; | ||||
| } | ||||
| 
 | ||||
| bool | ||||
| Buffer::Append(uint8_t c) | ||||
| { | ||||
| 	return false; | ||||
| } | ||||
| 
 | ||||
| bool | ||||
| Buffer::Insert(size_t index, uint8_t *data, size_t datalen) | ||||
| { | ||||
| 	return false; | ||||
| } | ||||
| 
 | ||||
| bool | ||||
| Buffer::Insert(size_t index, uint8_t c) | ||||
| { | ||||
| 	return false; | ||||
| } | ||||
| 
 | ||||
| size_t | ||||
| Buffer::Size() | ||||
| { | ||||
| 	return this->length; | ||||
| } | ||||
| 
 | ||||
| void | ||||
| Buffer::Resize(size_t newCapacity) | ||||
| { | ||||
| 	if (newCapacity < this->length) { | ||||
| 		return; | ||||
| 	} | ||||
| 
 | ||||
| 	uint8_t *newContents = new uint8_t[newCapacity]; | ||||
| 
 | ||||
| 	memcpy(newContents, this->contents, this->length); | ||||
| 	delete this->contents; | ||||
| 	this->contents = newContents; | ||||
| 	this->capacity = newCapacity; | ||||
| } | ||||
| 
 | ||||
| size_t | ||||
| Buffer::Trim() | ||||
| { | ||||
| 	size_t	projectedCapacity = this->capacity * 2; | ||||
| 
 | ||||
| 	if (projectedCapacity < this->capacity) { | ||||
| 		this->Resize(projectedCapacity); | ||||
| 	} | ||||
| } | ||||
| 
 | ||||
| void | ||||
| Buffer::Clear() | ||||
| { | ||||
| 	memset(this->contents, 0, this->length); | ||||
| 	this->length = 0; | ||||
| } | ||||
| 
 | ||||
| void | ||||
| Buffer::Reclaim() | ||||
| { | ||||
| 	delete this->contents; | ||||
| 	this->length = 0; | ||||
| 	this->capacity = 0; | ||||
| } | ||||
| 
 | ||||
| bool | ||||
| Buffer::mustGrow(size_t newLength) | ||||
| { | ||||
| 	return (newLength + this->length) >= this->capacity; | ||||
| } | ||||
| 
 | ||||
| 
 | ||||
| } // kge
 | ||||
|  | @ -0,0 +1,35 @@ | |||
| //
 | ||||
| // Created by kyle on 2023-10-09.
 | ||||
| //
 | ||||
| 
 | ||||
| #ifndef KGE_BUFFER_H | ||||
| #define KGE_BUFFER_H | ||||
| 
 | ||||
| #include <cstdint> | ||||
| 
 | ||||
| 
 | ||||
| namespace kge { | ||||
| 
 | ||||
| class Buffer { | ||||
| public: | ||||
| 	uint8_t	*Contents(); | ||||
| 	bool	 Append(uint8_t *data, size_t datalen); | ||||
| 	bool	 Append(uint8_t c); | ||||
| 	bool	 Insert(size_t index, uint8_t *data, size_t datalen); | ||||
| 	bool	 Insert(size_t index, uint8_t c); | ||||
| 	size_t	 Size(); | ||||
| 	void	 Resize(size_t newCapacity); | ||||
| 	size_t	 Trim(); | ||||
| 	void	 Clear(); | ||||
| 	void	 Reclaim(); | ||||
| private: | ||||
| 	bool	 mustGrow(size_t newLength); | ||||
| 
 | ||||
| 	uint8_t	*contents; | ||||
| 	size_t	 length; | ||||
| 	size_t	 capacity; | ||||
| }; | ||||
| 
 | ||||
| } // kge
 | ||||
| 
 | ||||
| #endif //KGE_BUFFER_H
 | ||||
|  | @ -6,10 +6,25 @@ set(CMAKE_CXX_STANDARD_REQUIRED ON) | |||
| 
 | ||||
| find_package(SDL2 REQUIRED) | ||||
| find_package(OpenGL REQUIRED) | ||||
| find_package(Freetype REQUIRED) | ||||
| find_package(Freetype) | ||||
| if (DEFINED FREETYPE_INCLUDE_DIRS) | ||||
| 	add_definitions(-DIMGUI_ENABLE_FREETYPE) | ||||
| 	set(FREETYPE_SOURCES | ||||
| 		ext/imgui/misc/freetype/imgui_freetype.cpp | ||||
| 		ext/imgui/misc/freetype/imgui_freetype.h) | ||||
| endif() | ||||
| 
 | ||||
| if(MSVC) | ||||
| 	add_compile_options("/W4" "$<$<CONFIG:RELEASE>:/O2>") | ||||
| else() | ||||
| 	add_compile_options("-Wall" "-Wextra" "-Werror" "$<$<CONFIG:RELEASE>:-O3>") | ||||
| 	if("${CMAKE_CXX_COMPILER_ID}" STREQUAL "Clang") | ||||
| 		add_compile_options("-stdlib=libc++") | ||||
| 	else() | ||||
| 		# nothing special for gcc at the moment | ||||
| 	endif() | ||||
| endif() | ||||
| 
 | ||||
| add_compile_options("-Wall" "-Wextra" "-Werror") | ||||
| add_definitions(-DIMGUI_ENABLE_FREETYPE) | ||||
| 
 | ||||
| add_library(imgui STATIC | ||||
|         # Main Imgui files | ||||
|  | @ -25,25 +40,26 @@ add_library(imgui STATIC | |||
|         ext/imgui/backends/imgui_impl_opengl3.cpp | ||||
|         ext/imgui/backends/imgui_impl_opengl3.h | ||||
| 
 | ||||
|         ext/imgui/misc/freetype/imgui_freetype.cpp | ||||
|         ext/imgui/misc/freetype/imgui_freetype.h) | ||||
| 	$<IF:$<TARGET_EXISTS:Freetype::Freetype>,${FREETYPE_SOURCES},>) | ||||
| add_library(imgui::imgui ALIAS imgui) | ||||
| target_link_libraries(imgui | ||||
|         PUBLIC | ||||
|         OpenGL::GL | ||||
| 	$<IF:$<TARGET_EXISTS:Freetype::Freetype>,Freetype::Freetype,> | ||||
|         $<TARGET_NAME_IF_EXISTS:SDL2::SDL2main> | ||||
|         $<IF:$<TARGET_EXISTS:SDL2::SDL2>,SDL2::SDL2,SDL2::SDL2-static> | ||||
|         Freetype::Freetype) | ||||
|         $<IF:$<TARGET_EXISTS:SDL2::SDL2>,SDL2::SDL2,SDL2::SDL2-static>) | ||||
| target_include_directories(imgui PUBLIC | ||||
|         ext/imgui/ | ||||
|         ext/imgui/backends/ | ||||
|         ext/imgui/misc/freetype | ||||
|         ${FREETYPE_INCLUDE_DIRS}) | ||||
| 	$<IF:$<TARGET_EXISTS:Freetype::Freetype>,${FREETYPE_INCLUDE_DIRS},>) | ||||
| 
 | ||||
| include_directories(ext/ ${SDL2_INCLUDE_DIRS}) | ||||
| 
 | ||||
| add_executable(kge | ||||
|         kge.cc | ||||
| 		) | ||||
| 	Buffer.cc | ||||
| 	Buffer.h | ||||
| ) | ||||
| target_link_libraries(kge imgui) | ||||
| 
 | ||||
|  |  | |||
							
								
								
									
										6
									
								
								kge.cc
								
								
								
								
							
							
						
						
									
										6
									
								
								kge.cc
								
								
								
								
							|  | @ -21,8 +21,12 @@ static const float fontPixelSizes[] = {16, 10, 12, 14, 18}; | |||
| 
 | ||||
| 
 | ||||
| int | ||||
| main() | ||||
| main(int argc, char *argv[]) | ||||
| { | ||||
| 	// SDL2 requires main have these parameters, but they're not being used
 | ||||
| 	// yet.
 | ||||
| 	(void)argc; | ||||
| 	(void)argv; | ||||
| 	// Should this use the SDL_EVENTS subsystem?
 | ||||
| 	if (SDL_Init(SDL_INIT_VIDEO | SDL_INIT_TIMER) != 0) { | ||||
| 		std::cerr << "kge: failed to initialize SDL" << std::endl; | ||||
|  |  | |||
		Loading…
	
		Reference in New Issue