feat(hashtable): add a hashtable implementation #12
@ -23,6 +23,7 @@ endif ()
|
|||||||
add_subdirectory(app)
|
add_subdirectory(app)
|
||||||
add_subdirectory(library/list)
|
add_subdirectory(library/list)
|
||||||
add_subdirectory(library/log)
|
add_subdirectory(library/log)
|
||||||
|
add_subdirectory(library/str)
|
||||||
|
|
||||||
if ((CMAKE_PROJECT_NAME STREQUAL PROJECT_NAME OR MODERN_CMAKE_BUILD_TESTING)
|
if ((CMAKE_PROJECT_NAME STREQUAL PROJECT_NAME OR MODERN_CMAKE_BUILD_TESTING)
|
||||||
AND BUILD_TESTING)
|
AND BUILD_TESTING)
|
||||||
|
|||||||
20
library/str/CMakeLists.txt
Normal file
20
library/str/CMakeLists.txt
Normal file
@ -0,0 +1,20 @@
|
|||||||
|
cmake_minimum_required(VERSION 3.21 FATAL_ERROR)
|
||||||
|
|
||||||
|
include("project-meta-info.in")
|
||||||
|
|
||||||
|
project(waitui-str
|
||||||
|
VERSION ${project_version}
|
||||||
|
DESCRIPTION ${project_description}
|
||||||
|
HOMEPAGE_URL ${project_homepage}
|
||||||
|
LANGUAGES C)
|
||||||
|
|
||||||
|
add_library(str OBJECT)
|
||||||
|
|
||||||
|
target_sources(str
|
||||||
|
PRIVATE
|
||||||
|
"src/str.c"
|
||||||
|
PUBLIC
|
||||||
|
"include/waitui/str.h"
|
||||||
|
)
|
||||||
|
|
||||||
|
target_include_directories(str PUBLIC "include")
|
||||||
91
library/str/include/waitui/str.h
Normal file
91
library/str/include/waitui/str.h
Normal file
@ -0,0 +1,91 @@
|
|||||||
|
/**
|
||||||
|
* @file str.h
|
||||||
|
* @author rick
|
||||||
|
* @date 19.02.20
|
||||||
|
* @brief File for the String implementation
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef WAITUI_STR_H
|
||||||
|
#define WAITUI_STR_H
|
||||||
|
|
||||||
|
#include <stdlib.h>
|
||||||
|
#include <string.h>
|
||||||
|
|
||||||
|
|
||||||
|
// -----------------------------------------------------------------------------
|
||||||
|
// Public types
|
||||||
|
// -----------------------------------------------------------------------------
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Type for strings that do not need to be '\0' terminated
|
||||||
|
*/
|
||||||
|
typedef struct str {
|
||||||
|
char *s;
|
||||||
|
unsigned long int len;
|
||||||
|
} str;
|
||||||
|
|
||||||
|
|
||||||
|
// -----------------------------------------------------------------------------
|
||||||
|
// Public defines
|
||||||
|
// -----------------------------------------------------------------------------
|
||||||
|
|
||||||
|
#define STR_NULL_INIT \
|
||||||
|
{ NULL, 0 }
|
||||||
|
|
||||||
|
#define STR_STATIC_INIT(_str_) \
|
||||||
|
{ (_str_), sizeof((_str_)) - 1 }
|
||||||
|
|
||||||
|
#define STR_FMT(_pstr_) \
|
||||||
|
(((_pstr_) != (str *) 0) ? (int) (_pstr_)->len : 0), \
|
||||||
|
(((_pstr_) != (str *) 0) ? (_pstr_)->s : "")
|
||||||
|
|
||||||
|
#define STR_STATIC_SET(_pstr_, _str_) \
|
||||||
|
do { \
|
||||||
|
if ((_pstr_)) { \
|
||||||
|
(_pstr_)->s = (_str_); \
|
||||||
|
(_pstr_)->len = sizeof((_str_)) - 1; \
|
||||||
|
} \
|
||||||
|
} while (0)
|
||||||
|
|
||||||
|
#define STR_STATIC_COPY(_dstr_, _str_) \
|
||||||
|
do { \
|
||||||
|
if ((_dstr_)) { \
|
||||||
|
char *tmp = (_str_); \
|
||||||
|
(_dstr_)->len = sizeof((_str_)) - 1; \
|
||||||
|
(_dstr_)->s = calloc((_dstr_)->len, sizeof(*(_dstr_)->s)); \
|
||||||
|
if ((_dstr_)->s) { memcpy((_dstr_)->s, tmp, (_dstr_)->len); } \
|
||||||
|
} \
|
||||||
|
} while (0)
|
||||||
|
|
||||||
|
#define STR_COPY(_dstr_, _pstr_) \
|
||||||
|
do { \
|
||||||
|
if ((_pstr_) && (_dstr_)) { \
|
||||||
|
(_dstr_)->len = (_pstr_)->len; \
|
||||||
|
(_dstr_)->s = calloc((_pstr_)->len, sizeof(*(_pstr_)->s)); \
|
||||||
|
if ((_dstr_)->s) { \
|
||||||
|
memcpy((_dstr_)->s, (_pstr_)->s, (_dstr_)->len); \
|
||||||
|
} \
|
||||||
|
} \
|
||||||
|
} while (0)
|
||||||
|
|
||||||
|
#define STR_COPY_WITH_NUL(_dstr_, _pstr_) \
|
||||||
|
do { \
|
||||||
|
if ((_pstr_) && (_dstr_)) { \
|
||||||
|
(_dstr_)->len = (_pstr_)->len; \
|
||||||
|
(_dstr_)->s = calloc((_pstr_)->len + 1, sizeof(*(_pstr_)->s)); \
|
||||||
|
if ((_dstr_)->s) { \
|
||||||
|
memcpy((_dstr_)->s, (_pstr_)->s, (_dstr_)->len); \
|
||||||
|
} \
|
||||||
|
} \
|
||||||
|
} while (0)
|
||||||
|
|
||||||
|
#define STR_FREE(_pstr_) \
|
||||||
|
do { \
|
||||||
|
if ((_pstr_)) { \
|
||||||
|
if ((_pstr_)->s) { free((_pstr_)->s); }; \
|
||||||
|
(_pstr_)->len = 0; \
|
||||||
|
(_pstr_)->s = NULL; \
|
||||||
|
} \
|
||||||
|
} while (0)
|
||||||
|
|
||||||
|
#endif//WAITUI_STR_H
|
||||||
3
library/str/project-meta-info.in
Normal file
3
library/str/project-meta-info.in
Normal file
@ -0,0 +1,3 @@
|
|||||||
|
set(project_version 0.0.1)
|
||||||
|
set(project_description "waitui str library")
|
||||||
|
set(project_homepage "http://example.com")
|
||||||
8
library/str/src/str.c
Normal file
8
library/str/src/str.c
Normal file
@ -0,0 +1,8 @@
|
|||||||
|
/**
|
||||||
|
* @file str.c
|
||||||
|
* @author rick
|
||||||
|
* @date 19.02.20
|
||||||
|
* @brief File for the String implementation
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include "waitui/str.h"
|
||||||
Loading…
Reference in New Issue
Block a user