CMAKELISTS: A pullable api now

This commit is contained in:
2026-10-14 10:31:31 -04:00
parent 4ea742946a
commit f3e416fa68
5 changed files with 140 additions and 8 deletions
Vendored
BIN
View File
Binary file not shown.
+14 -6
View File
@@ -1,12 +1,20 @@
cmake_minimum_required(VERSION 3.16) cmake_minimum_required(VERSION 4.4.3)
project(libstr LANGUAGES C)
set(CMAKE_C_STANDARD 23) set(CMAKE_C_STANDARD 23)
set(CMAKE_C_STANDARD_REQUIRED ON) set(CMAKE_C_STANDARD_REQUIRED ON)
set(CMAKE_EXPORT_COMPILE_COMMANDS ON) set(CMAKE_EXPORT_COMPILE_COMMANDS ON)
include_directories(include)
project(libstr LANGUAGES C)
set(SOURCES add_library(libstr STATIC
src/main.c src/string.c
# src/utils.c
# Add other modular string implementation units here as you expand:
) )
add_executable(libstr ${SOURCES}) target_include_directories(libstr
PUBLIC
${CMAKE_CURRENT_SOURCE_DIR}/include
)
add_executable(libstr_bin src/main.c)
set_target_properties(libstr_bin PROPERTIES OUTPUT_NAME "libstr")
target_link_libraries(libstr_bin PRIVATE libstr)
+60
View File
@@ -0,0 +1,60 @@
#ifndef STRING_H
#define STRING_H
#include <stddef.h>
#include <string.h>
/* Functions to implement:
charAt
substring / slice
concat
equals / compareTo
find / indexOf
contains / includes
isEmpty / isBlank
replace
split
trim
toLower / toLowerCase
toUpper / toUpperCase
startsWith
endsWith
replaceAll
join
*/
typedef struct
{
char* data;
size_t len;
} String;
String
strvmk(char* s);
size_t
strvlen(String s);
char*
strvget(String s);
String
strvreverse(String s);
void
strvfree(String s);
#endif
+8 -2
View File
@@ -1,6 +1,12 @@
#include <stdio.h> #include <stdio.h>
#include <string/string.h>
int main() { int
printf("%s", "Hello World"); main()
{
String hello = strvmk("Hello");
hello = strvreverse(hello);
printf("%s\n", strvget(hello));
strvfree(hello);
return 0; return 0;
} }
+58
View File
@@ -0,0 +1,58 @@
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <string/string.h>
struct String
{
char* data;
size_t len;
};
String
strvmk(char* s)
{
size_t len = strlen(s);
String data = { .data = strdup(s), .len = len };
return data;
}
size_t
strvlen(String s)
{
return s.len;
}
char*
strvget(String s)
{
return s.data;
}
String
strvreverse(String s)
{
size_t n = strvlen(s);
char* data = malloc(n + 1);
memset(data, 0, strvlen(s));
int j = 0;
for (int i = n - 1; i >= 0; i--)
{
data[j] = s.data[i];
j++;
}
strvfree(s);
return strvmk(data);
}
void
strvfree(String s)
{
if (s.data)
{
free(s.data);
s.data = NULL;
}
}