Compare commits
26
Commits
v2.4.0
..
97de0b3eaa
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
97de0b3eaa | ||
|
|
0742c86f1d | ||
|
|
ecba164dd7 | ||
|
|
44c9e20235 | ||
|
|
1fc93fac24 | ||
|
|
e3856cf584 | ||
|
|
c832d5366e | ||
|
|
c29466b863 | ||
|
|
273dbf4535 | ||
|
|
f0e9da26bd | ||
|
|
1a0a5b5192 | ||
|
|
c0d83b5c3f | ||
|
|
c4134c4017 | ||
|
|
b802aba954 | ||
|
|
f4bffec947 | ||
|
|
99d6404ec4 | ||
|
|
e2b57d4aba | ||
|
|
acbfc9088c | ||
|
|
cd797683d2 | ||
|
|
28f95b1d41 | ||
|
|
cdca775681 | ||
|
|
e4c1068281 | ||
|
|
f679017fa7 | ||
|
|
65d99db738 | ||
|
|
61c1ec99e5 | ||
|
|
dc348f3e71 |
@@ -34,21 +34,6 @@ jobs:
|
|||||||
|
|
||||||
echo "version=$VERSION" >> $GITHUB_OUTPUT
|
echo "version=$VERSION" >> $GITHUB_OUTPUT
|
||||||
|
|
||||||
- name: Extract version changelog
|
|
||||||
if: steps.tag.outputs.version
|
|
||||||
id: changelog
|
|
||||||
run: |
|
|
||||||
VERSION="${{ steps.tag.outputs.version }}"
|
|
||||||
CHANGELOG_FILE=$(python3 scripts/get_changelog.py $VERSION)
|
|
||||||
|
|
||||||
if [[ $? != 0 ]]; then
|
|
||||||
echo "No changelog found for version $VERSION"
|
|
||||||
exit 1
|
|
||||||
fi
|
|
||||||
|
|
||||||
cat "$CHANGELOG_FILE"
|
|
||||||
echo "changelog_file=$CHANGELOG_FILE" >> $GITHUB_OUTPUT
|
|
||||||
|
|
||||||
- name: Build Artifacts
|
- name: Build Artifacts
|
||||||
if: steps.tag.outputs.version
|
if: steps.tag.outputs.version
|
||||||
run: |
|
run: |
|
||||||
@@ -61,17 +46,17 @@ jobs:
|
|||||||
id: create_release
|
id: create_release
|
||||||
run: |
|
run: |
|
||||||
VERSION="${{ steps.tag.outputs.version }}"
|
VERSION="${{ steps.tag.outputs.version }}"
|
||||||
CHANGELOG_FILE="${{ steps.changelog.outputs.changelog_file }}"
|
RESPONSE=$(curl -s -X POST \
|
||||||
RESPONSE=$(jq -n \
|
|
||||||
--arg tag "v$VERSION" \
|
|
||||||
--arg name "wapp-v$VERSION" \
|
|
||||||
--rawfile body "$CHANGELOG_FILE" \
|
|
||||||
'{tag_name: $tag, name: $name, body: $body, draft: false, prerelease: false}' \
|
|
||||||
| curl -s -X POST \
|
|
||||||
-H "Authorization: token ${{ secrets.GITEA_TOKEN }}" \
|
-H "Authorization: token ${{ secrets.GITEA_TOKEN }}" \
|
||||||
-H "Content-Type: application/json" \
|
-H "Content-Type: application/json" \
|
||||||
--data-binary @- \
|
"https://git.thewizardapprentice.com/api/v1/repos/${{ gitea.repository }}/releases" \
|
||||||
"https://git.thewizardapprentice.com/api/v1/repos/${{ gitea.repository }}/releases")
|
-d '{
|
||||||
|
"tag_name": "v'"$VERSION"'",
|
||||||
|
"name": "wapp-v'"$VERSION"'",
|
||||||
|
"body": "Automated release for wapp-v'"$VERSION"'",
|
||||||
|
"draft": false,
|
||||||
|
"prerelease": false
|
||||||
|
}')
|
||||||
|
|
||||||
echo "$RESPONSE"
|
echo "$RESPONSE"
|
||||||
RELEASE_ID=$(echo $RESPONSE | jq -r '.id')
|
RELEASE_ID=$(echo $RESPONSE | jq -r '.id')
|
||||||
@@ -93,7 +78,4 @@ jobs:
|
|||||||
|
|
||||||
- name: Cleanup
|
- name: Cleanup
|
||||||
if: steps.tag.outputs.version
|
if: steps.tag.outputs.version
|
||||||
run: |
|
run: rm -rf dist/*
|
||||||
CHANGELOG_FILE="${{ steps.changelog.outputs.changelog_file }}"
|
|
||||||
rm -rf dist/*
|
|
||||||
rm -f "$CHANGELOG_FILE"
|
|
||||||
|
|||||||
@@ -1,44 +0,0 @@
|
|||||||
# Changelog
|
|
||||||
|
|
||||||
All notable changes to this project will be documented in this file.
|
|
||||||
|
|
||||||
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
|
|
||||||
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
|
|
||||||
|
|
||||||
## [Unreleased]
|
|
||||||
|
|
||||||
## [2.4.0] - 2026-08-30
|
|
||||||
|
|
||||||
### Added
|
|
||||||
|
|
||||||
- `wpStreamHasCount`, `wpStreamPeekWithOffset` and `wpStreamConsumeCount` utilities
|
|
||||||
|
|
||||||
### Fixed
|
|
||||||
|
|
||||||
- Logic for peeking at stream contents
|
|
||||||
|
|
||||||
## [2.3.0] - 2026-08-29
|
|
||||||
|
|
||||||
### Added
|
|
||||||
|
|
||||||
- Compiler detection macros:
|
|
||||||
- `WP_PLATFORM_CLANG` for the clang compiler
|
|
||||||
- `WP_PLATFORM_CLANGPP` for the clang++ compiler
|
|
||||||
- `WP_PLATFORM_CLANG_MAJOR` Major version number for the clang/clang++ compiler
|
|
||||||
- `WP_PLATFORM_CLANG_MINOR` Minor version number for the clang/clang++ compiler
|
|
||||||
- `WP_PLATFORM_CLANG_PATCH` Patch version number for the clang/clang++ compiler
|
|
||||||
- `WP_PLATFORM_GCC` for the gcc compiler
|
|
||||||
- `WP_PLATFORM_GPP` for the g++ compiler
|
|
||||||
- `WP_PLATFORM_GCC_MAJOR` Major version number for the gcc/g++ compiler
|
|
||||||
- `WP_PLATFORM_GCC_MINOR` Minor version number for the gcc/g++ compiler
|
|
||||||
- `WP_PLATFORM_GCC_PATCH` Patch version number for the gcc/g++ compiler
|
|
||||||
- `WP_PLATFORM_MSVC` for Microsoft's Visual C++ compiler
|
|
||||||
- `WP_PLATFORM_MSVC_FULL_VERSION` Full version string for the MSVC compiler
|
|
||||||
- `WP_PLATFORM_MSVC_VERSION` Version string for the MSVC compiler
|
|
||||||
- Generic `WpStream` struct to wrap a stream of data
|
|
||||||
- `WpVoidPtrStream`, `WpC8Stream`, `WpC16Stream`, `WpC32Stream`, `WpU8Stream`, `WpU16Stream`, `WpU32Stream`, `WpU64Stream`, `WpB8Stream`, `WpI8Stream`, `WpI16Stream`, `WpI32Stream`, `WpI64Stream`, `WpF32Stream`, `WpF64Stream`, `WpF128Stream`, `WpUptrStream`, `WpIptrStream` and `WpStr8Stream` aliases for `WpStream` for readability
|
|
||||||
- Utilities for working with data streams:
|
|
||||||
- `wpStreamAtEnd`
|
|
||||||
- `wpStreamHasNext`
|
|
||||||
- `wpStreamPeek`
|
|
||||||
- `wpStreamConsume`
|
|
||||||
@@ -121,17 +121,13 @@ help:
|
|||||||
@$(ECHO_E) " $(GREEN)make help$(RESET) Print this help message and exit."
|
@$(ECHO_E) " $(GREEN)make help$(RESET) Print this help message and exit."
|
||||||
|
|
||||||
full: LIB_SRC = src/wapp.c
|
full: LIB_SRC = src/wapp.c
|
||||||
full: INCLUDES = common os base log prng testing uuid
|
full: INCLUDES = common os base prng testing uuid
|
||||||
full: install
|
full: install
|
||||||
|
|
||||||
base: LIB_SRC = src/base/wapp_base.c
|
base: LIB_SRC = src/base/wapp_base.c
|
||||||
base: INCLUDES = common base
|
base: INCLUDES = common base
|
||||||
base: install
|
base: install
|
||||||
|
|
||||||
log: LIB_SRC = src/log/wapp_log.c
|
|
||||||
log: INCLUDES = common os base log
|
|
||||||
log: install
|
|
||||||
|
|
||||||
os: LIB_SRC = src/os/wapp_os.c
|
os: LIB_SRC = src/os/wapp_os.c
|
||||||
os: INCLUDES = common os base
|
os: INCLUDES = common os base
|
||||||
os: install
|
os: install
|
||||||
|
|||||||
@@ -1,7 +1,6 @@
|
|||||||
#!/bin/bash
|
#!/bin/bash
|
||||||
|
|
||||||
cp -r src wapp
|
cp -r src wapp
|
||||||
cp CHANGELOG.md wapp
|
|
||||||
|
|
||||||
mkdir -p dist
|
mkdir -p dist
|
||||||
|
|
||||||
|
|||||||
@@ -1,56 +0,0 @@
|
|||||||
import os
|
|
||||||
import re
|
|
||||||
import argparse
|
|
||||||
from pathlib import Path
|
|
||||||
|
|
||||||
VERSION_HEADER = re.compile(r"\[\d+.\d+.\d+\]")
|
|
||||||
SCRIPT_DIR = Path(__file__).absolute().parent.parent
|
|
||||||
|
|
||||||
|
|
||||||
def main():
|
|
||||||
parser = argparse.ArgumentParser()
|
|
||||||
parser.add_argument("version")
|
|
||||||
args = parser.parse_args()
|
|
||||||
|
|
||||||
changelog = get_changelog(args.version)
|
|
||||||
outfilename = save_changelog(args.version, changelog)
|
|
||||||
|
|
||||||
print(outfilename)
|
|
||||||
|
|
||||||
|
|
||||||
def get_changelog(version: str) -> list[str]:
|
|
||||||
changelog = SCRIPT_DIR / "CHANGELOG.md"
|
|
||||||
|
|
||||||
with changelog.open("r") as infile:
|
|
||||||
lines = infile.readlines()
|
|
||||||
|
|
||||||
start = -1
|
|
||||||
end = -1
|
|
||||||
|
|
||||||
for i, line in enumerate(lines):
|
|
||||||
if start == -1:
|
|
||||||
match = re.search(version, line)
|
|
||||||
if match is None:
|
|
||||||
continue
|
|
||||||
start = i
|
|
||||||
else:
|
|
||||||
match = VERSION_HEADER.search(line)
|
|
||||||
if match is not None:
|
|
||||||
end = i
|
|
||||||
break
|
|
||||||
|
|
||||||
if start == -1:
|
|
||||||
exit(1)
|
|
||||||
|
|
||||||
return lines[start:end] if end > -1 else lines[start:]
|
|
||||||
|
|
||||||
|
|
||||||
def save_changelog(version: str, lines: list[str]) -> str:
|
|
||||||
version_changelog = SCRIPT_DIR / f"wapp-changelog-{version}.md"
|
|
||||||
with version_changelog.open("w") as outfile:
|
|
||||||
outfile.writelines(lines)
|
|
||||||
return str(version_changelog)
|
|
||||||
|
|
||||||
|
|
||||||
if __name__ == "__main__":
|
|
||||||
main()
|
|
||||||
+35
-45
@@ -7,14 +7,14 @@
|
|||||||
#include "../../common/aliases/aliases.h"
|
#include "../../common/aliases/aliases.h"
|
||||||
#include <stddef.h>
|
#include <stddef.h>
|
||||||
|
|
||||||
#define _arrayHeader(ARRAY) (WpArrayHeader *)(wpMiscUtilsOffsetPointer(ARRAY, (i64)sizeof(WpArrayHeader) * -1))
|
#define _array_header(ARRAY) (WpArrayHeader *)(wpMiscUtilsOffsetPointer(ARRAY, (i64)sizeof(WpArrayHeader) * -1))
|
||||||
|
|
||||||
wp_persist inline void _arrayValidate(const WpArray array, u64 item_size);
|
wp_persist inline void _array_validate(const WpArray array, u64 item_size);
|
||||||
|
|
||||||
u64 _arrayCount(WpArray array) {
|
u64 _arrayCount(WpArray array) {
|
||||||
wpDebugAssert(array != NULL, "`array` should not be NULL");
|
wpDebugAssert(array != NULL, "`array` should not be NULL");
|
||||||
|
|
||||||
WpArrayHeader *header = _arrayHeader(array);
|
WpArrayHeader *header = _array_header(array);
|
||||||
wpRuntimeAssert(WP_ARRAY_MAGIC == header->magic, "`array` is not a valid wapp array");
|
wpRuntimeAssert(WP_ARRAY_MAGIC == header->magic, "`array` is not a valid wapp array");
|
||||||
|
|
||||||
return header->count;
|
return header->count;
|
||||||
@@ -23,7 +23,7 @@ u64 _arrayCount(WpArray array) {
|
|||||||
u64 _arrayCapacity(WpArray array) {
|
u64 _arrayCapacity(WpArray array) {
|
||||||
wpDebugAssert(array != NULL, "`array` should not be NULL");
|
wpDebugAssert(array != NULL, "`array` should not be NULL");
|
||||||
|
|
||||||
WpArrayHeader *header = _arrayHeader(array);
|
WpArrayHeader *header = _array_header(array);
|
||||||
wpRuntimeAssert(WP_ARRAY_MAGIC == header->magic, "`array` is not a valid wapp array");
|
wpRuntimeAssert(WP_ARRAY_MAGIC == header->magic, "`array` is not a valid wapp array");
|
||||||
|
|
||||||
return header->capacity;
|
return header->capacity;
|
||||||
@@ -32,7 +32,7 @@ u64 _arrayCapacity(WpArray array) {
|
|||||||
u64 _arrayItemSize(WpArray array) {
|
u64 _arrayItemSize(WpArray array) {
|
||||||
wpDebugAssert(array != NULL, "`array` should not be NULL");
|
wpDebugAssert(array != NULL, "`array` should not be NULL");
|
||||||
|
|
||||||
WpArrayHeader *header = _arrayHeader(array);
|
WpArrayHeader *header = _array_header(array);
|
||||||
wpRuntimeAssert(WP_ARRAY_MAGIC == header->magic, "`array` is not a valid wapp array");
|
wpRuntimeAssert(WP_ARRAY_MAGIC == header->magic, "`array` is not a valid wapp array");
|
||||||
|
|
||||||
return header->item_size;
|
return header->item_size;
|
||||||
@@ -41,7 +41,7 @@ u64 _arrayItemSize(WpArray array) {
|
|||||||
void _arraySetCount(WpArray array, u64 count) {
|
void _arraySetCount(WpArray array, u64 count) {
|
||||||
wpDebugAssert(array != NULL, "`array` should not be NULL");
|
wpDebugAssert(array != NULL, "`array` should not be NULL");
|
||||||
|
|
||||||
WpArrayHeader *header = _arrayHeader(array);
|
WpArrayHeader *header = _array_header(array);
|
||||||
wpRuntimeAssert(WP_ARRAY_MAGIC == header->magic, "`array` is not a valid wapp array");
|
wpRuntimeAssert(WP_ARRAY_MAGIC == header->magic, "`array` is not a valid wapp array");
|
||||||
|
|
||||||
header->count = count;
|
header->count = count;
|
||||||
@@ -49,9 +49,9 @@ void _arraySetCount(WpArray array, u64 count) {
|
|||||||
|
|
||||||
void *_arrayGet(WpArray array, u64 index, u64 item_size) {
|
void *_arrayGet(WpArray array, u64 index, u64 item_size) {
|
||||||
wpRuntimeAssert(array != NULL, "`array` should not be NULL");
|
wpRuntimeAssert(array != NULL, "`array` should not be NULL");
|
||||||
_arrayValidate(array, item_size);
|
_array_validate(array, item_size);
|
||||||
|
|
||||||
WpArrayHeader *header = _arrayHeader(array);
|
WpArrayHeader *header = _array_header(array);
|
||||||
wpRuntimeAssert(index < header->count, "`index` is out of bounds");
|
wpRuntimeAssert(index < header->count, "`index` is out of bounds");
|
||||||
|
|
||||||
return wpMiscUtilsOffsetPointer(array, header->item_size * index);
|
return wpMiscUtilsOffsetPointer(array, header->item_size * index);
|
||||||
@@ -60,15 +60,15 @@ void *_arrayGet(WpArray array, u64 index, u64 item_size) {
|
|||||||
void _arraySet(WpArray array, u64 index, void *value, u64 item_size) {
|
void _arraySet(WpArray array, u64 index, void *value, u64 item_size) {
|
||||||
void *item = _arrayGet(array, index, item_size);
|
void *item = _arrayGet(array, index, item_size);
|
||||||
|
|
||||||
WpArrayHeader *header = _arrayHeader(array);
|
WpArrayHeader *header = _array_header(array);
|
||||||
memcpy(item, value, header->item_size);
|
memcpy(item, value, header->item_size);
|
||||||
}
|
}
|
||||||
|
|
||||||
void _arrayAppendCapped(WpArray array, void *value, u64 item_size) {
|
void _arrayAppendCapped(WpArray array, void *value, u64 item_size) {
|
||||||
wpRuntimeAssert(array != NULL, "`array` should not be NULL");
|
wpRuntimeAssert(array != NULL, "`array` should not be NULL");
|
||||||
_arrayValidate(array, item_size);
|
_array_validate(array, item_size);
|
||||||
|
|
||||||
WpArrayHeader *header = _arrayHeader(array);
|
WpArrayHeader *header = _array_header(array);
|
||||||
if (header->count >= header->capacity) { return; }
|
if (header->count >= header->capacity) { return; }
|
||||||
|
|
||||||
u64 index = (header->count)++;
|
u64 index = (header->count)++;
|
||||||
@@ -77,11 +77,11 @@ void _arrayAppendCapped(WpArray array, void *value, u64 item_size) {
|
|||||||
|
|
||||||
void _arrayExtendCappend(WpArray dst, const WpArray src, u64 item_size) {
|
void _arrayExtendCappend(WpArray dst, const WpArray src, u64 item_size) {
|
||||||
wpRuntimeAssert(dst != NULL && src != NULL, "`dst` and `src` should not be NULL");
|
wpRuntimeAssert(dst != NULL && src != NULL, "`dst` and `src` should not be NULL");
|
||||||
_arrayValidate(dst, item_size);
|
_array_validate(dst, item_size);
|
||||||
_arrayValidate(src, item_size);
|
_array_validate(src, item_size);
|
||||||
|
|
||||||
WpArrayHeader *src_header = _arrayHeader(src);
|
WpArrayHeader *src_header = _array_header(src);
|
||||||
WpArrayHeader *dst_header = _arrayHeader(dst);
|
WpArrayHeader *dst_header = _array_header(dst);
|
||||||
u64 remaining_capacity = dst_header->capacity - dst_header->count;
|
u64 remaining_capacity = dst_header->capacity - dst_header->count;
|
||||||
|
|
||||||
u64 copy_count = src_header->count < remaining_capacity ? src_header->count : remaining_capacity;
|
u64 copy_count = src_header->count < remaining_capacity ? src_header->count : remaining_capacity;
|
||||||
@@ -92,13 +92,13 @@ void _arrayExtendCappend(WpArray dst, const WpArray src, u64 item_size) {
|
|||||||
|
|
||||||
void _arrayCopyCapped(WpArray dst, const WpArray src, u64 item_size) {
|
void _arrayCopyCapped(WpArray dst, const WpArray src, u64 item_size) {
|
||||||
wpRuntimeAssert(dst != NULL && src != NULL, "`dst` and `src` should not be NULL");
|
wpRuntimeAssert(dst != NULL && src != NULL, "`dst` and `src` should not be NULL");
|
||||||
_arrayValidate(dst, item_size);
|
_array_validate(dst, item_size);
|
||||||
_arrayValidate(src, item_size);
|
_array_validate(src, item_size);
|
||||||
|
|
||||||
_arrayClear(dst, item_size);
|
_arrayClear(dst, item_size);
|
||||||
|
|
||||||
WpArrayHeader *src_header = _arrayHeader(src);
|
WpArrayHeader *src_header = _array_header(src);
|
||||||
WpArrayHeader *dst_header = _arrayHeader(dst);
|
WpArrayHeader *dst_header = _array_header(dst);
|
||||||
u64 copy_count = src_header->count < dst_header->capacity ? src_header->count : dst_header->capacity;
|
u64 copy_count = src_header->count < dst_header->capacity ? src_header->count : dst_header->capacity;
|
||||||
memcpy((void *)dst, (void *)src, copy_count * src_header->item_size);
|
memcpy((void *)dst, (void *)src, copy_count * src_header->item_size);
|
||||||
dst_header->count = copy_count;
|
dst_header->count = copy_count;
|
||||||
@@ -107,11 +107,11 @@ void _arrayCopyCapped(WpArray dst, const WpArray src, u64 item_size) {
|
|||||||
WpArray _arrayAppendAlloc(const WpAllocator *allocator, WpArray array, void *value,
|
WpArray _arrayAppendAlloc(const WpAllocator *allocator, WpArray array, void *value,
|
||||||
WpArrayInitFlags flags, u64 item_size) {
|
WpArrayInitFlags flags, u64 item_size) {
|
||||||
wpRuntimeAssert(allocator != NULL && array != NULL, "`allocator` and `array` should not be NULL");
|
wpRuntimeAssert(allocator != NULL && array != NULL, "`allocator` and `array` should not be NULL");
|
||||||
_arrayValidate(array, item_size);
|
_array_validate(array, item_size);
|
||||||
|
|
||||||
WpArray output = array;
|
WpArray output = array;
|
||||||
|
|
||||||
WpArrayHeader *header = _arrayHeader(array);
|
WpArrayHeader *header = _array_header(array);
|
||||||
if (header->count >= header->capacity) {
|
if (header->count >= header->capacity) {
|
||||||
u64 new_capacity = wpMiscUtilsU64RoundUpPow2(header->capacity * 2);
|
u64 new_capacity = wpMiscUtilsU64RoundUpPow2(header->capacity * 2);
|
||||||
output = (WpArray )_arrayAllocCapacity(allocator, new_capacity, flags,
|
output = (WpArray )_arrayAllocCapacity(allocator, new_capacity, flags,
|
||||||
@@ -136,13 +136,13 @@ RETURN_ARRAY_APPEND_ALLOC:
|
|||||||
WpArray _arrayExtendAlloc(const WpAllocator *allocator, WpArray dst, const WpArray src,
|
WpArray _arrayExtendAlloc(const WpAllocator *allocator, WpArray dst, const WpArray src,
|
||||||
WpArrayInitFlags flags, u64 item_size) {
|
WpArrayInitFlags flags, u64 item_size) {
|
||||||
wpRuntimeAssert(allocator != NULL && dst != NULL && src != NULL, "`allocator`, `dst` and `src` should not be NULL");
|
wpRuntimeAssert(allocator != NULL && dst != NULL && src != NULL, "`allocator`, `dst` and `src` should not be NULL");
|
||||||
_arrayValidate(dst, item_size);
|
_array_validate(dst, item_size);
|
||||||
_arrayValidate(src, item_size);
|
_array_validate(src, item_size);
|
||||||
|
|
||||||
WpArray output = dst;
|
WpArray output = dst;
|
||||||
|
|
||||||
WpArrayHeader *src_header = _arrayHeader(src);
|
WpArrayHeader *src_header = _array_header(src);
|
||||||
WpArrayHeader *dst_header = _arrayHeader(dst);
|
WpArrayHeader *dst_header = _array_header(dst);
|
||||||
u64 remaining_capacity = dst_header->capacity - dst_header->count;
|
u64 remaining_capacity = dst_header->capacity - dst_header->count;
|
||||||
if (src_header->count >= remaining_capacity) {
|
if (src_header->count >= remaining_capacity) {
|
||||||
u64 new_capacity = wpMiscUtilsU64RoundUpPow2(dst_header->capacity * 2);
|
u64 new_capacity = wpMiscUtilsU64RoundUpPow2(dst_header->capacity * 2);
|
||||||
@@ -168,13 +168,13 @@ RETURN_ARRAY_EXTEND_ALLOC:
|
|||||||
WpArray _arrayCopyAlloc(const WpAllocator *allocator, WpArray dst, const WpArray src,
|
WpArray _arrayCopyAlloc(const WpAllocator *allocator, WpArray dst, const WpArray src,
|
||||||
WpArrayInitFlags flags, u64 item_size) {
|
WpArrayInitFlags flags, u64 item_size) {
|
||||||
wpRuntimeAssert(allocator != NULL && dst != NULL && src != NULL, "`allocator`, `dst` and `src` should not be NULL");
|
wpRuntimeAssert(allocator != NULL && dst != NULL && src != NULL, "`allocator`, `dst` and `src` should not be NULL");
|
||||||
_arrayValidate(dst, item_size);
|
_array_validate(dst, item_size);
|
||||||
_arrayValidate(src, item_size);
|
_array_validate(src, item_size);
|
||||||
|
|
||||||
WpArray output = dst;
|
WpArray output = dst;
|
||||||
|
|
||||||
WpArrayHeader *src_header = _arrayHeader(src);
|
WpArrayHeader *src_header = _array_header(src);
|
||||||
WpArrayHeader *dst_header = _arrayHeader(dst);
|
WpArrayHeader *dst_header = _array_header(dst);
|
||||||
if (src_header->count >= dst_header->capacity) {
|
if (src_header->count >= dst_header->capacity) {
|
||||||
u64 new_capacity = wpMiscUtilsU64RoundUpPow2(dst_header->capacity * 2);
|
u64 new_capacity = wpMiscUtilsU64RoundUpPow2(dst_header->capacity * 2);
|
||||||
output = (WpArray )_arrayAllocCapacity(allocator, new_capacity,
|
output = (WpArray )_arrayAllocCapacity(allocator, new_capacity,
|
||||||
@@ -197,9 +197,9 @@ RETURN_ARRAY_COPY_ALLOC:
|
|||||||
|
|
||||||
void *_arrayPop(WpArray array, u64 item_size) {
|
void *_arrayPop(WpArray array, u64 item_size) {
|
||||||
wpRuntimeAssert(array != NULL, "`array` should not be NULL");
|
wpRuntimeAssert(array != NULL, "`array` should not be NULL");
|
||||||
_arrayValidate(array, item_size);
|
_array_validate(array, item_size);
|
||||||
|
|
||||||
WpArrayHeader *header = _arrayHeader(array);
|
WpArrayHeader *header = _array_header(array);
|
||||||
if (header->count == 0) { return NULL; }
|
if (header->count == 0) { return NULL; }
|
||||||
|
|
||||||
u64 index = header->count - 1;
|
u64 index = header->count - 1;
|
||||||
@@ -210,9 +210,9 @@ void *_arrayPop(WpArray array, u64 item_size) {
|
|||||||
|
|
||||||
void _arrayClear(WpArray array, u64 item_size) {
|
void _arrayClear(WpArray array, u64 item_size) {
|
||||||
wpRuntimeAssert(array != NULL, "`array` should not be NULL");
|
wpRuntimeAssert(array != NULL, "`array` should not be NULL");
|
||||||
_arrayValidate(array, item_size);
|
_array_validate(array, item_size);
|
||||||
|
|
||||||
WpArrayHeader *header = _arrayHeader(array);
|
WpArrayHeader *header = _array_header(array);
|
||||||
header->count = 0;
|
header->count = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -259,18 +259,8 @@ WpArray _arrayFromPreallocatedBuffer(void *buffer, u64 buffer_size, WpArrayInitF
|
|||||||
return output;
|
return output;
|
||||||
}
|
}
|
||||||
|
|
||||||
void _arrayDealloc(const WpAllocator *allocator, WpArray *array, u64 item_size) {
|
wp_persist inline void _array_validate(const WpArray array, u64 item_size) {
|
||||||
wpRuntimeAssert(allocator != NULL, "`allocator` should not be NULL");
|
WpArrayHeader *header = _array_header(array);
|
||||||
|
|
||||||
u64 capacity = wpArrayCapacity(*array);
|
|
||||||
u64 allocation_size = _arrayCalcAllocSize(capacity, item_size);
|
|
||||||
void *header = (void *)_arrayHeader(*array);
|
|
||||||
wpMemAllocatorFree(allocator, &header, allocation_size);
|
|
||||||
*array = NULL;
|
|
||||||
}
|
|
||||||
|
|
||||||
wp_persist inline void _arrayValidate(const WpArray array, u64 item_size) {
|
|
||||||
WpArrayHeader *header = _arrayHeader(array);
|
|
||||||
wpRuntimeAssert(WP_ARRAY_MAGIC == header->magic, "`array` is not a valid wapp array");
|
wpRuntimeAssert(WP_ARRAY_MAGIC == header->magic, "`array` is not a valid wapp array");
|
||||||
wpRuntimeAssert(item_size == header->item_size, "Invalid item type provided");
|
wpRuntimeAssert(item_size == header->item_size, "Invalid item type provided");
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -176,10 +176,6 @@ typedef enum {
|
|||||||
((TYPE *)_arrayAllocCapacity(ALLOCATOR_PTR, CAPACITY, FLAGS, sizeof(TYPE)))
|
((TYPE *)_arrayAllocCapacity(ALLOCATOR_PTR, CAPACITY, FLAGS, sizeof(TYPE)))
|
||||||
#define wpArrayFromPreallcatedBuffer(TYPE, BUFFER, BUFFER_SIZE) \
|
#define wpArrayFromPreallcatedBuffer(TYPE, BUFFER, BUFFER_SIZE) \
|
||||||
((TYPE *)_array_from_preallcated_buffer(BUFFER, BUFFER_SIZE, sizeof(TYPE)))
|
((TYPE *)_array_from_preallcated_buffer(BUFFER, BUFFER_SIZE, sizeof(TYPE)))
|
||||||
// Only needed for allocators like malloc where each allocation has to be freed on its own.
|
|
||||||
// No need to use it for allocators like Arena.
|
|
||||||
#define wpArrayDealloc(TYPE, ALLOCATOR_PTR, ARRAY_DPTR) \
|
|
||||||
(_arrayDealloc(ALLOCATOR_PTR, (WpArray *)ARRAY_DPTR, sizeof(TYPE)))
|
|
||||||
|
|
||||||
|
|
||||||
typedef struct WpArrayHeader WpArrayHeader;
|
typedef struct WpArrayHeader WpArrayHeader;
|
||||||
@@ -212,7 +208,6 @@ WpArray _arrayAllocCapacity(const WpAllocator *allocator, u64 capacity, WpArrayI
|
|||||||
u64 item_size);
|
u64 item_size);
|
||||||
WpArray _arrayFromPreallocatedBuffer(void *buffer, u64 buffer_size, WpArrayInitFlags flags,
|
WpArray _arrayFromPreallocatedBuffer(void *buffer, u64 buffer_size, WpArrayInitFlags flags,
|
||||||
u64 item_size);
|
u64 item_size);
|
||||||
void _arrayDealloc(const WpAllocator *allocator, WpArray *array, u64 item_size);
|
|
||||||
|
|
||||||
#ifdef WP_PLATFORM_CPP
|
#ifdef WP_PLATFORM_CPP
|
||||||
END_C_LINKAGE
|
END_C_LINKAGE
|
||||||
|
|||||||
@@ -6,73 +6,30 @@
|
|||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
|
|
||||||
void *wpMemAllocatorAlloc(const WpAllocator *allocator, u64 size) {
|
void *wpMemAllocatorAlloc(const WpAllocator *allocator, u64 size) {
|
||||||
wpDebugAssert(allocator != NULL, "`allocator` should not be NULL");
|
wpDebugAssert(allocator != NULL && (allocator->alloc) != NULL, "`allocator` and `allocator->alloc` should not be NULL");
|
||||||
|
|
||||||
if (!wpMemAllocatorOpSupported(allocator, WP_MEM_OP_ALLOC)) {
|
|
||||||
return NULL;
|
|
||||||
}
|
|
||||||
|
|
||||||
return allocator->alloc(size, allocator->obj);
|
return allocator->alloc(size, allocator->obj);
|
||||||
}
|
}
|
||||||
|
|
||||||
void *wpMemAllocatorAllocAligned(const WpAllocator *allocator, u64 size, u64 alignment) {
|
void *wpMemAllocatorAllocAligned(const WpAllocator *allocator, u64 size, u64 alignment) {
|
||||||
wpDebugAssert(allocator != NULL, "`allocator` should not be NULL");
|
wpDebugAssert(allocator != NULL && (allocator->alloc_aligned) != NULL, "`allocator` and `allocator->alloc_aligned` should not be NULL");
|
||||||
|
|
||||||
if (!wpMemAllocatorOpSupported(allocator, WP_MEM_OP_ALLOC_ALIGNED)) {
|
|
||||||
return NULL;
|
|
||||||
}
|
|
||||||
|
|
||||||
return allocator->alloc_aligned(size, alignment, allocator->obj);
|
return allocator->alloc_aligned(size, alignment, allocator->obj);
|
||||||
}
|
}
|
||||||
|
|
||||||
void *wpMemAllocatorRealloc(const WpAllocator *allocator, void *ptr, u64 old_size, u64 new_size) {
|
void *wpMemAllocatorRealloc(const WpAllocator *allocator, void *ptr, u64 old_size, u64 new_size) {
|
||||||
wpDebugAssert(allocator != NULL, "`allocator` should not be NULL");
|
wpDebugAssert(allocator != NULL && (allocator->realloc) != NULL, "`allocator` and `allocator->realloc` should not be NULL");
|
||||||
|
|
||||||
if (!wpMemAllocatorOpSupported(allocator, WP_MEM_OP_REALLOC)) {
|
|
||||||
return NULL;
|
|
||||||
}
|
|
||||||
|
|
||||||
return allocator->realloc(ptr, old_size, new_size, allocator->obj);
|
return allocator->realloc(ptr, old_size, new_size, allocator->obj);
|
||||||
}
|
}
|
||||||
|
|
||||||
void *wpMemAllocatorReallocAligned(const WpAllocator *allocator, void *ptr, u64 old_size,
|
void *wpMemAllocatorReallocAligned(const WpAllocator *allocator, void *ptr, u64 old_size,
|
||||||
u64 new_size, u64 alignment) {
|
u64 new_size, u64 alignment) {
|
||||||
wpDebugAssert(allocator != NULL, "`allocator` should not be NULL");
|
wpDebugAssert(allocator != NULL && (allocator->realloc_aligned) != NULL, "`allocator` and `allocator->realloc_aligned` should not be NULL");
|
||||||
|
|
||||||
if (!wpMemAllocatorOpSupported(allocator, WP_MEM_OP_REALLOC_ALIGNED)) {
|
|
||||||
return NULL;
|
|
||||||
}
|
|
||||||
|
|
||||||
return allocator->realloc_aligned(ptr, old_size, new_size, alignment, allocator->obj);
|
return allocator->realloc_aligned(ptr, old_size, new_size, alignment, allocator->obj);
|
||||||
}
|
}
|
||||||
|
|
||||||
void wpMemAllocatorFree(const WpAllocator *allocator, void **ptr, u64 size) {
|
void wpMemAllocatorFree(const WpAllocator *allocator, void **ptr, u64 size) {
|
||||||
wpDebugAssert(allocator != NULL, "`allocator` should not be NULL");
|
if (!allocator || !(allocator->free)) {
|
||||||
|
|
||||||
if (!wpMemAllocatorOpSupported(allocator, WP_MEM_OP_FREE)) {
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
allocator->free(ptr, size, allocator->obj);
|
allocator->free(ptr, size, allocator->obj);
|
||||||
}
|
}
|
||||||
|
|
||||||
b8 wpMemAllocatorOpSupported(const WpAllocator *allocator, WpMemOp op) {
|
|
||||||
wpDebugAssert(allocator != NULL, "`allocator` should not be NULL");
|
|
||||||
|
|
||||||
switch (op) {
|
|
||||||
case WP_MEM_OP_ALLOC:
|
|
||||||
return allocator->alloc != NULL;
|
|
||||||
case WP_MEM_OP_ALLOC_ALIGNED:
|
|
||||||
return allocator->alloc_aligned != NULL;
|
|
||||||
case WP_MEM_OP_REALLOC:
|
|
||||||
return allocator->realloc != NULL;
|
|
||||||
case WP_MEM_OP_REALLOC_ALIGNED:
|
|
||||||
return allocator->realloc_aligned != NULL;
|
|
||||||
case WP_MEM_OP_FREE:
|
|
||||||
return allocator->free != NULL;
|
|
||||||
default:
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|||||||
@@ -11,16 +11,6 @@
|
|||||||
BEGIN_C_LINKAGE
|
BEGIN_C_LINKAGE
|
||||||
#endif // !WP_PLATFORM_CPP
|
#endif // !WP_PLATFORM_CPP
|
||||||
|
|
||||||
typedef enum {
|
|
||||||
WP_MEM_OP_ALLOC,
|
|
||||||
WP_MEM_OP_ALLOC_ALIGNED,
|
|
||||||
WP_MEM_OP_REALLOC,
|
|
||||||
WP_MEM_OP_REALLOC_ALIGNED,
|
|
||||||
WP_MEM_OP_FREE,
|
|
||||||
|
|
||||||
COUNT_MEM_OPS
|
|
||||||
} WpMemOp;
|
|
||||||
|
|
||||||
typedef void *(WpMemAllocFunc)(u64 size, void *alloc_obj);
|
typedef void *(WpMemAllocFunc)(u64 size, void *alloc_obj);
|
||||||
typedef void *(WpMemAllocAlignedFunc)(u64 size, u64 alignment, void *alloc_obj);
|
typedef void *(WpMemAllocAlignedFunc)(u64 size, u64 alignment, void *alloc_obj);
|
||||||
typedef void *(WpMemReallocFunc)(void *ptr, u64 old_size, u64 new_size, void *alloc_obj);
|
typedef void *(WpMemReallocFunc)(void *ptr, u64 old_size, u64 new_size, void *alloc_obj);
|
||||||
@@ -52,7 +42,6 @@ void *wpMemAllocatorRealloc(const WpAllocator *allocator, void *ptr, u64 old_siz
|
|||||||
void *wpMemAllocatorReallocAligned(const WpAllocator *allocator, void *ptr, u64 old_size,
|
void *wpMemAllocatorReallocAligned(const WpAllocator *allocator, void *ptr, u64 old_size,
|
||||||
u64 new_size, u64 alignment);
|
u64 new_size, u64 alignment);
|
||||||
void wpMemAllocatorFree(const WpAllocator *allocator, void **ptr, u64 size);
|
void wpMemAllocatorFree(const WpAllocator *allocator, void **ptr, u64 size);
|
||||||
b8 wpMemAllocatorOpSupported(const WpAllocator *allocator, WpMemOp op);
|
|
||||||
|
|
||||||
#ifdef WP_PLATFORM_CPP
|
#ifdef WP_PLATFORM_CPP
|
||||||
END_C_LINKAGE
|
END_C_LINKAGE
|
||||||
|
|||||||
@@ -88,11 +88,6 @@ typedef WpQueue WpStr8Queue;
|
|||||||
#define wpQueuePop(TYPE, QUEUE_PTR) ( \
|
#define wpQueuePop(TYPE, QUEUE_PTR) ( \
|
||||||
(TYPE *)_queuePop(QUEUE_PTR, sizeof(TYPE)) \
|
(TYPE *)_queuePop(QUEUE_PTR, sizeof(TYPE)) \
|
||||||
)
|
)
|
||||||
#define wpQueueDealloc(TYPE, ALLOCATOR_PTR, QUEUE_PTR) \
|
|
||||||
(wpArrayDealloc(TYPE, ALLOCATOR_PTR, &((QUEUE_PTR)->items)), \
|
|
||||||
(QUEUE_PTR)->front = 0, \
|
|
||||||
(QUEUE_PTR)->back = 0, \
|
|
||||||
(QUEUE_PTR)->count = 0)
|
|
||||||
|
|
||||||
void _queuePush(WpQueue *queue, void *item, u64 item_size);
|
void _queuePush(WpQueue *queue, void *item, u64 item_size);
|
||||||
WpQueue *_queuePushAlloc(const WpAllocator *allocator, WpQueue *queue, void *item, u64 item_size);
|
WpQueue *_queuePushAlloc(const WpAllocator *allocator, WpQueue *queue, void *item, u64 item_size);
|
||||||
|
|||||||
@@ -1,43 +0,0 @@
|
|||||||
// vim:fileencoding=utf-8:foldmethod=marker
|
|
||||||
|
|
||||||
#include "stream.h"
|
|
||||||
#include "../../common/aliases/aliases.h"
|
|
||||||
#include "../../common/assert/assert.h"
|
|
||||||
|
|
||||||
void _streamValidate(const WpStream *stream, u64 item_size);
|
|
||||||
|
|
||||||
b8 wpStreamAtEnd(const WpStream *stream) {
|
|
||||||
return stream->position >= stream->count;
|
|
||||||
}
|
|
||||||
|
|
||||||
b8 _streamHasCount(const WpStream *stream, u64 count) {
|
|
||||||
return stream->position + count <= stream->count;
|
|
||||||
}
|
|
||||||
|
|
||||||
void *_streamPeekWithOffset(const WpStream *stream, u64 offset, u64 item_size) {
|
|
||||||
_streamValidate(stream, item_size);
|
|
||||||
|
|
||||||
if (_streamHasCount(stream, offset + 1)) {
|
|
||||||
u64 index = (stream->position + offset) * stream->item_size;
|
|
||||||
return (void *)(&((u8 *)(stream->data))[index]);
|
|
||||||
}
|
|
||||||
|
|
||||||
return NULL;
|
|
||||||
}
|
|
||||||
|
|
||||||
void *_streamConsumeCount(WpStream *stream, u64 count, u64 item_size) {
|
|
||||||
_streamValidate(stream, item_size);
|
|
||||||
|
|
||||||
if (_streamHasCount(stream, count)) {
|
|
||||||
u64 index = stream->position * stream->item_size;
|
|
||||||
stream->position += count;
|
|
||||||
return (void *)(&((u8 *)(stream->data))[index]);
|
|
||||||
}
|
|
||||||
|
|
||||||
return NULL;
|
|
||||||
}
|
|
||||||
|
|
||||||
void _streamValidate(const WpStream *stream, u64 item_size) {
|
|
||||||
wpDebugAssert(stream != NULL, "`stream` should not be NULL");
|
|
||||||
wpRuntimeAssert(stream->item_size == item_size, "Invalid item type provided");
|
|
||||||
}
|
|
||||||
@@ -1,80 +0,0 @@
|
|||||||
// vim:fileencoding=utf-8:foldmethod=marker
|
|
||||||
|
|
||||||
#ifndef STREAM_H
|
|
||||||
#define STREAM_H
|
|
||||||
|
|
||||||
#include "../../common/aliases/aliases.h"
|
|
||||||
#include "../../common/platform/platform.h"
|
|
||||||
|
|
||||||
#ifdef WP_PLATFORM_CPP
|
|
||||||
BEGIN_C_LINKAGE
|
|
||||||
#endif // !WP_PLATFORM_CPP
|
|
||||||
|
|
||||||
typedef struct {
|
|
||||||
void *data;
|
|
||||||
u64 count;
|
|
||||||
u64 position;
|
|
||||||
u64 item_size;
|
|
||||||
} WpStream;
|
|
||||||
|
|
||||||
// NOTE (Abdelrahman): WpStream typedefs for readability
|
|
||||||
typedef WpStream WpVoidPtrStream;
|
|
||||||
typedef WpStream WpC8Stream;
|
|
||||||
typedef WpStream WpC16Stream;
|
|
||||||
typedef WpStream WpC32Stream;
|
|
||||||
typedef WpStream WpU8Stream;
|
|
||||||
typedef WpStream WpU16Stream;
|
|
||||||
typedef WpStream WpU32Stream;
|
|
||||||
typedef WpStream WpU64Stream;
|
|
||||||
typedef WpStream WpB8Stream;
|
|
||||||
typedef WpStream WpI8Stream;
|
|
||||||
typedef WpStream WpI16Stream;
|
|
||||||
typedef WpStream WpI32Stream;
|
|
||||||
typedef WpStream WpI64Stream;
|
|
||||||
typedef WpStream WpF32Stream;
|
|
||||||
typedef WpStream WpF64Stream;
|
|
||||||
typedef WpStream WpF128Stream;
|
|
||||||
typedef WpStream WpUptrStream;
|
|
||||||
typedef WpStream WpIptrStream;
|
|
||||||
typedef WpStream WpStr8Stream;
|
|
||||||
|
|
||||||
#ifdef WP_PLATFORM_CPP
|
|
||||||
#define wpStream(TYPE, DATA, SIZE) ([&]() { \
|
|
||||||
return WpStream{ \
|
|
||||||
DATA, \
|
|
||||||
SIZE / sizeof(TYPE), \
|
|
||||||
0, \
|
|
||||||
sizeof(TYPE) \
|
|
||||||
}; \
|
|
||||||
}())
|
|
||||||
#else
|
|
||||||
#define wpStream(TYPE, DATA, SIZE) ( \
|
|
||||||
(WpStream){ \
|
|
||||||
.data = DATA, \
|
|
||||||
.count = SIZE / sizeof(TYPE), \
|
|
||||||
.position = 0, \
|
|
||||||
.item_size = sizeof(TYPE) \
|
|
||||||
} \
|
|
||||||
)
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#define wpStreamHasNext(STREAM) _streamHasCount(STREAM, 1)
|
|
||||||
#define wpStreamHasCount(STREAM, COUNT) _streamHasCount(STREAM, COUNT)
|
|
||||||
#define wpStreamPeek(TYPE, STREAM) ((TYPE *)_streamPeekWithOffset(STREAM, 0, sizeof(TYPE)))
|
|
||||||
#define wpStreamPeekWithOffset(TYPE, STREAM, OFFSET) \
|
|
||||||
((TYPE *)_streamPeekWithOffset(STREAM, OFFSET, sizeof(TYPE)))
|
|
||||||
#define wpStreamConsume(TYPE, STREAM) ((TYPE *)_streamConsumeCount(STREAM, 1, sizeof(TYPE)))
|
|
||||||
#define wpStreamConsumeCount(TYPE, STREAM, COUNT) \
|
|
||||||
((TYPE *)_streamConsumeCount(STREAM, COUNT, sizeof(TYPE)))
|
|
||||||
|
|
||||||
b8 wpStreamAtEnd(const WpStream *stream);
|
|
||||||
|
|
||||||
b8 _streamHasCount(const WpStream *stream, u64 count);
|
|
||||||
void *_streamPeekWithOffset(const WpStream *stream, u64 offset, u64 item_size);
|
|
||||||
void *_streamConsumeCount(WpStream *stream, u64 count, u64 item_size);
|
|
||||||
|
|
||||||
#ifdef WP_PLATFORM_CPP
|
|
||||||
END_C_LINKAGE
|
|
||||||
#endif // !WP_PLATFORM_CPP
|
|
||||||
|
|
||||||
#endif // !STREAM_H
|
|
||||||
@@ -7,7 +7,6 @@
|
|||||||
#include "array/array.c"
|
#include "array/array.c"
|
||||||
#include "dbl_list/dbl_list.c"
|
#include "dbl_list/dbl_list.c"
|
||||||
#include "queue/queue.c"
|
#include "queue/queue.c"
|
||||||
#include "stream/stream.c"
|
|
||||||
#include "mem/allocator/mem_allocator.c"
|
#include "mem/allocator/mem_allocator.c"
|
||||||
#include "mem/utils/mem_utils.c"
|
#include "mem/utils/mem_utils.c"
|
||||||
#include "strings/str8/str8.c"
|
#include "strings/str8/str8.c"
|
||||||
|
|||||||
@@ -6,7 +6,6 @@
|
|||||||
#include "array/array.h"
|
#include "array/array.h"
|
||||||
#include "dbl_list/dbl_list.h"
|
#include "dbl_list/dbl_list.h"
|
||||||
#include "queue/queue.h"
|
#include "queue/queue.h"
|
||||||
#include "stream/stream.h"
|
|
||||||
#include "mem/allocator/mem_allocator.h"
|
#include "mem/allocator/mem_allocator.h"
|
||||||
#include "mem/utils/mem_utils.h"
|
#include "mem/utils/mem_utils.h"
|
||||||
#include "strings/str8/str8.h"
|
#include "strings/str8/str8.h"
|
||||||
|
|||||||
@@ -3,7 +3,6 @@
|
|||||||
#ifndef PLATFORM_H
|
#ifndef PLATFORM_H
|
||||||
#define PLATFORM_H
|
#define PLATFORM_H
|
||||||
|
|
||||||
// Operating system
|
|
||||||
#if defined(__ANDROID__)
|
#if defined(__ANDROID__)
|
||||||
#define WP_PLATFORM_ANDROID
|
#define WP_PLATFORM_ANDROID
|
||||||
#define WP_PLATFORM_POSIX
|
#define WP_PLATFORM_POSIX
|
||||||
@@ -61,39 +60,6 @@
|
|||||||
#error "Unrecognised platform"
|
#error "Unrecognised platform"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
// Compiler
|
|
||||||
#if defined(__clang__)
|
|
||||||
#define WP_PLATFORM_CLANG
|
|
||||||
|
|
||||||
#if defined(__GNUG__)
|
|
||||||
#define WP_PLATFORM_CLANGPP
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#define WP_PLATFORM_CLANG_MAJOR __clang_major__
|
|
||||||
#define WP_PLATFORM_CLANG_MINOR __clang_minor__
|
|
||||||
#define WP_PLATFORM_CLANG_PATCH __clang_patchlevel__
|
|
||||||
#elif defined(__GNUC__) || defined(__GNUG__)
|
|
||||||
#define WP_PLATFORM_GCC
|
|
||||||
|
|
||||||
#if defined(__GNUG__)
|
|
||||||
#define WP_PLATFORM_GPP
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#define WP_PLATFORM_GCC_MAJOR __GNUC__
|
|
||||||
#define WP_PLATFORM_GCC_MINOR __GNUC_MINOR__
|
|
||||||
|
|
||||||
#if defined(__GNUC_PATCHLEVEL__)
|
|
||||||
#define WP_PLATFORM_GCC_PATCH __GNUC_PATCHLEVEL__
|
|
||||||
#endif
|
|
||||||
#elif defined(_MSC_VER)
|
|
||||||
#define WP_PLATFORM_MSVC
|
|
||||||
#define WP_PLATFORM_MSVC_FULL_VERSION _MSC_FULL_VER
|
|
||||||
#define WP_PLATFORM_MSVC_VERSION _MSC_VER
|
|
||||||
#else
|
|
||||||
#error "Unrecognised compiler"
|
|
||||||
#endif
|
|
||||||
|
|
||||||
// Language
|
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
#define WP_PLATFORM_CPP
|
#define WP_PLATFORM_CPP
|
||||||
#define WP_PLATFORM_CPP_VERSION __cplusplus
|
#define WP_PLATFORM_CPP_VERSION __cplusplus
|
||||||
|
|||||||
@@ -6,10 +6,6 @@
|
|||||||
#include "../os/file/file.h"
|
#include "../os/file/file.h"
|
||||||
#include "../base/strings/str8/str8.h"
|
#include "../base/strings/str8/str8.h"
|
||||||
|
|
||||||
#ifdef WP_PLATFORM_CPP
|
|
||||||
BEGIN_C_LINKAGE
|
|
||||||
#endif // !WP_PLATFORM_CPP
|
|
||||||
|
|
||||||
typedef enum {
|
typedef enum {
|
||||||
WP_LOG_LEVEL_FATAL,
|
WP_LOG_LEVEL_FATAL,
|
||||||
WP_LOG_LEVEL_CRITICAL,
|
WP_LOG_LEVEL_CRITICAL,
|
||||||
@@ -35,8 +31,4 @@ void wpLogError(const WpLogger *logger, WpStr8 msg);
|
|||||||
void wpLogCritical(const WpLogger *logger, WpStr8 msg);
|
void wpLogCritical(const WpLogger *logger, WpStr8 msg);
|
||||||
void wpLogFatal(const WpLogger *logger, WpStr8 msg);
|
void wpLogFatal(const WpLogger *logger, WpStr8 msg);
|
||||||
|
|
||||||
#ifdef WP_PLATFORM_CPP
|
|
||||||
END_C_LINKAGE
|
|
||||||
#endif // !WP_PLATFORM_CPP
|
|
||||||
|
|
||||||
#endif // !LOG_H
|
#endif // !LOG_H
|
||||||
|
|||||||
@@ -1,82 +0,0 @@
|
|||||||
// vim:fileencoding=utf-8:foldmethod=marker
|
|
||||||
|
|
||||||
#include "test_stream.h"
|
|
||||||
#include <stdio.h>
|
|
||||||
|
|
||||||
#define COUNT 3
|
|
||||||
|
|
||||||
WpTestFuncResult test_stream_at_end(void) {
|
|
||||||
b8 result = true;
|
|
||||||
|
|
||||||
c8 characters[COUNT] = {'a', 'b', 'c'};
|
|
||||||
WpC8Stream stream = wpStream(c8, characters, COUNT);
|
|
||||||
|
|
||||||
for (u32 i = 0; i < COUNT; ++i) {
|
|
||||||
wpStreamConsume(c8, &stream);
|
|
||||||
result = result && (i == 2 ? wpStreamAtEnd(&stream) : !wpStreamAtEnd(&stream));
|
|
||||||
}
|
|
||||||
|
|
||||||
return wpTesterResult(result);
|
|
||||||
}
|
|
||||||
|
|
||||||
WpTestFuncResult test_stream_peek(void) {
|
|
||||||
b8 result = true;
|
|
||||||
|
|
||||||
c8 characters[COUNT] = {'a', 'b', 'c'};
|
|
||||||
WpC8Stream stream = wpStream(c8, characters, COUNT);
|
|
||||||
|
|
||||||
c8 *c = NULL;
|
|
||||||
for (u32 i = 0; i <= COUNT; ++i) {
|
|
||||||
c = wpStreamPeek(c8, &stream);
|
|
||||||
wpStreamConsume(c8, &stream);
|
|
||||||
result = result && (i == 3 ? c == NULL : c != NULL);
|
|
||||||
}
|
|
||||||
|
|
||||||
return wpTesterResult(result);
|
|
||||||
}
|
|
||||||
|
|
||||||
WpTestFuncResult test_stream_peek_with_offset(void) {
|
|
||||||
b8 result = true;
|
|
||||||
|
|
||||||
c8 characters[COUNT] = {'a', 'b', 'c'};
|
|
||||||
WpC8Stream stream = wpStream(c8, characters, COUNT);
|
|
||||||
|
|
||||||
u64 offset = 2;
|
|
||||||
c8 *c = wpStreamPeekWithOffset(c8, &stream, offset);
|
|
||||||
result = result && *c == characters[offset];
|
|
||||||
|
|
||||||
c = wpStreamPeekWithOffset(c8, &stream, 5);
|
|
||||||
result = result && c == NULL;
|
|
||||||
|
|
||||||
return wpTesterResult(result);
|
|
||||||
}
|
|
||||||
|
|
||||||
WpTestFuncResult test_stream_consume(void) {
|
|
||||||
b8 result = true;
|
|
||||||
|
|
||||||
c8 characters[COUNT] = {'a', 'b', 'c'};
|
|
||||||
WpC8Stream stream = wpStream(c8, characters, COUNT);
|
|
||||||
|
|
||||||
c8 *c = NULL;
|
|
||||||
for (u32 i = 0; i <= COUNT; ++i) {
|
|
||||||
c = wpStreamConsume(c8, &stream);
|
|
||||||
result = result && (i == COUNT ? c == NULL : c != NULL);
|
|
||||||
}
|
|
||||||
|
|
||||||
return wpTesterResult(result);
|
|
||||||
}
|
|
||||||
|
|
||||||
WpTestFuncResult test_stream_consume_count(void) {
|
|
||||||
b8 result = true;
|
|
||||||
|
|
||||||
c8 characters[COUNT] = {'a', 'b', 'c'};
|
|
||||||
WpC8Stream stream = wpStream(c8, characters, COUNT);
|
|
||||||
|
|
||||||
c8 *c = wpStreamConsumeCount(c8, &stream, COUNT);
|
|
||||||
result = result && c != NULL && wpStreamAtEnd(&stream);
|
|
||||||
|
|
||||||
c = wpStreamConsumeCount(c8, &stream, COUNT);
|
|
||||||
result = result && c == NULL;
|
|
||||||
|
|
||||||
return wpTesterResult(result);
|
|
||||||
}
|
|
||||||
@@ -1,82 +0,0 @@
|
|||||||
// vim:fileencoding=utf-8:foldmethod=marker
|
|
||||||
|
|
||||||
#include "test_stream.h"
|
|
||||||
#include <stdio.h>
|
|
||||||
|
|
||||||
#define COUNT 3
|
|
||||||
|
|
||||||
WpTestFuncResult test_stream_at_end(void) {
|
|
||||||
b8 result = true;
|
|
||||||
|
|
||||||
c8 characters[COUNT] = {'a', 'b', 'c'};
|
|
||||||
WpC8Stream stream = wpStream(c8, characters, COUNT);
|
|
||||||
|
|
||||||
for (u32 i = 0; i < COUNT; ++i) {
|
|
||||||
wpStreamConsume(c8, &stream);
|
|
||||||
result = result && (i == 2 ? wpStreamAtEnd(&stream) : !wpStreamAtEnd(&stream));
|
|
||||||
}
|
|
||||||
|
|
||||||
return wpTesterResult(result);
|
|
||||||
}
|
|
||||||
|
|
||||||
WpTestFuncResult test_stream_peek(void) {
|
|
||||||
b8 result = true;
|
|
||||||
|
|
||||||
c8 characters[COUNT] = {'a', 'b', 'c'};
|
|
||||||
WpC8Stream stream = wpStream(c8, characters, COUNT);
|
|
||||||
|
|
||||||
c8 *c = NULL;
|
|
||||||
for (u32 i = 0; i <= COUNT; ++i) {
|
|
||||||
c = wpStreamPeek(c8, &stream);
|
|
||||||
wpStreamConsume(c8, &stream);
|
|
||||||
result = result && (i == 3 ? c == NULL : c != NULL);
|
|
||||||
}
|
|
||||||
|
|
||||||
return wpTesterResult(result);
|
|
||||||
}
|
|
||||||
|
|
||||||
WpTestFuncResult test_stream_peek_with_offset(void) {
|
|
||||||
b8 result = true;
|
|
||||||
|
|
||||||
c8 characters[COUNT] = {'a', 'b', 'c'};
|
|
||||||
WpC8Stream stream = wpStream(c8, characters, COUNT);
|
|
||||||
|
|
||||||
u64 offset = 2;
|
|
||||||
c8 *c = wpStreamPeekWithOffset(c8, &stream, offset);
|
|
||||||
result = result && *c == characters[offset];
|
|
||||||
|
|
||||||
c = wpStreamPeekWithOffset(c8, &stream, 5);
|
|
||||||
result = result && c == NULL;
|
|
||||||
|
|
||||||
return wpTesterResult(result);
|
|
||||||
}
|
|
||||||
|
|
||||||
WpTestFuncResult test_stream_consume(void) {
|
|
||||||
b8 result = true;
|
|
||||||
|
|
||||||
c8 characters[COUNT] = {'a', 'b', 'c'};
|
|
||||||
WpC8Stream stream = wpStream(c8, characters, COUNT);
|
|
||||||
|
|
||||||
c8 *c = NULL;
|
|
||||||
for (u32 i = 0; i <= COUNT; ++i) {
|
|
||||||
c = wpStreamConsume(c8, &stream);
|
|
||||||
result = result && (i == COUNT ? c == NULL : c != NULL);
|
|
||||||
}
|
|
||||||
|
|
||||||
return wpTesterResult(result);
|
|
||||||
}
|
|
||||||
|
|
||||||
WpTestFuncResult test_stream_consume_count(void) {
|
|
||||||
b8 result = true;
|
|
||||||
|
|
||||||
c8 characters[COUNT] = {'a', 'b', 'c'};
|
|
||||||
WpC8Stream stream = wpStream(c8, characters, COUNT);
|
|
||||||
|
|
||||||
c8 *c = wpStreamConsumeCount(c8, &stream, COUNT);
|
|
||||||
result = result && c != NULL && wpStreamAtEnd(&stream);
|
|
||||||
|
|
||||||
c = wpStreamConsumeCount(c8, &stream, COUNT);
|
|
||||||
result = result && c == NULL;
|
|
||||||
|
|
||||||
return wpTesterResult(result);
|
|
||||||
}
|
|
||||||
@@ -1,14 +0,0 @@
|
|||||||
// vim:fileencoding=utf-8:foldmethod=marker
|
|
||||||
|
|
||||||
#ifndef TEST_STREAM_H
|
|
||||||
#define TEST_STREAM_H
|
|
||||||
|
|
||||||
#include "wapp.h"
|
|
||||||
|
|
||||||
WpTestFuncResult test_stream_at_end(void);
|
|
||||||
WpTestFuncResult test_stream_peek(void);
|
|
||||||
WpTestFuncResult test_stream_peek_with_offset(void);
|
|
||||||
WpTestFuncResult test_stream_consume(void);
|
|
||||||
WpTestFuncResult test_stream_consume_count(void);
|
|
||||||
|
|
||||||
#endif // !TEST_STREAM_H
|
|
||||||
@@ -5,7 +5,6 @@
|
|||||||
#include "test_str8_array.h"
|
#include "test_str8_array.h"
|
||||||
#include "test_i32_array.h"
|
#include "test_i32_array.h"
|
||||||
#include "test_queue.h"
|
#include "test_queue.h"
|
||||||
#include "test_stream.h"
|
|
||||||
#include "test_cpath.h"
|
#include "test_cpath.h"
|
||||||
#include "test_file.h"
|
#include "test_file.h"
|
||||||
#include "test_shell_commander.h"
|
#include "test_shell_commander.h"
|
||||||
@@ -48,11 +47,6 @@ int main(void) {
|
|||||||
test_queue_push,
|
test_queue_push,
|
||||||
test_queue_push_alloc,
|
test_queue_push_alloc,
|
||||||
test_queue_pop,
|
test_queue_pop,
|
||||||
test_stream_at_end,
|
|
||||||
test_stream_peek,
|
|
||||||
test_stream_peek_with_offset,
|
|
||||||
test_stream_consume,
|
|
||||||
test_stream_consume_count,
|
|
||||||
test_str8_lit,
|
test_str8_lit,
|
||||||
test_str8_lit_ro,
|
test_str8_lit_ro,
|
||||||
test_str8_buf,
|
test_str8_buf,
|
||||||
|
|||||||
@@ -5,7 +5,6 @@
|
|||||||
#include "test_str8_array.h"
|
#include "test_str8_array.h"
|
||||||
#include "test_i32_array.h"
|
#include "test_i32_array.h"
|
||||||
#include "test_queue.h"
|
#include "test_queue.h"
|
||||||
#include "test_stream.h"
|
|
||||||
#include "test_cpath.h"
|
#include "test_cpath.h"
|
||||||
#include "test_file.h"
|
#include "test_file.h"
|
||||||
#include "test_shell_commander.h"
|
#include "test_shell_commander.h"
|
||||||
@@ -48,11 +47,6 @@ int main(void) {
|
|||||||
test_queue_push,
|
test_queue_push,
|
||||||
test_queue_push_alloc,
|
test_queue_push_alloc,
|
||||||
test_queue_pop,
|
test_queue_pop,
|
||||||
test_stream_at_end,
|
|
||||||
test_stream_peek,
|
|
||||||
test_stream_peek_with_offset,
|
|
||||||
test_stream_consume,
|
|
||||||
test_stream_consume_count,
|
|
||||||
test_str8_lit,
|
test_str8_lit,
|
||||||
test_str8_lit_ro,
|
test_str8_lit_ro,
|
||||||
test_str8_buf,
|
test_str8_buf,
|
||||||
|
|||||||
Reference in New Issue
Block a user