mirror of
https://github.com/fumiama/fumidb.git
synced 2026-06-10 05:04:18 +08:00
init source code
This commit is contained in:
3
.gitignore
vendored
3
.gitignore
vendored
@@ -50,3 +50,6 @@ modules.order
|
||||
Module.symvers
|
||||
Mkfile.old
|
||||
dkms.conf
|
||||
|
||||
build
|
||||
.vscode
|
||||
16
CMakeLists.txt
Normal file
16
CMakeLists.txt
Normal file
@@ -0,0 +1,16 @@
|
||||
cmake_minimum_required(VERSION 3.0.0)
|
||||
project(fumidb VERSION 1.0)
|
||||
SET(CMAKE_BUILD_TYPE "Release")
|
||||
|
||||
include(TestBigEndian)
|
||||
test_big_endian(isBigEndian)
|
||||
if(${isBigEndian})
|
||||
add_definitions(-DWORDS_BIGENDIAN)
|
||||
endif()
|
||||
|
||||
option(BUILD_TEST "Whether to build tests" OFF)
|
||||
if(${BUILD_TEST})
|
||||
message(STATUS "Building tests...")
|
||||
enable_testing()
|
||||
add_subdirectory(tests)
|
||||
endif()
|
||||
66
src/binary.h
Normal file
66
src/binary.h
Normal file
@@ -0,0 +1,66 @@
|
||||
#include <stdio.h>
|
||||
#include <stdint.h>
|
||||
#include <stdlib.h>
|
||||
|
||||
#ifdef __linux__
|
||||
# include <endian.h>
|
||||
#endif
|
||||
#ifdef __FreeBSD__
|
||||
# include <sys/endian.h>
|
||||
#endif
|
||||
#ifdef __NetBSD__
|
||||
# include <sys/endian.h>
|
||||
#endif
|
||||
#ifdef __OpenBSD__
|
||||
# include <sys/types.h>
|
||||
# define be16toh(x) betoh16(x)
|
||||
# define be32toh(x) betoh32(x)
|
||||
# define be64toh(x) betoh64(x)
|
||||
#endif
|
||||
#ifdef __MAC_10_0
|
||||
# define be16toh(x) ntohs(x)
|
||||
# define be32toh(x) ntohl(x)
|
||||
# define be64toh(x) ntohll(x)
|
||||
# define htobe16(x) ntohs(x)
|
||||
# define htobe32(x) htonl(x)
|
||||
# define htobe64(x) htonll(x)
|
||||
#endif
|
||||
#ifdef _WIN64
|
||||
#ifdef WORDS_BIGENDIAN
|
||||
# define be16toh(x) (x)
|
||||
# define be32toh(x) (x)
|
||||
# define be64toh(x) (x)
|
||||
# define htobe16(x) (x)
|
||||
# define htobe32(x) (x)
|
||||
# define htobe64(x) (x)
|
||||
#else
|
||||
# define be16toh(x) _byteswap_ushort(x)
|
||||
# define be32toh(x) _byteswap_ulong(x)
|
||||
# define be64toh(x) _byteswap_uint64(x)
|
||||
# define htobe16(x) _byteswap_ushort(x)
|
||||
# define htobe32(x) _byteswap_ulong(x)
|
||||
# define htobe64(x) _byteswap_uint64(x)
|
||||
#endif
|
||||
#endif
|
||||
|
||||
#ifdef _WIN64
|
||||
#ifdef WORDS_BIGENDIAN
|
||||
#define putle16(buf, x) (*(uint16_t*)(buf) = _byteswap_ushort((uint16_t)(x)))
|
||||
#define putle32(buf, x) (*(uint32_t*)(buf) = _byteswap_ulong((uint32_t)(x)))
|
||||
#define putle64(buf, x) (*(uint64_t*)(buf) = _byteswap_uint64((uint64_t)(x)))
|
||||
#else
|
||||
#define putle16(buf, x) (*(uint16_t*)(buf) = (uint16_t)(x))
|
||||
#define putle32(buf, x) (*(uint32_t*)(buf) = (uint32_t)(x))
|
||||
#define putle64(buf, x) (*(uint64_t*)(buf) = (uint64_t)(x))
|
||||
#endif
|
||||
#else
|
||||
#ifdef WORDS_BIGENDIAN
|
||||
#define putle16(buf, x) (*(uint16_t*)(buf) = __builtin_bswap16((uint16_t)(x)))
|
||||
#define putle32(buf, x) (*(uint32_t*)(buf) = __builtin_bswap32((uint32_t)(x)))
|
||||
#define putle64(buf, x) (*(uint64_t*)(buf) = __builtin_bswap64((uint64_t)(x)))
|
||||
#else
|
||||
#define putle16(buf, x) (*(uint16_t*)(buf) = (uint16_t)(x))
|
||||
#define putle32(buf, x) (*(uint32_t*)(buf) = (uint32_t)(x))
|
||||
#define putle64(buf, x) (*(uint64_t*)(buf) = (uint64_t)(x))
|
||||
#endif
|
||||
#endif
|
||||
6
tests/CMakeLists.txt
Normal file
6
tests/CMakeLists.txt
Normal file
@@ -0,0 +1,6 @@
|
||||
cmake_minimum_required(VERSION 3.0.0)
|
||||
project(fumidb_test VERSION 1.0)
|
||||
|
||||
add_executable(binary_test binary_test.c)
|
||||
|
||||
add_test(test_binary binary_test COMMAND binary_test)
|
||||
12
tests/binary_test.c
Normal file
12
tests/binary_test.c
Normal file
@@ -0,0 +1,12 @@
|
||||
#include "../src/binary.h"
|
||||
|
||||
int main() {
|
||||
char buf[8];
|
||||
putle16(buf, 1);
|
||||
if(buf[0] != 1) return 1;
|
||||
putle32(buf, 2);
|
||||
if(buf[0] != 2) return 2;
|
||||
putle64(buf, 3);
|
||||
if(buf[0] != 3) return 3;
|
||||
return 0;
|
||||
}
|
||||
Reference in New Issue
Block a user