packaging work
This commit is contained in:
		
							parent
							
								
									eaebece93b
								
							
						
					
					
						commit
						0d0d63ede4
					
				|  | @ -1,4 +1,17 @@ | |||
| __pycache__ | ||||
| .idea | ||||
| .trunk | ||||
| .vc | ||||
| .vscode | ||||
| 
 | ||||
| *.a | ||||
| *.o | ||||
| *.bin | ||||
| *.pc | ||||
| build | ||||
| core | ||||
| core.* | ||||
| cmake-build-* | ||||
| 
 | ||||
| bufferTest | ||||
| dictionaryTest | ||||
| tlvTest | ||||
|  |  | |||
							
								
								
									
										180
									
								
								Buffer.cc
								
								
								
								
							
							
						
						
									
										180
									
								
								Buffer.cc
								
								
								
								
							|  | @ -1,180 +0,0 @@ | |||
| //
 | ||||
| // Created by kyle on 2023-10-09.
 | ||||
| //
 | ||||
| 
 | ||||
| #include <cassert> | ||||
| #include <cstring> | ||||
| #include "Buffer.h" | ||||
| 
 | ||||
| namespace kge { | ||||
| 
 | ||||
| 
 | ||||
| constexpr size_t	defaultCapacity = 32; | ||||
| constexpr size_t	maxReasonableLine = 8192; | ||||
| 
 | ||||
| 
 | ||||
| static size_t | ||||
| nearestPower(size_t x) | ||||
| { | ||||
| 	if (x == 0) { | ||||
| 		return 0; | ||||
| 	} | ||||
| 
 | ||||
| 	x--; | ||||
| 
 | ||||
| 	x |= x >> 1; | ||||
| 	x |= x >> 2; | ||||
| 	x |= x >> 4; | ||||
| 	x |= x >> 8; | ||||
| 	x |= x >> 16; | ||||
| 	x |= x >> 32; | ||||
| 
 | ||||
| 	return x; | ||||
| } | ||||
| 
 | ||||
| 
 | ||||
| Buffer::Buffer() | ||||
|     : contents(nullptr), length(0), capacity(0) | ||||
| { | ||||
| 	this->Resize(defaultCapacity);			 | ||||
| } | ||||
| 
 | ||||
| 
 | ||||
| Buffer::Buffer(size_t initialCapacity) | ||||
|     : contents(nullptr), length(0), capacity(0) | ||||
| { | ||||
| 	this->Resize(initialCapacity);			 | ||||
| } | ||||
| 
 | ||||
| 
 | ||||
| Buffer::Buffer(const char *data) | ||||
|     : contents(nullptr), length(0), capacity(0) | ||||
| { | ||||
| 	size_t	datalen = strnlen(data, maxReasonableLine); | ||||
| 
 | ||||
| 	this->Append((uint8_t *)data, datalen); | ||||
| } | ||||
| 
 | ||||
| 
 | ||||
| bool | ||||
| Buffer::Append(uint8_t *data, size_t datalen) | ||||
| { | ||||
| 	auto	resized = false; | ||||
| 	auto	newCap = this->mustGrow(datalen); | ||||
| 
 | ||||
| 	if (newCap > 0) { | ||||
| 		this->Resize(newCap); | ||||
| 		resized = true; | ||||
| 	} | ||||
| 
 | ||||
| 	memcpy(this->contents + this->length, data, datalen); | ||||
| 	this->length += datalen; | ||||
| 	return resized; | ||||
| } | ||||
| 
 | ||||
| bool | ||||
| Buffer::Append(uint8_t c) | ||||
| { | ||||
| 	return this->Append(&c, 1); | ||||
| } | ||||
| 
 | ||||
| bool | ||||
| Buffer::Insert(size_t index, uint8_t *data, size_t datalen) | ||||
| { | ||||
| 	auto	resized = this->shift(index, datalen); | ||||
| 
 | ||||
| 	memcpy(this->contents + index, data, datalen); | ||||
| 	return resized; | ||||
| } | ||||
| 
 | ||||
| bool | ||||
| Buffer::Insert(size_t index, uint8_t c) | ||||
| { | ||||
| 	return this->Insert(index, &c, 1); | ||||
| } | ||||
| 
 | ||||
| 
 | ||||
| void | ||||
| Buffer::Resize(size_t newCapacity) | ||||
| { | ||||
| 	if (newCapacity < this->length) { | ||||
| 		return; | ||||
| 	} | ||||
| 
 | ||||
| 	uint8_t *newContents = new uint8_t[newCapacity]; | ||||
| 
 | ||||
| 	if (this->length > 0) { | ||||
| 		memcpy(newContents, this->contents, this->length); | ||||
| 	} | ||||
| 
 | ||||
| 	if (this->contents != nullptr) { | ||||
| 		delete this->contents; | ||||
| 	} | ||||
| 
 | ||||
| 	this->contents = newContents; | ||||
| 	this->capacity = newCapacity; | ||||
| } | ||||
| 
 | ||||
| size_t | ||||
| Buffer::Trim() | ||||
| { | ||||
| 	size_t	projectedCapacity = nearestPower(this->length); | ||||
| 
 | ||||
| 	assert(projectedCapacity >= length); | ||||
| 
 | ||||
| 	if (projectedCapacity < this->capacity) { | ||||
| 		this->Resize(projectedCapacity); | ||||
| 		return this->Capacity(); | ||||
| 	} | ||||
| 
 | ||||
| 	return 0; | ||||
| } | ||||
| 
 | ||||
| void | ||||
| Buffer::Clear() | ||||
| { | ||||
| 	memset(this->contents, 0, this->length); | ||||
| 	this->length = 0; | ||||
| } | ||||
| 
 | ||||
| void | ||||
| Buffer::Reclaim() | ||||
| { | ||||
| 	delete this->contents; | ||||
| 	this->length = 0; | ||||
| 	this->capacity = 0; | ||||
| } | ||||
| 
 | ||||
| size_t | ||||
| Buffer::mustGrow(size_t delta) | ||||
| { | ||||
| 	if ((delta + this->length) < this->capacity) { | ||||
| 		return 0; | ||||
| 	} | ||||
| 
 | ||||
| 	auto newCapacity = delta + this->length; | ||||
| 	return nearestPower(newCapacity); | ||||
| } | ||||
| 
 | ||||
| 
 | ||||
| bool | ||||
| Buffer::shift(size_t offset, size_t delta) | ||||
| { | ||||
| 	auto	resized = false; | ||||
| 	auto	newCap = this->mustGrow(delta); | ||||
| 
 | ||||
| 	if (newCap > 0) { | ||||
| 		this->Resize(newCap); | ||||
| 		resized = true; | ||||
| 	} | ||||
| 
 | ||||
| 	 | ||||
| 	for (size_t i = this->length; i >= offset; i++) { | ||||
| 		this->contents[i+delta] = this->contents[i]; | ||||
| 	} | ||||
| 
 | ||||
| 	return resized; | ||||
| } | ||||
| 
 | ||||
| 
 | ||||
| } // kge
 | ||||
							
								
								
									
										48
									
								
								Buffer.h
								
								
								
								
							
							
						
						
									
										48
									
								
								Buffer.h
								
								
								
								
							|  | @ -1,48 +0,0 @@ | |||
| //
 | ||||
| // Created by kyle on 2023-10-09.
 | ||||
| //
 | ||||
| 
 | ||||
| #ifndef KGE_BUFFER_H | ||||
| #define KGE_BUFFER_H | ||||
| 
 | ||||
| #include <cstdint> | ||||
| 
 | ||||
| 
 | ||||
| namespace kge { | ||||
| 
 | ||||
| 
 | ||||
| class Buffer { | ||||
| public: | ||||
| 	Buffer(); | ||||
| 	Buffer(size_t); | ||||
| 	Buffer(const char *); | ||||
| 
 | ||||
| 	uint8_t	*Contents() { return this->contents; } | ||||
| 	size_t	 Size() { return this->length; }; | ||||
| 	size_t	 Capacity() { return this->capacity; } | ||||
| 
 | ||||
| 	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); | ||||
| 
 | ||||
| 	// bool	 Remove(size_t index, size_t length);
 | ||||
| 
 | ||||
| 	/* memory management */ | ||||
| 	void	 Resize(size_t newCapacity); | ||||
| 	size_t	 Trim(); | ||||
| 	void	 Clear(); | ||||
| 	void	 Reclaim(); | ||||
| 
 | ||||
| private: | ||||
| 	size_t	 mustGrow(size_t delta); | ||||
| 	bool	 shift(size_t offset, size_t delta); | ||||
| 
 | ||||
| 	uint8_t	*contents; | ||||
| 	size_t	 length; | ||||
| 	size_t	 capacity; | ||||
| }; | ||||
| 
 | ||||
| } // kge
 | ||||
| 
 | ||||
| #endif //KGE_BUFFER_H
 | ||||
|  | @ -1,16 +0,0 @@ | |||
| #include <iostream> | ||||
| 
 | ||||
| #include "Buffer.h" | ||||
| 
 | ||||
| 
 | ||||
| int | ||||
| main() | ||||
| { | ||||
| 	kge::Buffer	buffer("hlo, world"); | ||||
| 
 | ||||
| 	std::cout << buffer.Contents() << std::endl; | ||||
| 
 | ||||
| 	buffer.Insert(1, (uint8_t *)"el", 2); | ||||
| 
 | ||||
| 	std::cout << buffer.Contents() << std::endl; | ||||
| } | ||||
|  | @ -3,6 +3,7 @@ cmake_minimum_required(VERSION 3.22) | |||
| project(kge LANGUAGES CXX VERSION 0.0.1) | ||||
| set(CMAKE_CXX_STANDARD 17) | ||||
| set(CMAKE_CXX_STANDARD_REQUIRED ON) | ||||
| string(TIMESTAMP TODAY "%Y%m%d") | ||||
| 
 | ||||
| include(FetchContent) | ||||
| FetchContent_Declare( | ||||
|  | @ -70,9 +71,30 @@ add_executable(kge | |||
|         kge.cc | ||||
| ) | ||||
| target_link_libraries(kge imgui ${KLIB_LIBRARIES}) | ||||
| install(TARGETS kge RUNTIME DESTINATION bin COMPONENT dist) | ||||
| 
 | ||||
| add_custom_target(manpages) | ||||
| configure_file(kge.md kge.1.scdoc @ONLY) | ||||
| add_custom_command(TARGET manpages COMMAND scdoc < kge.1.scdoc > kge.1 | ||||
| 	OUTPUTS ${CMAKE_CURRENT_BINARY_DIR}/kge.1) | ||||
| add_dependencies(kge manpages) | ||||
| 
 | ||||
| install(TARGETS kge | ||||
| 		DESTINATION bin | ||||
| 		COMPONENT dist) | ||||
| install(FILES ${CMAKE_CURRENT_BINARY_DIR}/kge.desktop | ||||
| 		DESTINATION share/applications | ||||
| 		COMPONENT dist) | ||||
| install(FILES kge.png | ||||
| 		DESTINATION share/${PROJECT_NAME} | ||||
| 		COMPONENT dist) | ||||
| install(FILES ${CMAKE_CURRENT_BINARY_DIR}/kge.1 | ||||
| 		DESTINATION share/man/man1 | ||||
| 		COMPONENT dist) | ||||
| 
 | ||||
| include(CMakePack.txt) | ||||
| 
 | ||||
| 	get_cmake_property(_variableNames VARIABLES) | ||||
| 	list (SORT _variableNames) | ||||
| 	foreach (_variableName ${_variableNames}) | ||||
| 		message(STATUS "${_variableName}=${${_variableName}}") | ||||
| 	endforeach() | ||||
|  | @ -18,11 +18,12 @@ set(CPACK_DEBIAN_PACKAGE_DEPENDS | |||
| set(CPACK_DEBIAN_PACKAGE_SECTION universe/editors) | ||||
| set(CPACK_DEB_COMPONENT_INSTALL ON) | ||||
| set(CPACK_COMPONENTS_ALL dist) | ||||
| set(CPACK_COMPONENTS_GROUPING ONE_PER_GROUP) | ||||
| 
 | ||||
| if(LINUX) | ||||
|     set(CPACK_GENERATOR "DEB;STGZ;TGZ") | ||||
| elseif(APPLE) | ||||
|     set(CPACK_GENERATOR "productbuild") | ||||
|     set(CPACK_GENERATOR "productbuild;TGZ") | ||||
| elseif(MSVC OR MSYS OR MINGW) | ||||
|     set(CPACK_GENERATOR "NSIS;ZIP") | ||||
| else() | ||||
|  | @ -32,6 +33,7 @@ endif() | |||
| set(CPACK_SOURCE_GENERATOR "TGZ;ZIP") | ||||
| set(CPACK_SOURCE_IGNORE_FILES | ||||
|         /.git | ||||
|         /.idea | ||||
|         /dist | ||||
|         /.*build.*) | ||||
| 
 | ||||
|  |  | |||
|  | @ -4,6 +4,6 @@ Version=@PROJECT_VERSION@ | |||
| Name=@PROJECT_NAME@ | ||||
| Comment=@PROJECT_DESCRIPTION@ | ||||
| Exec=kge | ||||
| Icon= | ||||
| Icon=@prefix@/share/@PROJECT_NAME@/@PROJECT_NAME@.png | ||||
| Terminal=false | ||||
| Categories=Editors | ||||
|  | @ -0,0 +1,14 @@ | |||
| kge(1) ["@TODAY@" ["Shimmering Clarity Industries"]] | ||||
| 
 | ||||
| # NAME | ||||
| 
 | ||||
| kge - kyle's graphical editor | ||||
| 
 | ||||
| # SYNOPSIS | ||||
| 
 | ||||
| kge files... | ||||
| 
 | ||||
| # AUTHORS | ||||
| 
 | ||||
| Written by Kyle Isom <kyle@imap.cc>. Up-to-date sources can be found | ||||
| at https://git.wntrmute.dev/kyle/kge. | ||||
		Loading…
	
		Reference in New Issue