Compare commits
29 Commits
7cab133127
...
release-d2
| Author | SHA1 | Date | |
|---|---|---|---|
| fd2fb6e0c1 | |||
| 449022f9ae | |||
| 6898f8eda1 | |||
| 1f5c5a72ef | |||
| a18c5d9294 | |||
| c753881747 | |||
| ba1bf950a8 | |||
| 95950441d1 | |||
| 1b32bdfcad | |||
| 3544392fa8 | |||
| 144d234d09 | |||
| 465fb06f76 | |||
| db953dd0d1 | |||
| daab4dc4f5 | |||
| 83cbac5cca | |||
| 74e518fee0 | |||
| 6b0ce40c02 | |||
| 4f55964dd9 | |||
| cb597cf92e | |||
| 6906c66ba7 | |||
| ba00d10dfc | |||
| cdfbfe48b7 | |||
| 21ae2a14e9 | |||
| 81b120b1ce | |||
| 40938958de | |||
| df190c05a0 | |||
| 3fe3b08eca | |||
| ecc5ae6b2f | |||
| a863bfc181 |
@@ -4,7 +4,7 @@ on: [push]
|
|||||||
|
|
||||||
jobs:
|
jobs:
|
||||||
build:
|
build:
|
||||||
runs-on: olympic
|
runs-on: nostalgia
|
||||||
steps:
|
steps:
|
||||||
- name: Check out repository code
|
- name: Check out repository code
|
||||||
uses: actions/checkout@v3
|
uses: actions/checkout@v3
|
||||||
@@ -17,10 +17,3 @@ jobs:
|
|||||||
- run: make purge configure-release
|
- run: make purge configure-release
|
||||||
- run: make build
|
- run: make build
|
||||||
- run: make test
|
- run: make test
|
||||||
- run: make install
|
|
||||||
- run: mv dist/linux-x86_64-release nostalgia-linux-x86_64
|
|
||||||
- run: tar cf nostalgia-linux-x86_64.tar nostalgia-linux-x86_64
|
|
||||||
- uses: actions/upload-artifact@v3
|
|
||||||
with:
|
|
||||||
name: nostalgia-linux-x86_64
|
|
||||||
path: nostalgia-linux-x86_64.tar
|
|
||||||
|
|||||||
2
.gitignore
vendored
2
.gitignore
vendored
@@ -6,7 +6,7 @@
|
|||||||
.mypy_cache
|
.mypy_cache
|
||||||
.stfolder
|
.stfolder
|
||||||
.stignore
|
.stignore
|
||||||
util/scripts/__pycache__
|
scripts/__pycache__
|
||||||
pyenv
|
pyenv
|
||||||
CMakeLists.txt.user
|
CMakeLists.txt.user
|
||||||
ROM.oxfs
|
ROM.oxfs
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
FROM fedora:41
|
FROM fedora:36
|
||||||
|
|
||||||
RUN dnf update -y
|
RUN dnf update -y
|
||||||
|
|
||||||
28
Makefile
28
Makefile
@@ -1,45 +1,35 @@
|
|||||||
BC_VAR_PROJECT_NAME=nostalgia
|
BC_VAR_PROJECT_NAME=nostalgia
|
||||||
BC_VAR_PROJECT_NAME_CAP=Nostalgia
|
BC_VAR_PROJECT_NAME_CAP=Nostalgia
|
||||||
BC_VAR_DEVENV_ROOT=util
|
|
||||||
BUILDCORE_PATH=deps/buildcore
|
BUILDCORE_PATH=deps/buildcore
|
||||||
include ${BUILDCORE_PATH}/base.mk
|
include ${BUILDCORE_PATH}/base.mk
|
||||||
|
|
||||||
ifeq ($(BC_VAR_OS),darwin)
|
ifeq ($(BC_VAR_OS),darwin)
|
||||||
PROJECT_STUDIO=./build/${BC_VAR_CURRENT_BUILD}/bin/${BC_VAR_PROJECT_NAME_CAP}Studio.app/Contents/MacOS/${BC_VAR_PROJECT_NAME_CAP}Studio
|
NOSTALGIA_STUDIO=./build/${BC_VAR_CURRENT_BUILD}/bin/${BC_VAR_PROJECT_NAME_CAP}Studio.app/Contents/MacOS/${BC_VAR_PROJECT_NAME_CAP}Studio
|
||||||
MGBA=/Applications/mGBA.app/Contents/MacOS/mGBA
|
MGBA=/Applications/mGBA.app/Contents/MacOS/mGBA
|
||||||
else
|
else
|
||||||
PROJECT_STUDIO=./build/${BC_VAR_CURRENT_BUILD}/bin/${BC_VAR_PROJECT_NAME_CAP}Studio
|
NOSTALGIA_STUDIO=./build/${BC_VAR_CURRENT_BUILD}/bin/${BC_VAR_PROJECT_NAME_CAP}Studio
|
||||||
MGBA=mgba-qt
|
MGBA=mgba-qt
|
||||||
endif
|
endif
|
||||||
PROJECT_PLAYER=./build/${BC_VAR_CURRENT_BUILD}/bin/${BC_VAR_PROJECT_NAME_CAP}
|
|
||||||
|
|
||||||
.PHONY: pkg-gba
|
.PHONY: pkg-gba
|
||||||
pkg-gba: build
|
pkg-gba: build
|
||||||
${BC_CMD_ENVRUN} ${BC_PY3} ./util/scripts/pkg-gba.py sample_project ${BC_VAR_PROJECT_NAME_CAP}
|
${BC_CMD_ENVRUN} ${BC_PY3} ./scripts/pkg-gba.py sample_project ${BC_VAR_PROJECT_NAME}
|
||||||
|
|
||||||
.PHONY: generate-studio-rsrc
|
|
||||||
generate-studio-rsrc:
|
|
||||||
${BC_CMD_ENVRUN} ${BC_PY3} ./util/scripts/file-to-cpp.py --rsrc src/olympic/studio/applib/src/rsrc.json
|
|
||||||
${BC_CMD_ENVRUN} ${BC_PY3} ./util/scripts/file-to-cpp.py --rsrc src/nostalgia/studio/rsrc.json
|
|
||||||
|
|
||||||
.PHONY: build-player
|
|
||||||
build-player:
|
|
||||||
${BC_CMD_CMAKE_BUILD} ${BC_VAR_BUILD_PATH} ${BC_VAR_PROJECT_NAME_CAP}
|
|
||||||
.PHONY: run
|
.PHONY: run
|
||||||
run: build-player
|
run: build
|
||||||
${PROJECT_PLAYER} sample_project
|
./build/${BC_VAR_CURRENT_BUILD}/bin/${BC_VAR_PROJECT_NAME} sample_project
|
||||||
.PHONY: run-studio
|
.PHONY: run-studio
|
||||||
run-studio: build
|
run-studio: build
|
||||||
${PROJECT_STUDIO}
|
${NOSTALGIA_STUDIO}
|
||||||
.PHONY: gba-run
|
.PHONY: gba-run
|
||||||
gba-run: pkg-gba
|
gba-run: pkg-gba
|
||||||
${MGBA} ${BC_VAR_PROJECT_NAME_CAP}.gba
|
${MGBA} ${BC_VAR_PROJECT_NAME}.gba
|
||||||
.PHONY: debug
|
.PHONY: debug
|
||||||
debug: build
|
debug: build
|
||||||
${BC_CMD_HOST_DEBUGGER} ${PROJECT_PLAYER} sample_project
|
${BC_CMD_HOST_DEBUGGER} ./build/${BC_VAR_CURRENT_BUILD}/bin/${BC_VAR_PROJECT_NAME} sample_project
|
||||||
.PHONY: debug-studio
|
.PHONY: debug-studio
|
||||||
debug-studio: build
|
debug-studio: build
|
||||||
${BC_CMD_HOST_DEBUGGER} ${PROJECT_STUDIO}
|
${BC_CMD_HOST_DEBUGGER} ${NOSTALGIA_STUDIO}
|
||||||
|
|
||||||
.PHONY: configure-gba
|
.PHONY: configure-gba
|
||||||
configure-gba:
|
configure-gba:
|
||||||
|
|||||||
2
deps/buildcore/base.mk
vendored
2
deps/buildcore/base.mk
vendored
@@ -93,7 +93,7 @@ purge:
|
|||||||
${BC_CMD_RM_RF} compile_commands.json
|
${BC_CMD_RM_RF} compile_commands.json
|
||||||
.PHONY: test
|
.PHONY: test
|
||||||
test: build
|
test: build
|
||||||
${BC_CMD_ENVRUN} ${BC_CMD_PY3} -m mypy ${BC_VAR_SCRIPTS}
|
${BC_CMD_ENVRUN} mypy ${BC_VAR_SCRIPTS}
|
||||||
${BC_CMD_CMAKE_BUILD} ${BC_VAR_BUILD_PATH} test
|
${BC_CMD_CMAKE_BUILD} ${BC_VAR_BUILD_PATH} test
|
||||||
.PHONY: test-verbose
|
.PHONY: test-verbose
|
||||||
test-verbose: build
|
test-verbose: build
|
||||||
|
|||||||
2
deps/buildcore/scripts/util.py
vendored
2
deps/buildcore/scripts/util.py
vendored
@@ -35,6 +35,4 @@ def get_arch() -> str:
|
|||||||
arch = platform.machine().lower()
|
arch = platform.machine().lower()
|
||||||
if arch == 'amd64':
|
if arch == 'amd64':
|
||||||
arch = 'x86_64'
|
arch = 'x86_64'
|
||||||
elif arch == 'aarch64':
|
|
||||||
arch = 'arm64'
|
|
||||||
return arch
|
return arch
|
||||||
|
|||||||
4
deps/gbabuildcore/base.cmake
vendored
4
deps/gbabuildcore/base.cmake
vendored
@@ -1,8 +1,8 @@
|
|||||||
list(APPEND CMAKE_MODULE_PATH ${CMAKE_CURRENT_LIST_DIR}/cmake/modules)
|
list(APPEND CMAKE_MODULE_PATH ${CMAKE_CURRENT_LIST_DIR}/cmake/modules)
|
||||||
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -nostdlib")
|
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -nostdlib")
|
||||||
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -nostdinc++")
|
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -nostdinc++")
|
||||||
#set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fno-unwind-tables")
|
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fno-unwind-tables")
|
||||||
#set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fno-exceptions")
|
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fno-exceptions")
|
||||||
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fno-rtti")
|
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fno-rtti")
|
||||||
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fno-strict-aliasing")
|
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fno-strict-aliasing")
|
||||||
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -mthumb-interwork")
|
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -mthumb-interwork")
|
||||||
|
|||||||
11
deps/glad/CMakeLists.txt
vendored
11
deps/glad/CMakeLists.txt
vendored
@@ -1,11 +1,2 @@
|
|||||||
add_library(glad src/glad.c)
|
add_library(glad OBJECT src/glad.c)
|
||||||
|
|
||||||
target_include_directories(glad PUBLIC include)
|
target_include_directories(glad PUBLIC include)
|
||||||
|
|
||||||
install(
|
|
||||||
TARGETS
|
|
||||||
glad
|
|
||||||
DESTINATION
|
|
||||||
LIBRARY DESTINATION lib
|
|
||||||
ARCHIVE DESTINATION lib
|
|
||||||
)
|
|
||||||
|
|||||||
10
deps/imgui/CMakeLists.txt
vendored
10
deps/imgui/CMakeLists.txt
vendored
@@ -6,7 +6,7 @@ endif()
|
|||||||
# DrinkingTea: end
|
# DrinkingTea: end
|
||||||
|
|
||||||
add_library(
|
add_library(
|
||||||
imgui
|
imgui OBJECT
|
||||||
imgui.cpp
|
imgui.cpp
|
||||||
imgui_demo.cpp
|
imgui_demo.cpp
|
||||||
imgui_draw.cpp
|
imgui_draw.cpp
|
||||||
@@ -20,11 +20,3 @@ target_include_directories(
|
|||||||
imgui SYSTEM PUBLIC
|
imgui SYSTEM PUBLIC
|
||||||
.
|
.
|
||||||
)
|
)
|
||||||
|
|
||||||
install(
|
|
||||||
TARGETS
|
|
||||||
imgui
|
|
||||||
DESTINATION
|
|
||||||
LIBRARY DESTINATION lib
|
|
||||||
ARCHIVE DESTINATION lib
|
|
||||||
)
|
|
||||||
|
|||||||
2
deps/nfde/CMakeLists.txt
vendored
2
deps/nfde/CMakeLists.txt
vendored
@@ -1,4 +1,4 @@
|
|||||||
cmake_minimum_required(VERSION 3.19)
|
cmake_minimum_required(VERSION 3.5)
|
||||||
project(nativefiledialog-extended VERSION 1.1.1)
|
project(nativefiledialog-extended VERSION 1.1.1)
|
||||||
|
|
||||||
set(nfd_ROOT_PROJECT OFF)
|
set(nfd_ROOT_PROJECT OFF)
|
||||||
|
|||||||
2
deps/ox/deps/jsoncpp/CMakeLists.txt
vendored
2
deps/ox/deps/jsoncpp/CMakeLists.txt
vendored
@@ -12,7 +12,7 @@
|
|||||||
# CMake versions greater than the JSONCPP_NEWEST_VALIDATED_POLICIES_VERSION policies will
|
# CMake versions greater than the JSONCPP_NEWEST_VALIDATED_POLICIES_VERSION policies will
|
||||||
# continue to generate policy warnings "CMake Warning (dev)...Policy CMP0XXX is not set:"
|
# continue to generate policy warnings "CMake Warning (dev)...Policy CMP0XXX is not set:"
|
||||||
#
|
#
|
||||||
set(JSONCPP_OLDEST_VALIDATED_POLICIES_VERSION "3.13.2")
|
set(JSONCPP_OLDEST_VALIDATED_POLICIES_VERSION "3.8.0")
|
||||||
set(JSONCPP_NEWEST_VALIDATED_POLICIES_VERSION "3.13.2")
|
set(JSONCPP_NEWEST_VALIDATED_POLICIES_VERSION "3.13.2")
|
||||||
cmake_minimum_required(VERSION ${JSONCPP_OLDEST_VALIDATED_POLICIES_VERSION})
|
cmake_minimum_required(VERSION ${JSONCPP_OLDEST_VALIDATED_POLICIES_VERSION})
|
||||||
if("${CMAKE_VERSION}" VERSION_LESS "${JSONCPP_NEWEST_VALIDATED_POLICIES_VERSION}")
|
if("${CMAKE_VERSION}" VERSION_LESS "${JSONCPP_NEWEST_VALIDATED_POLICIES_VERSION}")
|
||||||
|
|||||||
12
deps/ox/src/ox/event/signal.hpp
vendored
12
deps/ox/src/ox/event/signal.hpp
vendored
@@ -143,11 +143,6 @@ class Signal {
|
|||||||
|
|
||||||
Error disconnectObject(const void *receiver) const noexcept;
|
Error disconnectObject(const void *receiver) const noexcept;
|
||||||
|
|
||||||
[[nodiscard]]
|
|
||||||
size_t connectionCnt() const noexcept {
|
|
||||||
return m_slots.size();
|
|
||||||
}
|
|
||||||
|
|
||||||
void emit(Args... args) const;
|
void emit(Args... args) const;
|
||||||
|
|
||||||
Error emitCheckError(Args... args) const noexcept;
|
Error emitCheckError(Args... args) const noexcept;
|
||||||
@@ -220,7 +215,7 @@ Error Signal<Args...>::emitCheckError(Args... args) const noexcept {
|
|||||||
}
|
}
|
||||||
return ox::Error(0);
|
return ox::Error(0);
|
||||||
} catch (const ox::Exception &ex) {
|
} catch (const ox::Exception &ex) {
|
||||||
return ox::Error(ex.errCode, ex.msg, ex.src);
|
return ox::Error(ex.file, ex.line, ex.errCode, ex.msg);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -324,11 +319,6 @@ class Signal<Error(Args...)> {
|
|||||||
|
|
||||||
Error disconnectObject(const void *receiver) const noexcept;
|
Error disconnectObject(const void *receiver) const noexcept;
|
||||||
|
|
||||||
[[nodiscard]]
|
|
||||||
size_t connectionCnt() const noexcept {
|
|
||||||
return m_slots.size();
|
|
||||||
}
|
|
||||||
|
|
||||||
void emit(Args... args) const noexcept;
|
void emit(Args... args) const noexcept;
|
||||||
|
|
||||||
Error emitCheckError(Args... args) const noexcept;
|
Error emitCheckError(Args... args) const noexcept;
|
||||||
|
|||||||
@@ -433,14 +433,14 @@ Error FileStoreTemplate<size_t>::resize() {
|
|||||||
template<typename size_t>
|
template<typename size_t>
|
||||||
Error FileStoreTemplate<size_t>::resize(std::size_t size, void *newBuff) {
|
Error FileStoreTemplate<size_t>::resize(std::size_t size, void *newBuff) {
|
||||||
if (m_buffer->size() > size) {
|
if (m_buffer->size() > size) {
|
||||||
return ox::Error{1, "new buffer is too small for existing data"};
|
return ox::Error(1);
|
||||||
}
|
}
|
||||||
m_buffSize = static_cast<size_t>(size);
|
m_buffSize = static_cast<size_t>(size);
|
||||||
if (newBuff) {
|
if (newBuff) {
|
||||||
m_buffer = static_cast<Buffer*>(newBuff);
|
m_buffer = reinterpret_cast<Buffer*>(newBuff);
|
||||||
OX_RETURN_ERROR(m_buffer->setSize(static_cast<size_t>(size)));
|
OX_RETURN_ERROR(m_buffer->setSize(static_cast<size_t>(size)));
|
||||||
}
|
}
|
||||||
return {};
|
return ox::Error(0);
|
||||||
}
|
}
|
||||||
|
|
||||||
template<typename size_t>
|
template<typename size_t>
|
||||||
|
|||||||
53
deps/ox/src/ox/fs/filesystem/filesystem.cpp
vendored
53
deps/ox/src/ox/fs/filesystem/filesystem.cpp
vendored
@@ -37,30 +37,6 @@ Error FileSystem::read(const FileAddress &addr, void *buffer, std::size_t size)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
Result<Buffer> FileSystem::read(FileAddress const &addr, size_t const size) noexcept {
|
|
||||||
Result<Buffer> out;
|
|
||||||
out.value.resize(size);
|
|
||||||
switch (addr.type()) {
|
|
||||||
case FileAddressType::Inode:
|
|
||||||
OX_RETURN_ERROR(readFileInode(addr.getInode().value, out.value.data(), size));
|
|
||||||
break;
|
|
||||||
case FileAddressType::ConstPath:
|
|
||||||
case FileAddressType::Path:
|
|
||||||
OX_RETURN_ERROR(readFilePath(StringView{addr.getPath().value}, out.value.data(), size));
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
return ox::Error{1};
|
|
||||||
}
|
|
||||||
return out;
|
|
||||||
}
|
|
||||||
|
|
||||||
Result<Buffer> FileSystem::read(StringViewCR path, size_t const size) noexcept {
|
|
||||||
Result<Buffer> out;
|
|
||||||
out.value.resize(size);
|
|
||||||
OX_RETURN_ERROR(readFilePath(path, out.value.data(), size));
|
|
||||||
return out;
|
|
||||||
}
|
|
||||||
|
|
||||||
Result<Buffer> FileSystem::read(const FileAddress &addr) noexcept {
|
Result<Buffer> FileSystem::read(const FileAddress &addr) noexcept {
|
||||||
OX_REQUIRE(s, stat(addr));
|
OX_REQUIRE(s, stat(addr));
|
||||||
Buffer buff(static_cast<std::size_t>(s.size));
|
Buffer buff(static_cast<std::size_t>(s.size));
|
||||||
@@ -75,31 +51,28 @@ Result<Buffer> FileSystem::read(StringViewCR path) noexcept {
|
|||||||
return buff;
|
return buff;
|
||||||
}
|
}
|
||||||
|
|
||||||
Error FileSystem::read(
|
Error FileSystem::read(const FileAddress &addr, std::size_t readStart, std::size_t readSize, void *buffer, std::size_t *size) noexcept {
|
||||||
FileAddress const &addr,
|
|
||||||
std::size_t const readStart,
|
|
||||||
std::size_t const readSize,
|
|
||||||
void *buffer,
|
|
||||||
std::size_t *size) noexcept {
|
|
||||||
switch (addr.type()) {
|
switch (addr.type()) {
|
||||||
case FileAddressType::Inode:
|
case FileAddressType::Inode:
|
||||||
return readFileInodeRange(addr.getInode().value, readStart, readSize, buffer, size);
|
return read(addr.getInode().value, readStart, readSize, buffer, size);
|
||||||
case FileAddressType::ConstPath:
|
case FileAddressType::ConstPath:
|
||||||
case FileAddressType::Path:
|
case FileAddressType::Path:
|
||||||
return readFilePathRange(addr.getPath().value, readStart, readSize, buffer, size);
|
return ox::Error(2, "Unsupported for path lookups");
|
||||||
default:
|
default:
|
||||||
return ox::Error(1);
|
return ox::Error(1);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
Result<size_t> FileSystem::read(
|
Error FileSystem::remove(const FileAddress &addr, bool recursive) noexcept {
|
||||||
StringViewCR path,
|
switch (addr.type()) {
|
||||||
std::size_t const readStart,
|
case FileAddressType::Inode:
|
||||||
std::size_t const readSize,
|
return remove(addr.getInode().value, recursive);
|
||||||
Span<char> buff) noexcept {
|
case FileAddressType::ConstPath:
|
||||||
size_t szOut{buff.size()};
|
case FileAddressType::Path:
|
||||||
OX_RETURN_ERROR(readFilePathRange(path, readStart, readSize, buff.data(), &szOut));
|
return remove(StringView(addr.getPath().value), recursive);
|
||||||
return szOut;
|
default:
|
||||||
|
return ox::Error(1);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
Error FileSystem::write(const FileAddress &addr, const void *buffer, uint64_t size, FileType fileType) noexcept {
|
Error FileSystem::write(const FileAddress &addr, const void *buffer, uint64_t size, FileType fileType) noexcept {
|
||||||
|
|||||||
111
deps/ox/src/ox/fs/filesystem/filesystem.hpp
vendored
111
deps/ox/src/ox/fs/filesystem/filesystem.hpp
vendored
@@ -20,7 +20,7 @@
|
|||||||
namespace ox {
|
namespace ox {
|
||||||
|
|
||||||
namespace detail {
|
namespace detail {
|
||||||
inline void fsBuffFree(char *buff) noexcept {
|
static inline void fsBuffFree(char *buff) noexcept {
|
||||||
safeDelete(buff);
|
safeDelete(buff);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -41,45 +41,25 @@ class FileSystem {
|
|||||||
|
|
||||||
Error read(const FileAddress &addr, void *buffer, std::size_t size) noexcept;
|
Error read(const FileAddress &addr, void *buffer, std::size_t size) noexcept;
|
||||||
|
|
||||||
Result<Buffer> read(FileAddress const &addr, size_t size) noexcept;
|
|
||||||
|
|
||||||
Result<Buffer> read(StringViewCR path, size_t size) noexcept;
|
|
||||||
|
|
||||||
Result<Buffer> read(const FileAddress &addr) noexcept;
|
Result<Buffer> read(const FileAddress &addr) noexcept;
|
||||||
|
|
||||||
Result<Buffer> read(StringViewCR path) noexcept;
|
Result<Buffer> read(StringViewCR path) noexcept;
|
||||||
|
|
||||||
Error read(StringViewCR path, void *buffer, std::size_t buffSize) noexcept {
|
inline Error read(StringViewCR path, void *buffer, std::size_t buffSize) noexcept {
|
||||||
return readFilePath(path, buffer, buffSize);
|
return readFilePath(path, buffer, buffSize);
|
||||||
}
|
}
|
||||||
|
|
||||||
Error read(uint64_t inode, void *buffer, std::size_t buffSize) noexcept {
|
inline Error read(uint64_t inode, void *buffer, std::size_t buffSize) noexcept {
|
||||||
return readFileInode(inode, buffer, buffSize);
|
return readFileInode(inode, buffer, buffSize);
|
||||||
}
|
}
|
||||||
|
|
||||||
Error read(
|
Error read(const FileAddress &addr, std::size_t readStart, std::size_t readSize, void *buffer, std::size_t *size) noexcept;
|
||||||
FileAddress const &addr,
|
|
||||||
size_t readStart,
|
|
||||||
size_t readSize,
|
|
||||||
void *buffer,
|
|
||||||
size_t *size) noexcept;
|
|
||||||
|
|
||||||
/**
|
|
||||||
*
|
|
||||||
* @param path
|
|
||||||
* @param readStart
|
|
||||||
* @param readSize
|
|
||||||
* @param buff
|
|
||||||
* @return error or number of bytes read
|
|
||||||
*/
|
|
||||||
Result<size_t> read(
|
|
||||||
StringViewCR path, size_t readStart, size_t readSize, ox::Span<char> buff) noexcept;
|
|
||||||
|
|
||||||
virtual Result<Vector<String>> ls(StringViewCR dir) const noexcept = 0;
|
virtual Result<Vector<String>> ls(StringViewCR dir) const noexcept = 0;
|
||||||
|
|
||||||
Error remove(StringViewCR path, bool recursive = false) noexcept {
|
virtual Error remove(StringViewCR path, bool recursive) noexcept = 0;
|
||||||
return removePath(path, recursive);
|
|
||||||
}
|
Error remove(const FileAddress &addr, bool recursive = false) noexcept;
|
||||||
|
|
||||||
virtual Error resize(uint64_t size, void *buffer) noexcept = 0;
|
virtual Error resize(uint64_t size, void *buffer) noexcept = 0;
|
||||||
|
|
||||||
@@ -101,36 +81,36 @@ class FileSystem {
|
|||||||
|
|
||||||
Error write(const FileAddress &addr, const void *buffer, uint64_t size, FileType fileType = FileType::NormalFile) noexcept;
|
Error write(const FileAddress &addr, const void *buffer, uint64_t size, FileType fileType = FileType::NormalFile) noexcept;
|
||||||
|
|
||||||
Error write(StringViewCR path, const void *buffer, uint64_t size, FileType fileType) noexcept {
|
inline Error write(StringViewCR path, const void *buffer, uint64_t size, FileType fileType) noexcept {
|
||||||
return writeFilePath(path, buffer, size, fileType);
|
return writeFilePath(path, buffer, size, fileType);
|
||||||
}
|
}
|
||||||
|
|
||||||
Error write(uint64_t inode, const void *buffer, uint64_t size, FileType fileType) noexcept {
|
inline Error write(uint64_t inode, const void *buffer, uint64_t size, FileType fileType) noexcept {
|
||||||
return writeFileInode(inode, buffer, size, fileType);
|
return writeFileInode(inode, buffer, size, fileType);
|
||||||
}
|
}
|
||||||
|
|
||||||
Result<FileStat> stat(uint64_t inode) const noexcept {
|
inline Result<FileStat> stat(uint64_t inode) const noexcept {
|
||||||
return statInode(inode);
|
return statInode(inode);
|
||||||
}
|
}
|
||||||
|
|
||||||
Result<FileStat> stat(StringViewCR path) const noexcept {
|
inline Result<FileStat> stat(StringViewCR path) const noexcept {
|
||||||
return statPath(path);
|
return statPath(path);
|
||||||
}
|
}
|
||||||
|
|
||||||
Result<FileStat> stat(const FileAddress &addr) const noexcept;
|
Result<FileStat> stat(const FileAddress &addr) const noexcept;
|
||||||
|
|
||||||
[[nodiscard]]
|
[[nodiscard]]
|
||||||
bool exists(uint64_t inode) const noexcept {
|
inline bool exists(uint64_t inode) const noexcept {
|
||||||
return statInode(inode).ok();
|
return statInode(inode).ok();
|
||||||
}
|
}
|
||||||
|
|
||||||
[[nodiscard]]
|
[[nodiscard]]
|
||||||
bool exists(ox::StringView path) const noexcept {
|
inline bool exists(ox::StringView path) const noexcept {
|
||||||
return statPath(path).ok();
|
return statPath(path).ok();
|
||||||
}
|
}
|
||||||
|
|
||||||
[[nodiscard]]
|
[[nodiscard]]
|
||||||
bool exists(FileAddress const&addr) const noexcept {
|
inline bool exists(FileAddress const&addr) const noexcept {
|
||||||
return stat(addr).ok();
|
return stat(addr).ok();
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -160,12 +140,7 @@ class FileSystem {
|
|||||||
|
|
||||||
virtual Error readFileInode(uint64_t inode, void *buffer, std::size_t size) noexcept = 0;
|
virtual Error readFileInode(uint64_t inode, void *buffer, std::size_t size) noexcept = 0;
|
||||||
|
|
||||||
virtual Error readFilePathRange(
|
virtual Error readFileInodeRange(uint64_t inode, std::size_t readStart, std::size_t readSize, void *buffer, std::size_t *size) noexcept = 0;
|
||||||
StringViewCR path, size_t readStart, size_t readSize, void *buffer, size_t *buffSize) noexcept = 0;
|
|
||||||
|
|
||||||
virtual Error readFileInodeRange(uint64_t inode, size_t readStart, size_t readSize, void *buffer, size_t *size) noexcept = 0;
|
|
||||||
|
|
||||||
virtual Error removePath(StringViewCR path, bool recursive) noexcept = 0;
|
|
||||||
|
|
||||||
virtual Error writeFilePath(StringViewCR path, const void *buffer, uint64_t size, FileType fileType) noexcept = 0;
|
virtual Error writeFilePath(StringViewCR path, const void *buffer, uint64_t size, FileType fileType) noexcept = 0;
|
||||||
|
|
||||||
@@ -177,11 +152,11 @@ class MemFS: public FileSystem {
|
|||||||
public:
|
public:
|
||||||
Result<const char*> directAccess(const FileAddress &addr) const noexcept;
|
Result<const char*> directAccess(const FileAddress &addr) const noexcept;
|
||||||
|
|
||||||
Result<const char*> directAccess(StringViewCR path) const noexcept {
|
inline Result<const char*> directAccess(StringViewCR path) const noexcept {
|
||||||
return directAccessPath(path);
|
return directAccessPath(path);
|
||||||
}
|
}
|
||||||
|
|
||||||
Result<const char*> directAccess(uint64_t inode) const noexcept {
|
inline Result<const char*> directAccess(uint64_t inode) const noexcept {
|
||||||
return directAccessInode(inode);
|
return directAccessInode(inode);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -234,11 +209,6 @@ class FileSystemTemplate: public MemFS {
|
|||||||
|
|
||||||
Error readFileInodeRange(uint64_t inode, std::size_t readStart, std::size_t readSize, void *buffer, std::size_t *size) noexcept override;
|
Error readFileInodeRange(uint64_t inode, std::size_t readStart, std::size_t readSize, void *buffer, std::size_t *size) noexcept override;
|
||||||
|
|
||||||
Error readFilePathRange(
|
|
||||||
StringViewCR path, size_t readStart, size_t readSize, void *buffer, size_t *buffSize) noexcept override;
|
|
||||||
|
|
||||||
Error removePath(StringViewCR path, bool recursive) noexcept override;
|
|
||||||
|
|
||||||
Result<const char*> directAccessInode(uint64_t) const noexcept override;
|
Result<const char*> directAccessInode(uint64_t) const noexcept override;
|
||||||
|
|
||||||
Result<Vector<String>> ls(StringViewCR dir) const noexcept override;
|
Result<Vector<String>> ls(StringViewCR dir) const noexcept override;
|
||||||
@@ -246,6 +216,8 @@ class FileSystemTemplate: public MemFS {
|
|||||||
template<typename F>
|
template<typename F>
|
||||||
Error ls(StringViewCR path, F cb) const;
|
Error ls(StringViewCR path, F cb) const;
|
||||||
|
|
||||||
|
Error remove(StringViewCR path, bool recursive) noexcept override;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Resizes FileSystem to minimum possible size.
|
* Resizes FileSystem to minimum possible size.
|
||||||
*/
|
*/
|
||||||
@@ -384,32 +356,6 @@ Error FileSystemTemplate<FileStore, Directory>::readFileInodeRange(uint64_t inod
|
|||||||
return m_fs.read(inode, readStart, readSize, reinterpret_cast<uint8_t*>(buffer), size);
|
return m_fs.read(inode, readStart, readSize, reinterpret_cast<uint8_t*>(buffer), size);
|
||||||
}
|
}
|
||||||
|
|
||||||
template<typename FileStore, typename Directory>
|
|
||||||
Error FileSystemTemplate<FileStore, Directory>::readFilePathRange(
|
|
||||||
StringViewCR path, size_t readStart, size_t readSize, void *buffer, size_t *buffSize) noexcept {
|
|
||||||
OX_REQUIRE(s, stat(path));
|
|
||||||
return readFileInodeRange(s.inode, readStart, readSize, buffer, buffSize);
|
|
||||||
}
|
|
||||||
|
|
||||||
template<typename FileStore, typename Directory>
|
|
||||||
Error FileSystemTemplate<FileStore, Directory>::removePath(StringViewCR path, bool recursive) noexcept {
|
|
||||||
OX_REQUIRE(fd, fileSystemData());
|
|
||||||
Directory rootDir(m_fs, fd.rootDirInode);
|
|
||||||
OX_REQUIRE(inode, rootDir.find(path));
|
|
||||||
OX_REQUIRE(st, statInode(inode));
|
|
||||||
if (st.fileType == FileType::NormalFile || recursive) {
|
|
||||||
if (auto err = rootDir.remove(path)) {
|
|
||||||
// removal failed, try putting the index back
|
|
||||||
oxLogError(rootDir.write(path, inode));
|
|
||||||
return err;
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
oxTrace("FileSystemTemplate.remove.fail", "Tried to remove directory without recursive setting.");
|
|
||||||
return ox::Error(1);
|
|
||||||
}
|
|
||||||
return ox::Error(0);
|
|
||||||
}
|
|
||||||
|
|
||||||
template<typename FileStore, typename Directory>
|
template<typename FileStore, typename Directory>
|
||||||
Result<const char*> FileSystemTemplate<FileStore, Directory>::directAccessInode(uint64_t inode) const noexcept {
|
Result<const char*> FileSystemTemplate<FileStore, Directory>::directAccessInode(uint64_t inode) const noexcept {
|
||||||
auto data = m_fs.read(inode);
|
auto data = m_fs.read(inode);
|
||||||
@@ -438,6 +384,25 @@ Error FileSystemTemplate<FileStore, Directory>::ls(StringViewCR path, F cb) cons
|
|||||||
return dir.ls(cb);
|
return dir.ls(cb);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
template<typename FileStore, typename Directory>
|
||||||
|
Error FileSystemTemplate<FileStore, Directory>::remove(StringViewCR path, bool recursive) noexcept {
|
||||||
|
OX_REQUIRE(fd, fileSystemData());
|
||||||
|
Directory rootDir(m_fs, fd.rootDirInode);
|
||||||
|
OX_REQUIRE(inode, rootDir.find(path));
|
||||||
|
OX_REQUIRE(st, statInode(inode));
|
||||||
|
if (st.fileType == FileType::NormalFile || recursive) {
|
||||||
|
if (auto err = rootDir.remove(path)) {
|
||||||
|
// removal failed, try putting the index back
|
||||||
|
oxLogError(rootDir.write(path, inode));
|
||||||
|
return err;
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
oxTrace("FileSystemTemplate.remove.fail", "Tried to remove directory without recursive setting.");
|
||||||
|
return ox::Error(1);
|
||||||
|
}
|
||||||
|
return ox::Error(0);
|
||||||
|
}
|
||||||
|
|
||||||
template<typename FileStore, typename Directory>
|
template<typename FileStore, typename Directory>
|
||||||
Error FileSystemTemplate<FileStore, Directory>::resize() noexcept {
|
Error FileSystemTemplate<FileStore, Directory>::resize() noexcept {
|
||||||
return m_fs.resize();
|
return m_fs.resize();
|
||||||
|
|||||||
42
deps/ox/src/ox/fs/filesystem/passthroughfs.cpp
vendored
42
deps/ox/src/ox/fs/filesystem/passthroughfs.cpp
vendored
@@ -75,6 +75,14 @@ Result<Vector<String>> PassThroughFS::ls(StringViewCR dir) const noexcept {
|
|||||||
return out;
|
return out;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Error PassThroughFS::remove(StringViewCR path, bool recursive) noexcept {
|
||||||
|
if (recursive) {
|
||||||
|
return ox::Error(std::filesystem::remove_all(m_path / stripSlash(path)) != 0);
|
||||||
|
} else {
|
||||||
|
return ox::Error(std::filesystem::remove(m_path / stripSlash(path)) != 0);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
Error PassThroughFS::resize(uint64_t, void*) noexcept {
|
Error PassThroughFS::resize(uint64_t, void*) noexcept {
|
||||||
// unsupported
|
// unsupported
|
||||||
return ox::Error(1, "resize is not supported by PassThroughFS");
|
return ox::Error(1, "resize is not supported by PassThroughFS");
|
||||||
@@ -93,9 +101,7 @@ Result<FileStat> PassThroughFS::statPath(StringViewCR path) const noexcept {
|
|||||||
oxTracef("ox.fs.PassThroughFS.statInode", "{} {}", ec.message(), path);
|
oxTracef("ox.fs.PassThroughFS.statInode", "{} {}", ec.message(), path);
|
||||||
const uint64_t size = type == FileType::Directory ? 0 : std::filesystem::file_size(p, ec);
|
const uint64_t size = type == FileType::Directory ? 0 : std::filesystem::file_size(p, ec);
|
||||||
oxTracef("ox.fs.PassThroughFS.statInode.size", "{} {}", path, size);
|
oxTracef("ox.fs.PassThroughFS.statInode.size", "{} {}", path, size);
|
||||||
if (auto err = ec.value()) {
|
OX_RETURN_ERROR(ox::Error(static_cast<ox::ErrorCode>(ec.value()), "PassThroughFS: stat failed"));
|
||||||
return ox::Error{static_cast<ox::ErrorCode>(err), "PassThroughFS: stat failed"};
|
|
||||||
}
|
|
||||||
return FileStat{0, 0, size, type};
|
return FileStat{0, 0, size, type};
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -156,38 +162,11 @@ Error PassThroughFS::readFileInode(uint64_t, void*, std::size_t) noexcept {
|
|||||||
return ox::Error(1, "readFileInode(uint64_t, void*, std::size_t) is not supported by PassThroughFS");
|
return ox::Error(1, "readFileInode(uint64_t, void*, std::size_t) is not supported by PassThroughFS");
|
||||||
}
|
}
|
||||||
|
|
||||||
Error PassThroughFS::readFilePathRange(
|
|
||||||
StringViewCR path, size_t const readStart, size_t readSize, void *buffer, size_t *buffSize) noexcept {
|
|
||||||
try {
|
|
||||||
std::ifstream file(m_path / stripSlash(path), std::ios::binary | std::ios::ate);
|
|
||||||
auto const size = static_cast<size_t>(file.tellg());
|
|
||||||
readSize = ox::min(readSize, size);
|
|
||||||
file.seekg(static_cast<off_t>(readStart), std::ios::beg);
|
|
||||||
if (readSize > *buffSize) {
|
|
||||||
oxTracef("ox.fs.PassThroughFS.read.error", "Read failed: Buffer too small: {}", path);
|
|
||||||
return ox::Error{1};
|
|
||||||
}
|
|
||||||
file.read(static_cast<char*>(buffer), static_cast<std::streamsize>(readSize));
|
|
||||||
return {};
|
|
||||||
} catch (std::fstream::failure const &f) {
|
|
||||||
oxTracef("ox.fs.PassThroughFS.read.error", "Read of {} failed: {}", path, f.what());
|
|
||||||
return ox::Error{2};
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
Error PassThroughFS::readFileInodeRange(uint64_t, std::size_t, std::size_t, void*, std::size_t*) noexcept {
|
Error PassThroughFS::readFileInodeRange(uint64_t, std::size_t, std::size_t, void*, std::size_t*) noexcept {
|
||||||
// unsupported
|
// unsupported
|
||||||
return ox::Error(1, "read(uint64_t, std::size_t, std::size_t, void*, std::size_t*) is not supported by PassThroughFS");
|
return ox::Error(1, "read(uint64_t, std::size_t, std::size_t, void*, std::size_t*) is not supported by PassThroughFS");
|
||||||
}
|
}
|
||||||
|
|
||||||
Error PassThroughFS::removePath(StringViewCR path, bool const recursive) noexcept {
|
|
||||||
if (recursive) {
|
|
||||||
return ox::Error{std::filesystem::remove_all(m_path / stripSlash(path)) == 0};
|
|
||||||
} else {
|
|
||||||
return ox::Error{!std::filesystem::remove(m_path / stripSlash(path))};
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
Error PassThroughFS::writeFilePath(StringViewCR path, const void *buffer, uint64_t size, FileType) noexcept {
|
Error PassThroughFS::writeFilePath(StringViewCR path, const void *buffer, uint64_t size, FileType) noexcept {
|
||||||
const auto p = (m_path / stripSlash(path));
|
const auto p = (m_path / stripSlash(path));
|
||||||
try {
|
try {
|
||||||
@@ -206,7 +185,8 @@ Error PassThroughFS::writeFileInode(uint64_t, const void*, uint64_t, FileType) n
|
|||||||
}
|
}
|
||||||
|
|
||||||
std::string_view PassThroughFS::stripSlash(StringView path) noexcept {
|
std::string_view PassThroughFS::stripSlash(StringView path) noexcept {
|
||||||
for (auto i = 0u; i < path.len() && path[0] == '/'; i++) {
|
const auto pathLen = ox::strlen(path);
|
||||||
|
for (auto i = 0u; i < pathLen && path[0] == '/'; i++) {
|
||||||
path = substr(path, 1);
|
path = substr(path, 1);
|
||||||
}
|
}
|
||||||
return {path.data(), path.bytes()};
|
return {path.data(), path.bytes()};
|
||||||
|
|||||||
@@ -45,6 +45,8 @@ class PassThroughFS: public FileSystem {
|
|||||||
template<typename F>
|
template<typename F>
|
||||||
Error ls(StringViewCR dir, F cb) const noexcept;
|
Error ls(StringViewCR dir, F cb) const noexcept;
|
||||||
|
|
||||||
|
Error remove(StringViewCR path, bool recursive) noexcept override;
|
||||||
|
|
||||||
Error resize(uint64_t size, void *buffer) noexcept override;
|
Error resize(uint64_t size, void *buffer) noexcept override;
|
||||||
|
|
||||||
Result<FileStat> statInode(uint64_t inode) const noexcept override;
|
Result<FileStat> statInode(uint64_t inode) const noexcept override;
|
||||||
@@ -71,13 +73,8 @@ class PassThroughFS: public FileSystem {
|
|||||||
|
|
||||||
Error readFileInode(uint64_t inode, void *buffer, std::size_t size) noexcept override;
|
Error readFileInode(uint64_t inode, void *buffer, std::size_t size) noexcept override;
|
||||||
|
|
||||||
Error readFilePathRange(
|
|
||||||
StringViewCR path, size_t readStart, size_t readSize, void *buffer, size_t *buffSize) noexcept override;
|
|
||||||
|
|
||||||
Error readFileInodeRange(uint64_t inode, std::size_t readStart, std::size_t readSize, void *buffer, std::size_t *size) noexcept override;
|
Error readFileInodeRange(uint64_t inode, std::size_t readStart, std::size_t readSize, void *buffer, std::size_t *size) noexcept override;
|
||||||
|
|
||||||
Error removePath(StringViewCR path, bool recursive) noexcept override;
|
|
||||||
|
|
||||||
Error writeFilePath(StringViewCR path, const void *buffer, uint64_t size, FileType fileType) noexcept override;
|
Error writeFilePath(StringViewCR path, const void *buffer, uint64_t size, FileType fileType) noexcept override;
|
||||||
|
|
||||||
Error writeFileInode(uint64_t inode, const void *buffer, uint64_t size, FileType fileType) noexcept override;
|
Error writeFileInode(uint64_t inode, const void *buffer, uint64_t size, FileType fileType) noexcept override;
|
||||||
|
|||||||
2
deps/ox/src/ox/logconn/def.hpp
vendored
2
deps/ox/src/ox/logconn/def.hpp
vendored
@@ -14,7 +14,7 @@
|
|||||||
{ \
|
{ \
|
||||||
const auto loggerErr = (loggerName).initConn(appName); \
|
const auto loggerErr = (loggerName).initConn(appName); \
|
||||||
if (loggerErr) { \
|
if (loggerErr) { \
|
||||||
oxErrf("Could not connect to logger: {} ({}:{})\n", toStr(loggerErr), loggerErr.src.file_name(), loggerErr.src.line()); \
|
oxErrf("Could not connect to logger: {} ({}:{})\n", toStr(loggerErr), loggerErr.file, loggerErr.line); \
|
||||||
} else { \
|
} else { \
|
||||||
ox::trace::setLogger(&(loggerName)); \
|
ox::trace::setLogger(&(loggerName)); \
|
||||||
} \
|
} \
|
||||||
|
|||||||
6
deps/ox/src/ox/model/typenamecatcher.hpp
vendored
6
deps/ox/src/ox/model/typenamecatcher.hpp
vendored
@@ -140,16 +140,16 @@ constexpr Str getModelTypeName() noexcept {
|
|||||||
return out;
|
return out;
|
||||||
}
|
}
|
||||||
|
|
||||||
template<typename T, typename Str = const char*>
|
template<typename T>
|
||||||
[[nodiscard]]
|
[[nodiscard]]
|
||||||
consteval auto requireModelTypeName() noexcept {
|
consteval auto requireModelTypeName() noexcept {
|
||||||
constexpr auto name = getModelTypeName<T, Str>();
|
constexpr auto name = getModelTypeName<T>();
|
||||||
static_assert(ox::StringView{name}.len(), "Type lacks required TypeName");
|
static_assert(ox::StringView{name}.len(), "Type lacks required TypeName");
|
||||||
return name;
|
return name;
|
||||||
}
|
}
|
||||||
|
|
||||||
template<typename T, typename Str = const char*>
|
template<typename T, typename Str = const char*>
|
||||||
constexpr auto ModelTypeName_v = requireModelTypeName<T, Str>();
|
constexpr auto ModelTypeName_v = getModelTypeName<T, Str>();
|
||||||
|
|
||||||
template<typename T, typename Str = const char*>
|
template<typename T, typename Str = const char*>
|
||||||
constexpr auto ModelTypeVersion_v = requireModelTypeVersion<T>();
|
constexpr auto ModelTypeVersion_v = requireModelTypeVersion<T>();
|
||||||
|
|||||||
9
deps/ox/src/ox/oc/read.hpp
vendored
9
deps/ox/src/ox/oc/read.hpp
vendored
@@ -144,11 +144,7 @@ Error OrganicClawReader::field(const char *key, T *val) noexcept {
|
|||||||
if (jv.empty()) {
|
if (jv.empty()) {
|
||||||
*val = 0;
|
*val = 0;
|
||||||
} else if (rightType) {
|
} else if (rightType) {
|
||||||
if constexpr(ox::is_signed_v<T>) {
|
*val = static_cast<T>(jv.asUInt());
|
||||||
*val = static_cast<T>(jv.asInt64());
|
|
||||||
} else {
|
|
||||||
*val = static_cast<T>(jv.asUInt64());
|
|
||||||
}
|
|
||||||
} else {
|
} else {
|
||||||
err = ox::Error(1, "Type mismatch");
|
err = ox::Error(1, "Type mismatch");
|
||||||
}
|
}
|
||||||
@@ -176,8 +172,7 @@ Error OrganicClawReader::field(const char *key, T *val) noexcept {
|
|||||||
err = ox::Error(1, "Type mismatch");
|
err = ox::Error(1, "Type mismatch");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} catch (Json::LogicError const&e) {
|
} catch (Json::LogicError const&) {
|
||||||
oxDebugf("JSON error: {}", e.what());
|
|
||||||
err = ox::Error(1, "error reading JSON data");
|
err = ox::Error(1, "error reading JSON data");
|
||||||
}
|
}
|
||||||
++m_fieldIt;
|
++m_fieldIt;
|
||||||
|
|||||||
14
deps/ox/src/ox/std/algorithm.hpp
vendored
14
deps/ox/src/ox/std/algorithm.hpp
vendored
@@ -9,25 +9,13 @@
|
|||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
#include "def.hpp"
|
#include "def.hpp"
|
||||||
#include "error.hpp"
|
|
||||||
|
|
||||||
OX_CLANG_NOWARN_BEGIN(-Wunsafe-buffer-usage)
|
OX_CLANG_NOWARN_BEGIN(-Wunsafe-buffer-usage)
|
||||||
|
|
||||||
namespace ox {
|
namespace ox {
|
||||||
|
|
||||||
template<typename It, typename T>
|
template<typename It, typename T>
|
||||||
constexpr ox::Result<size_t> findIdx(It begin, It end, T const&value) {
|
constexpr It find(It begin, It end, const T &value) {
|
||||||
auto it = begin;
|
|
||||||
for (; it != end; ++it) {
|
|
||||||
if (*it == value) {
|
|
||||||
return it.offset();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return ox::Error{1, "item not found"};
|
|
||||||
}
|
|
||||||
|
|
||||||
template<typename It, typename T>
|
|
||||||
constexpr It find(It begin, It end, T const&value) {
|
|
||||||
for (; begin != end; ++begin) {
|
for (; begin != end; ++begin) {
|
||||||
if (*begin == value) {
|
if (*begin == value) {
|
||||||
return begin;
|
return begin;
|
||||||
|
|||||||
87
deps/ox/src/ox/std/anyptr.hpp
vendored
87
deps/ox/src/ox/std/anyptr.hpp
vendored
@@ -15,22 +15,18 @@
|
|||||||
|
|
||||||
namespace ox {
|
namespace ox {
|
||||||
|
|
||||||
namespace detail {
|
class AnyPtr {
|
||||||
|
|
||||||
template<bool unique>
|
|
||||||
class AnyPtrT {
|
|
||||||
private:
|
private:
|
||||||
struct WrapBase {
|
struct WrapBase {
|
||||||
virtual constexpr ~WrapBase() = default;
|
virtual constexpr ~WrapBase() = default;
|
||||||
virtual constexpr WrapBase *copyTo(ox::Span<char> s) noexcept = 0;
|
virtual constexpr WrapBase *copyTo(ox::Span<char> s) noexcept = 0;
|
||||||
virtual constexpr operator bool() const noexcept = 0;
|
virtual constexpr operator bool() const noexcept = 0;
|
||||||
virtual void free() noexcept = 0;
|
|
||||||
};
|
};
|
||||||
|
|
||||||
template<typename T>
|
template<typename T>
|
||||||
struct Wrap final: WrapBase {
|
struct Wrap: public WrapBase {
|
||||||
T *data{};
|
T *data{};
|
||||||
explicit constexpr Wrap(T *pData) noexcept: data(pData) {
|
constexpr Wrap(T *pData) noexcept: data(pData) {
|
||||||
}
|
}
|
||||||
constexpr WrapBase *copyTo(ox::Span<char> s) noexcept override {
|
constexpr WrapBase *copyTo(ox::Span<char> s) noexcept override {
|
||||||
oxAssert(s.size() >= sizeof(Wrap), "too small buffer");
|
oxAssert(s.size() >= sizeof(Wrap), "too small buffer");
|
||||||
@@ -43,60 +39,39 @@ class AnyPtrT {
|
|||||||
constexpr operator bool() const noexcept override {
|
constexpr operator bool() const noexcept override {
|
||||||
return data != nullptr;
|
return data != nullptr;
|
||||||
}
|
}
|
||||||
constexpr void free() noexcept override {
|
|
||||||
safeDelete(data);
|
|
||||||
data = {};
|
|
||||||
}
|
|
||||||
};
|
};
|
||||||
|
|
||||||
WrapBase *m_wrapPtr{};
|
WrapBase *m_wrapPtr{};
|
||||||
ox::Array<char, sizeof(Wrap<void*>)> m_wrapData;
|
ox::Array<char, sizeof(Wrap<void*>)> m_wrapData;
|
||||||
|
|
||||||
public:
|
public:
|
||||||
constexpr AnyPtrT() noexcept = default;
|
constexpr AnyPtr() noexcept = default;
|
||||||
|
|
||||||
template<typename T>
|
template<typename T>
|
||||||
constexpr AnyPtrT(T *ptr) noexcept {
|
constexpr AnyPtr(T *ptr) noexcept {
|
||||||
if (std::is_constant_evaluated()) {
|
if (std::is_constant_evaluated()) {
|
||||||
m_wrapPtr = new Wrap<T>(ptr);
|
m_wrapPtr = new Wrap(ptr);
|
||||||
} else {
|
} else {
|
||||||
m_wrapPtr = new(m_wrapData.data()) Wrap<T>(ptr);
|
m_wrapPtr = new(m_wrapData.data()) Wrap(ptr);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
constexpr AnyPtrT(AnyPtrT const&other) noexcept requires(!unique) {
|
constexpr AnyPtr(AnyPtr const&other) noexcept {
|
||||||
if (other) {
|
if (other) {
|
||||||
m_wrapPtr = other.m_wrapPtr->copyTo(m_wrapData);
|
m_wrapPtr = other.m_wrapPtr->copyTo(m_wrapData);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
constexpr AnyPtrT(AnyPtrT &&other) noexcept {
|
constexpr ~AnyPtr() noexcept {
|
||||||
if (other) {
|
|
||||||
m_wrapPtr = other.m_wrapPtr->copyTo(m_wrapData);
|
|
||||||
if (std::is_constant_evaluated()) {
|
|
||||||
ox::safeDelete(m_wrapPtr);
|
|
||||||
}
|
|
||||||
other.m_wrapPtr = {};
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
constexpr ~AnyPtrT() noexcept {
|
|
||||||
if constexpr(unique) {
|
|
||||||
free();
|
|
||||||
}
|
|
||||||
if (std::is_constant_evaluated()) {
|
if (std::is_constant_evaluated()) {
|
||||||
ox::safeDelete(m_wrapPtr);
|
ox::safeDelete(m_wrapPtr);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
template<typename T>
|
template<typename T>
|
||||||
constexpr AnyPtrT &operator=(T *ptr) noexcept {
|
constexpr AnyPtr &operator=(T *ptr) noexcept {
|
||||||
if constexpr(unique) {
|
|
||||||
free();
|
|
||||||
} else if (std::is_constant_evaluated()) {
|
|
||||||
ox::safeDelete(m_wrapPtr);
|
|
||||||
}
|
|
||||||
if (std::is_constant_evaluated()) {
|
if (std::is_constant_evaluated()) {
|
||||||
|
ox::safeDelete(m_wrapPtr);
|
||||||
m_wrapPtr = new Wrap(ptr);
|
m_wrapPtr = new Wrap(ptr);
|
||||||
} else {
|
} else {
|
||||||
m_wrapPtr = new(m_wrapData.data()) Wrap(ptr);
|
m_wrapPtr = new(m_wrapData.data()) Wrap(ptr);
|
||||||
@@ -104,33 +79,11 @@ class AnyPtrT {
|
|||||||
return *this;
|
return *this;
|
||||||
}
|
}
|
||||||
|
|
||||||
constexpr AnyPtrT &operator=(AnyPtrT const&ptr) noexcept requires(!unique) {
|
constexpr AnyPtr &operator=(AnyPtr const&ptr) noexcept {
|
||||||
if (this != &ptr) {
|
if (this != &ptr) {
|
||||||
if (std::is_constant_evaluated()) {
|
|
||||||
ox::safeDelete(m_wrapPtr);
|
|
||||||
}
|
|
||||||
if (ptr) {
|
if (ptr) {
|
||||||
m_wrapPtr = ptr.m_wrapPtr->copyTo(m_wrapData);
|
|
||||||
} else {
|
|
||||||
m_wrapPtr = nullptr;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return *this;
|
|
||||||
}
|
|
||||||
|
|
||||||
constexpr AnyPtrT &operator=(AnyPtrT &&ptr) noexcept {
|
|
||||||
if (this != &ptr) {
|
|
||||||
if constexpr(unique) {
|
|
||||||
free();
|
|
||||||
} else if (std::is_constant_evaluated()) {
|
|
||||||
ox::safeDelete(m_wrapPtr);
|
ox::safeDelete(m_wrapPtr);
|
||||||
}
|
|
||||||
if (ptr) {
|
|
||||||
m_wrapPtr = ptr.m_wrapPtr->copyTo(m_wrapData);
|
m_wrapPtr = ptr.m_wrapPtr->copyTo(m_wrapData);
|
||||||
if (std::is_constant_evaluated()) {
|
|
||||||
ox::safeDelete(ptr.m_wrapPtr);
|
|
||||||
ptr.m_wrapPtr = nullptr;
|
|
||||||
}
|
|
||||||
} else {
|
} else {
|
||||||
m_wrapPtr = nullptr;
|
m_wrapPtr = nullptr;
|
||||||
}
|
}
|
||||||
@@ -142,16 +95,6 @@ class AnyPtrT {
|
|||||||
return m_wrapPtr && *m_wrapPtr;
|
return m_wrapPtr && *m_wrapPtr;
|
||||||
}
|
}
|
||||||
|
|
||||||
constexpr void free() noexcept {
|
|
||||||
if (m_wrapPtr) {
|
|
||||||
m_wrapPtr->free();
|
|
||||||
}
|
|
||||||
if (std::is_constant_evaluated()) {
|
|
||||||
ox::safeDelete(m_wrapPtr);
|
|
||||||
}
|
|
||||||
m_wrapPtr = nullptr;
|
|
||||||
}
|
|
||||||
|
|
||||||
template<typename T>
|
template<typename T>
|
||||||
[[nodiscard]]
|
[[nodiscard]]
|
||||||
constexpr T *get() const noexcept {
|
constexpr T *get() const noexcept {
|
||||||
@@ -161,12 +104,6 @@ class AnyPtrT {
|
|||||||
return dynamic_cast<Wrap<T>*>(m_wrapPtr)->data;
|
return dynamic_cast<Wrap<T>*>(m_wrapPtr)->data;
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
using AnyPtr = detail::AnyPtrT<false>;
|
|
||||||
using UAnyPtr = detail::AnyPtrT<true>;
|
|
||||||
|
|
||||||
}
|
|
||||||
4
deps/ox/src/ox/std/array.hpp
vendored
4
deps/ox/src/ox/std/array.hpp
vendored
@@ -181,13 +181,13 @@ constexpr Array<T, ArraySize> &Array<T, ArraySize>::operator=(Array &&other) noe
|
|||||||
|
|
||||||
template<typename T, std::size_t ArraySize>
|
template<typename T, std::size_t ArraySize>
|
||||||
constexpr T &Array<T, ArraySize>::operator[](std::size_t i) noexcept {
|
constexpr T &Array<T, ArraySize>::operator[](std::size_t i) noexcept {
|
||||||
boundsCheck(__FILE__, __LINE__, i, size(), "Array access overflow");
|
ox::primitiveAssert(__FILE__, __LINE__, i < size(), "Array access overflow");
|
||||||
return m_items[i];
|
return m_items[i];
|
||||||
}
|
}
|
||||||
|
|
||||||
template<typename T, std::size_t ArraySize>
|
template<typename T, std::size_t ArraySize>
|
||||||
constexpr const T &Array<T, ArraySize>::operator[](std::size_t i) const noexcept {
|
constexpr const T &Array<T, ArraySize>::operator[](std::size_t i) const noexcept {
|
||||||
boundsCheck(__FILE__, __LINE__, i, size(), "Array access overflow");
|
ox::primitiveAssert(__FILE__, __LINE__, i < size(), "Array access overflow");
|
||||||
return m_items[i];
|
return m_items[i];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
35
deps/ox/src/ox/std/assert.cpp
vendored
35
deps/ox/src/ox/std/assert.cpp
vendored
@@ -7,7 +7,6 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
#include "fmt.hpp"
|
#include "fmt.hpp"
|
||||||
#include "realstd.hpp"
|
|
||||||
#include "stacktrace.hpp"
|
#include "stacktrace.hpp"
|
||||||
#include "trace.hpp"
|
#include "trace.hpp"
|
||||||
|
|
||||||
@@ -15,14 +14,14 @@
|
|||||||
|
|
||||||
namespace ox {
|
namespace ox {
|
||||||
|
|
||||||
void panic(StringViewCR file, int const line, StringViewCR panicMsg, Error const&err) noexcept {
|
void panic(StringViewCR file, int line, StringViewCR panicMsg, const Error &err) noexcept {
|
||||||
oxErrf("\033[31;1;1mPANIC:\033[0m [{}:{}]: {}\n", file, line, panicMsg);
|
oxErrf("\033[31;1;1mPANIC:\033[0m [{}:{}]: {}\n", file, line, panicMsg);
|
||||||
if (err.msg) {
|
if (err.msg) {
|
||||||
oxErrf("\tError Message:\t{}\n", err.msg);
|
oxErrf("\tError Message:\t{}\n", err.msg);
|
||||||
}
|
}
|
||||||
oxErrf("\tError Code:\t{}\n", static_cast<ErrorCode>(err));
|
oxErrf("\tError Code:\t{}\n", static_cast<ErrorCode>(err));
|
||||||
if (err.src.file_name() != nullptr) {
|
if (err.file != nullptr) {
|
||||||
oxErrf("\tError Location:\t{}:{}\n", err.src.file_name(), err.src.line());
|
oxErrf("\tError Location:\t{}:{}\n", err.file, err.line);
|
||||||
}
|
}
|
||||||
#ifdef OX_USE_STDLIB
|
#ifdef OX_USE_STDLIB
|
||||||
printStackTrace(2);
|
printStackTrace(2);
|
||||||
@@ -33,19 +32,16 @@ void panic(StringViewCR file, int const line, StringViewCR panicMsg, Error const
|
|||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
void panic(const char *file, int const line, char const*panicMsg, Error const&err) noexcept {
|
void panic(const char *file, int line, const char *panicMsg, const Error &err) noexcept {
|
||||||
panic(StringView{file}, line, StringView{panicMsg}, err);
|
panic(StringView{file}, line, StringView{panicMsg}, err);
|
||||||
}
|
}
|
||||||
|
|
||||||
void assertFailFuncRuntime(
|
void assertFailFuncRuntime(StringViewCR file, int line, StringViewCR assertTxt, StringViewCR msg) noexcept {
|
||||||
StringViewCR file,
|
|
||||||
int const line,
|
|
||||||
StringViewCR assertTxt,
|
|
||||||
StringViewCR msg) noexcept {
|
|
||||||
#ifdef OX_USE_STDLIB
|
#ifdef OX_USE_STDLIB
|
||||||
auto const st = genStackTrace(2);
|
auto output = sfmt("\n\033[31;1;1mASSERT FAILURE:\033[0m [{}:{}]: {}\n", file, line, msg);
|
||||||
oxTracef("assert", "Failed assert: {} ({}) [{}:{}]:\n{}", msg, assertTxt, file, line, st);
|
output += genStackTrace(2);
|
||||||
abort();
|
oxTracef("assert", "Failed assert: {} ({}) [{}:{}]", msg, assertTxt, file, line);
|
||||||
|
std::abort();
|
||||||
#else
|
#else
|
||||||
oxErrf("\n\033[31;1;1mASSERT FAILURE:\033[0m [{}:{}]: {}\n", file, line, msg);
|
oxErrf("\n\033[31;1;1mASSERT FAILURE:\033[0m [{}:{}]: {}\n", file, line, msg);
|
||||||
oxTracef("assert", "Failed assert: {} ({}) [{}:{}]", msg, assertTxt, file, line);
|
oxTracef("assert", "Failed assert: {} ({}) [{}:{}]", msg, assertTxt, file, line);
|
||||||
@@ -53,25 +49,20 @@ void assertFailFuncRuntime(
|
|||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
void assertFailFuncRuntime(
|
void assertFailFuncRuntime(StringViewCR file, int line, [[maybe_unused]] const Error &err, StringViewCR, StringViewCR assertMsg) noexcept {
|
||||||
StringViewCR file,
|
|
||||||
int const line,
|
|
||||||
[[maybe_unused]] Error const&err,
|
|
||||||
StringViewCR,
|
|
||||||
StringViewCR assertMsg) noexcept {
|
|
||||||
#if defined(OX_USE_STDLIB)
|
#if defined(OX_USE_STDLIB)
|
||||||
auto msg = sfmt("\n\033[31;1;1mASSERT FAILURE:\033[0m [{}:{}]: {}\n", file, line, assertMsg);
|
auto msg = sfmt("\n\033[31;1;1mASSERT FAILURE:\033[0m [{}:{}]: {}\n", file, line, assertMsg);
|
||||||
if (err.msg) {
|
if (err.msg) {
|
||||||
msg += sfmt("\tError Message:\t{}\n", err.msg);
|
msg += sfmt("\tError Message:\t{}\n", err.msg);
|
||||||
}
|
}
|
||||||
msg += sfmt("\tError Code:\t{}\n", static_cast<ErrorCode>(err));
|
msg += sfmt("\tError Code:\t{}\n", static_cast<ErrorCode>(err));
|
||||||
if (err.src.file_name() != nullptr) {
|
if (err.file != nullptr) {
|
||||||
msg += sfmt("\tError Location:\t{}:{}\n", err.src.file_name(), err.src.line());
|
msg += sfmt("\tError Location:\t{}:{}\n", err.file, err.line);
|
||||||
}
|
}
|
||||||
msg += genStackTrace(2);
|
msg += genStackTrace(2);
|
||||||
oxErr(msg);
|
oxErr(msg);
|
||||||
oxTracef("assert", "Failed assert: {} [{}:{}]", assertMsg, file, line);
|
oxTracef("assert", "Failed assert: {} [{}:{}]", assertMsg, file, line);
|
||||||
abort();
|
std::abort();
|
||||||
#else
|
#else
|
||||||
constexprPanic(file, line, assertMsg);
|
constexprPanic(file, line, assertMsg);
|
||||||
#endif
|
#endif
|
||||||
|
|||||||
43
deps/ox/src/ox/std/assert.hpp
vendored
43
deps/ox/src/ox/std/assert.hpp
vendored
@@ -22,15 +22,9 @@
|
|||||||
|
|
||||||
namespace ox {
|
namespace ox {
|
||||||
|
|
||||||
[[noreturn]]
|
void panic(StringViewCR file, int line, StringViewCR panicMsg, const Error &err = ox::Error(0)) noexcept;
|
||||||
void panic(StringViewCR file, int line, StringViewCR panicMsg, Error const&err = {}) noexcept;
|
|
||||||
|
|
||||||
[[noreturn]]
|
constexpr void constexprPanic(StringViewCR file, int line, StringViewCR panicMsg, const Error &err = ox::Error(0)) noexcept {
|
||||||
constexpr void constexprPanic(
|
|
||||||
StringViewCR file,
|
|
||||||
int const line,
|
|
||||||
StringViewCR panicMsg,
|
|
||||||
Error const&err = {}) noexcept {
|
|
||||||
if (!std::is_constant_evaluated()) {
|
if (!std::is_constant_evaluated()) {
|
||||||
panic(file, line, panicMsg, err);
|
panic(file, line, panicMsg, err);
|
||||||
} else {
|
} else {
|
||||||
@@ -38,24 +32,10 @@ constexpr void constexprPanic(
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void assertFailFuncRuntime(
|
void assertFailFuncRuntime(StringViewCR file, int line, StringViewCR assertTxt, StringViewCR msg) noexcept;
|
||||||
StringViewCR file,
|
void assertFailFuncRuntime(StringViewCR file, int line, const Error &err, StringViewCR, StringViewCR assertMsg) noexcept;
|
||||||
int line,
|
|
||||||
StringViewCR assertTxt,
|
|
||||||
StringViewCR msg) noexcept;
|
|
||||||
void assertFailFuncRuntime(
|
|
||||||
StringViewCR file,
|
|
||||||
int line,
|
|
||||||
Error const&err,
|
|
||||||
StringViewCR,
|
|
||||||
StringViewCR assertMsg) noexcept;
|
|
||||||
|
|
||||||
constexpr void assertFunc(
|
constexpr void assertFunc(StringViewCR file, int line, bool pass, [[maybe_unused]]StringViewCR assertTxt, [[maybe_unused]]StringViewCR msg) noexcept {
|
||||||
StringViewCR file,
|
|
||||||
int const line,
|
|
||||||
bool const pass,
|
|
||||||
[[maybe_unused]]StringViewCR assertTxt,
|
|
||||||
[[maybe_unused]]StringViewCR msg) noexcept {
|
|
||||||
if (!pass) {
|
if (!pass) {
|
||||||
if (!std::is_constant_evaluated()) {
|
if (!std::is_constant_evaluated()) {
|
||||||
assertFailFuncRuntime(file, line, assertTxt, msg);
|
assertFailFuncRuntime(file, line, assertTxt, msg);
|
||||||
@@ -65,12 +45,7 @@ constexpr void assertFunc(
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
constexpr void assertFunc(
|
constexpr void assertFunc(StringViewCR file, int line, const Error &err, StringViewCR, StringViewCR assertMsg) noexcept {
|
||||||
StringViewCR file,
|
|
||||||
int const line,
|
|
||||||
Error const&err,
|
|
||||||
StringViewCR,
|
|
||||||
StringViewCR assertMsg) noexcept {
|
|
||||||
if (err) {
|
if (err) {
|
||||||
if (!std::is_constant_evaluated()) {
|
if (!std::is_constant_evaluated()) {
|
||||||
assertFailFuncRuntime(file, line, err, {}, assertMsg);
|
assertFailFuncRuntime(file, line, err, {}, assertMsg);
|
||||||
@@ -80,11 +55,7 @@ constexpr void assertFunc(
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
constexpr void expect(
|
constexpr void expect(StringViewCR file, int line, const auto &actual, const auto &expected) noexcept {
|
||||||
StringViewCR file,
|
|
||||||
int const line,
|
|
||||||
auto const&actual,
|
|
||||||
auto const&expected) noexcept {
|
|
||||||
if (actual != expected) {
|
if (actual != expected) {
|
||||||
if (!std::is_constant_evaluated()) {
|
if (!std::is_constant_evaluated()) {
|
||||||
#if defined(OX_USE_STDLIB)
|
#if defined(OX_USE_STDLIB)
|
||||||
|
|||||||
6
deps/ox/src/ox/std/defines.hpp
vendored
6
deps/ox/src/ox/std/defines.hpp
vendored
@@ -41,12 +41,6 @@ constexpr auto Debug = true;
|
|||||||
constexpr auto Debug = false;
|
constexpr auto Debug = false;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if defined(OX_CHECK_BOUNDS)
|
|
||||||
constexpr auto CheckBounds = true;
|
|
||||||
#else
|
|
||||||
constexpr auto CheckBounds = Debug;
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#if defined(NDEBUG)
|
#if defined(NDEBUG)
|
||||||
constexpr auto NDebug = true;
|
constexpr auto NDebug = true;
|
||||||
#else
|
#else
|
||||||
|
|||||||
60
deps/ox/src/ox/std/error.hpp
vendored
60
deps/ox/src/ox/std/error.hpp
vendored
@@ -36,16 +36,28 @@ using ErrorCode = uint16_t;
|
|||||||
|
|
||||||
|
|
||||||
struct [[nodiscard]] Error {
|
struct [[nodiscard]] Error {
|
||||||
std::source_location src;
|
|
||||||
ox::CString msg = nullptr;
|
ox::CString msg = nullptr;
|
||||||
|
ox::CString file = nullptr;
|
||||||
|
uint16_t line = 0;
|
||||||
ErrorCode errCode = 0;
|
ErrorCode errCode = 0;
|
||||||
|
|
||||||
constexpr Error() noexcept = default;
|
constexpr Error() noexcept = default;
|
||||||
|
|
||||||
|
explicit constexpr Error(
|
||||||
|
ox::CString file,
|
||||||
|
uint32_t const line,
|
||||||
|
ErrorCode const errCode,
|
||||||
|
ox::CString msg = nullptr) noexcept:
|
||||||
|
msg{msg},
|
||||||
|
file{file},
|
||||||
|
line{static_cast<uint16_t>(line)},
|
||||||
|
errCode{errCode} {}
|
||||||
|
|
||||||
explicit constexpr Error(
|
explicit constexpr Error(
|
||||||
ErrorCode const errCode,
|
ErrorCode const errCode,
|
||||||
std::source_location const&src = std::source_location::current()) noexcept:
|
std::source_location const&src = std::source_location::current()) noexcept:
|
||||||
src{src},
|
file{src.file_name()},
|
||||||
|
line{static_cast<uint16_t>(src.line())},
|
||||||
errCode{errCode}
|
errCode{errCode}
|
||||||
{}
|
{}
|
||||||
|
|
||||||
@@ -53,8 +65,9 @@ struct [[nodiscard]] Error {
|
|||||||
ErrorCode const errCode,
|
ErrorCode const errCode,
|
||||||
ox::CString msg,
|
ox::CString msg,
|
||||||
std::source_location const&src = std::source_location::current()) noexcept:
|
std::source_location const&src = std::source_location::current()) noexcept:
|
||||||
src{src},
|
|
||||||
msg{msg},
|
msg{msg},
|
||||||
|
file{src.file_name()},
|
||||||
|
line{static_cast<uint16_t>(src.line())},
|
||||||
errCode{errCode}
|
errCode{errCode}
|
||||||
{}
|
{}
|
||||||
|
|
||||||
@@ -76,31 +89,42 @@ constexpr auto toStr(Error const&err) noexcept {
|
|||||||
}
|
}
|
||||||
|
|
||||||
struct Exception: public std::exception {
|
struct Exception: public std::exception {
|
||||||
std::source_location src;
|
|
||||||
ox::CString msg = nullptr;
|
ox::CString msg = nullptr;
|
||||||
|
ox::CString file = nullptr;
|
||||||
|
uint16_t line = 0;
|
||||||
ErrorCode errCode = 0;
|
ErrorCode errCode = 0;
|
||||||
|
|
||||||
explicit Exception(
|
explicit inline Exception(ox::CString file, uint32_t line, ErrorCode errCode, char const*msg = "") noexcept {
|
||||||
|
this->file = file;
|
||||||
|
this->line = static_cast<uint16_t>(line);
|
||||||
|
this->msg = msg;
|
||||||
|
this->errCode = errCode;
|
||||||
|
}
|
||||||
|
|
||||||
|
explicit inline Exception(
|
||||||
ErrorCode const errCode,
|
ErrorCode const errCode,
|
||||||
std::source_location const&src = std::source_location::current()) noexcept:
|
std::source_location const&src = std::source_location::current()) noexcept:
|
||||||
src{src},
|
file{src.file_name()},
|
||||||
|
line{static_cast<uint16_t>(src.line())},
|
||||||
errCode{errCode} {}
|
errCode{errCode} {}
|
||||||
|
|
||||||
explicit Exception(
|
explicit inline Exception(
|
||||||
ErrorCode const errCode,
|
ErrorCode const errCode,
|
||||||
ox::CString msg,
|
ox::CString msg,
|
||||||
std::source_location const&src = std::source_location::current()) noexcept:
|
std::source_location const&src = std::source_location::current()) noexcept:
|
||||||
src{src},
|
|
||||||
msg{msg},
|
msg{msg},
|
||||||
|
file{src.file_name()},
|
||||||
|
line{static_cast<uint16_t>(src.line())},
|
||||||
errCode{errCode} {}
|
errCode{errCode} {}
|
||||||
|
|
||||||
explicit Exception(Error const&err) noexcept:
|
explicit inline Exception(Error const&err) noexcept:
|
||||||
src{err.src},
|
|
||||||
msg{err.msg ? err.msg : ""},
|
msg{err.msg ? err.msg : ""},
|
||||||
|
file{err.file},
|
||||||
|
line{err.line},
|
||||||
errCode{err.errCode} {}
|
errCode{err.errCode} {}
|
||||||
|
|
||||||
constexpr Error toError() const noexcept {
|
constexpr Error toError() const noexcept {
|
||||||
return Error(errCode, msg, src);
|
return Error(file, line, errCode, msg);
|
||||||
}
|
}
|
||||||
|
|
||||||
[[nodiscard]]
|
[[nodiscard]]
|
||||||
@@ -109,7 +133,6 @@ struct Exception: public std::exception {
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
[[noreturn]]
|
|
||||||
void panic(char const*file, int line, char const*panicMsg, Error const&err) noexcept;
|
void panic(char const*file, int line, char const*panicMsg, Error const&err) noexcept;
|
||||||
|
|
||||||
template<typename T>
|
template<typename T>
|
||||||
@@ -330,17 +353,4 @@ constexpr void primitiveAssert(char const*file, int line, bool pass, char const*
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
constexpr void boundsCheck(
|
|
||||||
char const*file,
|
|
||||||
int const line,
|
|
||||||
size_t const i,
|
|
||||||
size_t const sz,
|
|
||||||
char const*msg) noexcept {
|
|
||||||
if constexpr(defines::CheckBounds) {
|
|
||||||
if (i >= sz) [[unlikely]] {
|
|
||||||
panic(file, line, msg, ox::Error{1});
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
6
deps/ox/src/ox/std/iterator.hpp
vendored
6
deps/ox/src/ox/std/iterator.hpp
vendored
@@ -133,17 +133,17 @@ struct SpanIterator {
|
|||||||
}
|
}
|
||||||
|
|
||||||
constexpr PtrType operator->() const noexcept {
|
constexpr PtrType operator->() const noexcept {
|
||||||
boundsCheck(__FILE__, __LINE__, m_offset, m_max, "SpanIterator access overflow");
|
ox::primitiveAssert(__FILE__, __LINE__, m_offset < m_max, "SpanIterator access overflow");
|
||||||
return &m_t[m_offset];
|
return &m_t[m_offset];
|
||||||
}
|
}
|
||||||
|
|
||||||
constexpr RefType operator*() const noexcept {
|
constexpr RefType operator*() const noexcept {
|
||||||
boundsCheck(__FILE__, __LINE__, m_offset, m_max, "SpanIterator access overflow");
|
ox::primitiveAssert(__FILE__, __LINE__, m_offset < m_max, "SpanIterator access overflow");
|
||||||
return m_t[m_offset];
|
return m_t[m_offset];
|
||||||
}
|
}
|
||||||
|
|
||||||
constexpr RefType operator[](std::size_t s) const noexcept {
|
constexpr RefType operator[](std::size_t s) const noexcept {
|
||||||
boundsCheck(__FILE__, __LINE__, s, m_max, "SpanIterator access overflow");
|
ox::primitiveAssert(__FILE__, __LINE__, s < m_max, "SpanIterator access overflow");
|
||||||
return m_t[s];
|
return m_t[s];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
1
deps/ox/src/ox/std/reader.hpp
vendored
1
deps/ox/src/ox/std/reader.hpp
vendored
@@ -31,6 +31,7 @@ concept Reader_c = requires(T v) {
|
|||||||
class Reader_v {
|
class Reader_v {
|
||||||
public:
|
public:
|
||||||
virtual constexpr ~Reader_v() noexcept = default;
|
virtual constexpr ~Reader_v() noexcept = default;
|
||||||
|
[[nodiscard]]
|
||||||
virtual constexpr ox::Result<char> peek() const noexcept = 0;
|
virtual constexpr ox::Result<char> peek() const noexcept = 0;
|
||||||
virtual constexpr ox::Result<std::size_t> read(char*, std::size_t) noexcept = 0;
|
virtual constexpr ox::Result<std::size_t> read(char*, std::size_t) noexcept = 0;
|
||||||
virtual constexpr ox::Result<std::size_t> tellg() noexcept = 0;
|
virtual constexpr ox::Result<std::size_t> tellg() noexcept = 0;
|
||||||
|
|||||||
9
deps/ox/src/ox/std/realstd.hpp
vendored
9
deps/ox/src/ox/std/realstd.hpp
vendored
@@ -13,12 +13,3 @@
|
|||||||
#else
|
#else
|
||||||
#define assert(e) while (!(e));
|
#define assert(e) while (!(e));
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if __has_include(<cstdlib>)
|
|
||||||
#include <cstdlib>
|
|
||||||
#else
|
|
||||||
extern "C" {
|
|
||||||
[[noreturn]]
|
|
||||||
void abort();
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
59
deps/ox/src/ox/std/smallmap.hpp
vendored
59
deps/ox/src/ox/std/smallmap.hpp
vendored
@@ -62,9 +62,6 @@ class SmallMap {
|
|||||||
[[nodiscard]]
|
[[nodiscard]]
|
||||||
constexpr Vector<K> keys() const noexcept;
|
constexpr Vector<K> keys() const noexcept;
|
||||||
|
|
||||||
[[nodiscard]]
|
|
||||||
constexpr Vector<T> values() const noexcept;
|
|
||||||
|
|
||||||
[[nodiscard]]
|
[[nodiscard]]
|
||||||
constexpr K const&key(size_t i) const noexcept;
|
constexpr K const&key(size_t i) const noexcept;
|
||||||
|
|
||||||
@@ -85,22 +82,14 @@ class SmallMap {
|
|||||||
return m_pairs;
|
return m_pairs;
|
||||||
}
|
}
|
||||||
|
|
||||||
[[nodiscard]]
|
|
||||||
constexpr ox::Span<Pair> pairs() noexcept {
|
|
||||||
return m_pairs;
|
|
||||||
}
|
|
||||||
|
|
||||||
constexpr void clear();
|
constexpr void clear();
|
||||||
|
|
||||||
private:
|
private:
|
||||||
template<typename KK>
|
template<typename KK>
|
||||||
constexpr Pair const*access(PairVector const&pairs, KK const&key, bool &isNew) const;
|
constexpr Pair const&access(PairVector const&pairs, KK const&key, bool &isNew) const;
|
||||||
|
|
||||||
template<typename KK>
|
template<typename KK>
|
||||||
constexpr Pair *access(PairVector &pairs, KK const&key, bool &isNew);
|
constexpr Pair &access(PairVector &pairs, KK const&key, bool &isNew);
|
||||||
|
|
||||||
template<typename KK>
|
|
||||||
constexpr Pair *accessNoCreate(PairVector &pairs, KK const&key);
|
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -140,7 +129,7 @@ constexpr SmallMap<K, T, SmallSz> &SmallMap<K, T, SmallSz>::operator=(SmallMap<K
|
|||||||
template<typename K, typename T, size_t SmallSz>
|
template<typename K, typename T, size_t SmallSz>
|
||||||
constexpr T &SmallMap<K, T, SmallSz>::operator[](MaybeView_t<K> const&k) {
|
constexpr T &SmallMap<K, T, SmallSz>::operator[](MaybeView_t<K> const&k) {
|
||||||
bool isNew{};
|
bool isNew{};
|
||||||
auto p = access(m_pairs, k, isNew);
|
auto p = &access(m_pairs, k, isNew);
|
||||||
if (isNew) {
|
if (isNew) {
|
||||||
p->key = k;
|
p->key = k;
|
||||||
}
|
}
|
||||||
@@ -149,7 +138,7 @@ constexpr T &SmallMap<K, T, SmallSz>::operator[](MaybeView_t<K> const&k) {
|
|||||||
|
|
||||||
template<typename K, typename T, size_t SmallSz>
|
template<typename K, typename T, size_t SmallSz>
|
||||||
constexpr Result<T*> SmallMap<K, T, SmallSz>::at(MaybeView_t<K> const&k) noexcept {
|
constexpr Result<T*> SmallMap<K, T, SmallSz>::at(MaybeView_t<K> const&k) noexcept {
|
||||||
auto const p = accessNoCreate(m_pairs, k);
|
auto p = access(m_pairs, k);
|
||||||
if (!p) {
|
if (!p) {
|
||||||
return {nullptr, ox::Error(1, "value not found for given key")};
|
return {nullptr, ox::Error(1, "value not found for given key")};
|
||||||
}
|
}
|
||||||
@@ -158,8 +147,7 @@ constexpr Result<T*> SmallMap<K, T, SmallSz>::at(MaybeView_t<K> const&k) noexcep
|
|||||||
|
|
||||||
template<typename K, typename T, size_t SmallSz>
|
template<typename K, typename T, size_t SmallSz>
|
||||||
constexpr Result<const T*> SmallMap<K, T, SmallSz>::at(MaybeView_t<K> const&k) const noexcept {
|
constexpr Result<const T*> SmallMap<K, T, SmallSz>::at(MaybeView_t<K> const&k) const noexcept {
|
||||||
bool isNew{};
|
auto p = access(m_pairs, k);
|
||||||
auto p = access(m_pairs, k, isNew);
|
|
||||||
if (!p) {
|
if (!p) {
|
||||||
return {nullptr, ox::Error(1, "value not found for given key")};
|
return {nullptr, ox::Error(1, "value not found for given key")};
|
||||||
}
|
}
|
||||||
@@ -180,8 +168,7 @@ constexpr void SmallMap<K, T, SmallSz>::erase(MaybeView_t<K> const&k) {
|
|||||||
|
|
||||||
template<typename K, typename T, size_t SmallSz>
|
template<typename K, typename T, size_t SmallSz>
|
||||||
constexpr bool SmallMap<K, T, SmallSz>::contains(MaybeView_t<K> const&k) const noexcept {
|
constexpr bool SmallMap<K, T, SmallSz>::contains(MaybeView_t<K> const&k) const noexcept {
|
||||||
bool isNew{};
|
return access(m_pairs, k) != nullptr;
|
||||||
return access(m_pairs, k, isNew) != nullptr;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
template<typename K, typename T, size_t SmallSz>
|
template<typename K, typename T, size_t SmallSz>
|
||||||
@@ -199,16 +186,6 @@ constexpr Vector<K> SmallMap<K, T, SmallSz>::keys() const noexcept {
|
|||||||
return keys;
|
return keys;
|
||||||
}
|
}
|
||||||
|
|
||||||
template<typename K, typename T, size_t SmallSz>
|
|
||||||
constexpr Vector<T> SmallMap<K, T, SmallSz>::values() const noexcept {
|
|
||||||
ox::Vector<T> keys;
|
|
||||||
keys.reserve(m_pairs.size());
|
|
||||||
for (auto const&p : m_pairs) {
|
|
||||||
keys.emplace_back(p.key);
|
|
||||||
}
|
|
||||||
return keys;
|
|
||||||
}
|
|
||||||
|
|
||||||
template<typename K, typename T, size_t SmallSz>
|
template<typename K, typename T, size_t SmallSz>
|
||||||
constexpr K const&SmallMap<K, T, SmallSz>::key(size_t i) const noexcept {
|
constexpr K const&SmallMap<K, T, SmallSz>::key(size_t i) const noexcept {
|
||||||
return m_pairs[i].key;
|
return m_pairs[i].key;
|
||||||
@@ -241,42 +218,30 @@ constexpr void SmallMap<K, T, SmallSz>::clear() {
|
|||||||
|
|
||||||
template<typename K, typename T, size_t SmallSz>
|
template<typename K, typename T, size_t SmallSz>
|
||||||
template<typename KK>
|
template<typename KK>
|
||||||
constexpr typename SmallMap<K, T, SmallSz>::Pair const*SmallMap<K, T, SmallSz>::access(
|
constexpr typename SmallMap<K, T, SmallSz>::Pair const&SmallMap<K, T, SmallSz>::access(
|
||||||
PairVector const&pairs, KK const&k, bool &isNew) const {
|
PairVector const&pairs, KK const&k, bool &isNew) const {
|
||||||
for (auto const&p : pairs) {
|
for (auto const&p : pairs) {
|
||||||
if (p.key == k) {
|
if (p.key == k) {
|
||||||
isNew = false;
|
isNew = false;
|
||||||
return &p;
|
return p;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
isNew = true;
|
isNew = true;
|
||||||
return nullptr;
|
return pairs.emplace_back();
|
||||||
}
|
}
|
||||||
|
|
||||||
template<typename K, typename T, size_t SmallSz>
|
template<typename K, typename T, size_t SmallSz>
|
||||||
template<typename KK>
|
template<typename KK>
|
||||||
constexpr typename SmallMap<K, T, SmallSz>::Pair *SmallMap<K, T, SmallSz>::access(
|
constexpr typename SmallMap<K, T, SmallSz>::Pair &SmallMap<K, T, SmallSz>::access(
|
||||||
PairVector &pairs, KK const&k, bool &isNew) {
|
PairVector &pairs, KK const&k, bool &isNew) {
|
||||||
for (auto &p : pairs) {
|
for (auto &p : pairs) {
|
||||||
if (p.key == k) {
|
if (p.key == k) {
|
||||||
isNew = false;
|
isNew = false;
|
||||||
return &p;
|
return p;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
isNew = true;
|
isNew = true;
|
||||||
return &pairs.emplace_back();
|
return pairs.emplace_back();
|
||||||
}
|
|
||||||
|
|
||||||
template<typename K, typename T, size_t SmallSz>
|
|
||||||
template<typename KK>
|
|
||||||
constexpr typename SmallMap<K, T, SmallSz>::Pair *SmallMap<K, T, SmallSz>::accessNoCreate(
|
|
||||||
PairVector &pairs, KK const&k) {
|
|
||||||
for (auto &p : pairs) {
|
|
||||||
if (p.key == k) {
|
|
||||||
return &p;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return nullptr;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
template<typename T, typename K, typename V, size_t SmallSz>
|
template<typename T, typename K, typename V, size_t SmallSz>
|
||||||
|
|||||||
28
deps/ox/src/ox/std/span.hpp
vendored
28
deps/ox/src/ox/std/span.hpp
vendored
@@ -14,7 +14,7 @@
|
|||||||
#include "iterator.hpp"
|
#include "iterator.hpp"
|
||||||
#include "vector.hpp"
|
#include "vector.hpp"
|
||||||
|
|
||||||
OX_ALLOW_UNSAFE_BUFFERS_BEGIN
|
OX_CLANG_NOWARN_BEGIN(-Wunsafe-buffer-usage)
|
||||||
|
|
||||||
namespace ox {
|
namespace ox {
|
||||||
|
|
||||||
@@ -129,22 +129,22 @@ class Span {
|
|||||||
}
|
}
|
||||||
|
|
||||||
constexpr T &operator[](std::size_t i) noexcept {
|
constexpr T &operator[](std::size_t i) noexcept {
|
||||||
boundsCheck(__FILE__, __LINE__, i, size(), "Span access overflow");
|
ox::primitiveAssert(__FILE__, __LINE__, i < size(), "Span access overflow");
|
||||||
return m_items[i];
|
return m_items[i];
|
||||||
}
|
}
|
||||||
|
|
||||||
constexpr T const&operator[](std::size_t i) const noexcept {
|
constexpr const T &operator[](std::size_t i) const noexcept {
|
||||||
boundsCheck(__FILE__, __LINE__, i, size(), "Span access overflow");
|
ox::primitiveAssert(__FILE__, __LINE__, i < size(), "Span access overflow");
|
||||||
return m_items[i];
|
return m_items[i];
|
||||||
}
|
}
|
||||||
|
|
||||||
constexpr Span operator+(size_t i) const noexcept {
|
constexpr Span operator+(size_t i) const noexcept {
|
||||||
boundsCheck(__FILE__, __LINE__, i, size(), "Span access overflow");
|
ox::primitiveAssert(__FILE__, __LINE__, i < size(), "Span access overflow");
|
||||||
return {m_items + i, m_size - i};
|
return {m_items + i, m_size - i};
|
||||||
}
|
}
|
||||||
|
|
||||||
constexpr Span operator+=(size_t i) noexcept {
|
constexpr Span operator+=(size_t i) noexcept {
|
||||||
boundsCheck(__FILE__, __LINE__, i, size(), "Span access overflow");
|
ox::primitiveAssert(__FILE__, __LINE__, i < size(), "Span access overflow");
|
||||||
m_items += i;
|
m_items += i;
|
||||||
m_size -= i;
|
m_size -= i;
|
||||||
return *this;
|
return *this;
|
||||||
@@ -168,20 +168,8 @@ class Span {
|
|||||||
};
|
};
|
||||||
|
|
||||||
template<typename T>
|
template<typename T>
|
||||||
using SpanView = Span<T const>;
|
using SpanView = Span<const T>;
|
||||||
|
|
||||||
template<typename T>
|
|
||||||
constexpr void spancpy(ox::Span<T> const dst, ox::SpanView<T> const src) noexcept {
|
|
||||||
auto const sz = ox::min(dst.size(), src.size());
|
|
||||||
if (std::is_constant_evaluated() || std::is_trivially_copyable_v<T>) {
|
|
||||||
for (size_t i{}; i < sz; ++i) {
|
|
||||||
dst.data()[i] = src.data()[i];
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
memcpy(dst.data(), src.data(), sz * sizeof(T));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
OX_ALLOW_UNSAFE_BUFFERS_END
|
OX_CLANG_NOWARN_END
|
||||||
|
|||||||
4
deps/ox/src/ox/std/string.hpp
vendored
4
deps/ox/src/ox/std/string.hpp
vendored
@@ -171,7 +171,7 @@ class BasicString {
|
|||||||
|
|
||||||
constexpr bool operator>=(BasicString const&other) const noexcept;
|
constexpr bool operator>=(BasicString const&other) const noexcept;
|
||||||
|
|
||||||
constexpr char const&operator[](std::size_t i) const noexcept;
|
constexpr char operator[](std::size_t i) const noexcept;
|
||||||
|
|
||||||
constexpr char &operator[](std::size_t i) noexcept;
|
constexpr char &operator[](std::size_t i) noexcept;
|
||||||
|
|
||||||
@@ -490,7 +490,7 @@ constexpr bool BasicString<SmallStringSize_v>::operator>=(BasicString const&othe
|
|||||||
}
|
}
|
||||||
|
|
||||||
template<std::size_t SmallStringSize_v>
|
template<std::size_t SmallStringSize_v>
|
||||||
constexpr char const&BasicString<SmallStringSize_v>::operator[](std::size_t i) const noexcept {
|
constexpr char BasicString<SmallStringSize_v>::operator[](std::size_t i) const noexcept {
|
||||||
return m_buff[i];
|
return m_buff[i];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
2
deps/ox/src/ox/std/test/CMakeLists.txt
vendored
2
deps/ox/src/ox/std/test/CMakeLists.txt
vendored
@@ -17,8 +17,6 @@ add_test("[ox/std] String" ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/StdTest "String")
|
|||||||
add_test("[ox/std] SmallMap" ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/StdTest "SmallMap")
|
add_test("[ox/std] SmallMap" ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/StdTest "SmallMap")
|
||||||
add_test("[ox/std] SmallMap2" ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/StdTest "SmallMap2")
|
add_test("[ox/std] SmallMap2" ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/StdTest "SmallMap2")
|
||||||
add_test("[ox/std] Vector" ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/StdTest "Vector")
|
add_test("[ox/std] Vector" ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/StdTest "Vector")
|
||||||
add_test("[ox/std] Vector::shrink_to_fit" ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/StdTest "Vector::shrink_to_fit")
|
|
||||||
add_test("[ox/std] findIdx" ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/StdTest "findIdx")
|
|
||||||
add_test("[ox/std] HashMap" ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/StdTest "HashMap")
|
add_test("[ox/std] HashMap" ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/StdTest "HashMap")
|
||||||
add_test("[ox/std] HeapMgr" ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/StdTest malloc)
|
add_test("[ox/std] HeapMgr" ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/StdTest malloc)
|
||||||
add_test("[ox/std] Serialize-Int" ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/StdTest "Serialize-Int")
|
add_test("[ox/std] Serialize-Int" ${CMAKE_RUNTIME_OUTPUT_DIRECTORY}/StdTest "Serialize-Int")
|
||||||
|
|||||||
57
deps/ox/src/ox/std/test/tests.cpp
vendored
57
deps/ox/src/ox/std/test/tests.cpp
vendored
@@ -237,50 +237,6 @@ OX_CLANG_NOWARN_END
|
|||||||
return ox::Error(0);
|
return ox::Error(0);
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
{
|
|
||||||
"Vector::shrink_to_fit",
|
|
||||||
[] {
|
|
||||||
{
|
|
||||||
ox::Vector<ox::IString<8>> v;
|
|
||||||
v.reserve(50);
|
|
||||||
v.emplace_back("asdf");
|
|
||||||
v.emplace_back("aoeu");
|
|
||||||
auto const origData = v.data();
|
|
||||||
v.shrink_to_fit();
|
|
||||||
oxExpect(v[0], "asdf");
|
|
||||||
oxExpect(v[1], "aoeu");
|
|
||||||
oxExpect(v.capacity(), 2u);
|
|
||||||
oxAssert(origData != v.data(), "shrink_to_fit did not create a new allocation");
|
|
||||||
}
|
|
||||||
{
|
|
||||||
ox::Vector<ox::IString<8>> v;
|
|
||||||
v.reserve(2);
|
|
||||||
v.emplace_back("asdf");
|
|
||||||
v.emplace_back("aoeu");
|
|
||||||
auto const origData = v.data();
|
|
||||||
v.shrink_to_fit();
|
|
||||||
oxExpect(v[0], "asdf");
|
|
||||||
oxExpect(v[1], "aoeu");
|
|
||||||
oxExpect(v.capacity(), 2u);
|
|
||||||
oxAssert(origData == v.data(), "shrink_to_fit inappropriately created a new allocation");
|
|
||||||
}
|
|
||||||
return ox::Error{};
|
|
||||||
}
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"findIdx",
|
|
||||||
[] {
|
|
||||||
ox::Vector<ox::IString<8>> const v {"zero", "one", "two", "three", "four"};
|
|
||||||
oxExpect(ox::findIdx(v.begin(), v.end(), "zero").or_value(5), 0u);
|
|
||||||
oxExpect(ox::findIdx(v.begin(), v.end(), "one").or_value(5), 1u);
|
|
||||||
oxExpect(ox::findIdx(v.begin(), v.end(), "two").or_value(5), 2u);
|
|
||||||
oxExpect(ox::findIdx(v.begin(), v.end(), "three").or_value(5), 3u);
|
|
||||||
oxExpect(ox::findIdx(v.begin(), v.end(), "four").or_value(5), 4u);
|
|
||||||
oxExpect(ox::findIdx(v.begin(), v.end(), "five").or_value(5), 5u);
|
|
||||||
oxExpect(ox::findIdx(v.begin(), v.end(), "six").or_value(6), 6u);
|
|
||||||
return ox::Error{};
|
|
||||||
}
|
|
||||||
},
|
|
||||||
{
|
{
|
||||||
"SmallMap",
|
"SmallMap",
|
||||||
[] {
|
[] {
|
||||||
@@ -290,18 +246,7 @@ OX_CLANG_NOWARN_END
|
|||||||
oxExpect(map.size(), 1u);
|
oxExpect(map.size(), 1u);
|
||||||
oxExpect(map["aoeu"], "");
|
oxExpect(map["aoeu"], "");
|
||||||
oxExpect(map.size(), 2u);
|
oxExpect(map.size(), 2u);
|
||||||
ox::SmallMap<ox::String, ox::String> cmap;
|
return ox::Error(0);
|
||||||
cmap["asdf"] = "aoeu";
|
|
||||||
auto constexpr constTest = [](ox::SmallMap<ox::String, ox::String> const&map) {
|
|
||||||
OX_REQUIRE(asdf, map.at("asdf"));
|
|
||||||
oxExpect(*asdf, "aoeu");
|
|
||||||
oxExpect(map.size(), 1u);
|
|
||||||
auto const aoeu = map.at("aoeu");
|
|
||||||
oxExpect(aoeu.ok(), false);
|
|
||||||
oxExpect(map.size(), 1u);
|
|
||||||
return ox::Error{};
|
|
||||||
};
|
|
||||||
return constTest(cmap);
|
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
|
|||||||
8
deps/ox/src/ox/std/trace.hpp
vendored
8
deps/ox/src/ox/std/trace.hpp
vendored
@@ -269,8 +269,8 @@ using TraceStream = NullStream;
|
|||||||
inline void logError(const char *file, int line, const char *fmt, const Error &err) noexcept {
|
inline void logError(const char *file, int line, const char *fmt, const Error &err) noexcept {
|
||||||
if (err) {
|
if (err) {
|
||||||
TraceStream trc(file, line, "ox::error");
|
TraceStream trc(file, line, "ox::error");
|
||||||
if (err.src.file_name() != nullptr) {
|
if (err.file != nullptr) {
|
||||||
trc << "Error: (" << err.src.file_name() << ":" << err.src.line() << "):";
|
trc << "Error: (" << err.file << ":" << err.line << "):";
|
||||||
} else {
|
} else {
|
||||||
trc << "Error:";
|
trc << "Error:";
|
||||||
}
|
}
|
||||||
@@ -282,8 +282,8 @@ inline void logError(const char *file, int line, const Error &err) noexcept {
|
|||||||
if (err) {
|
if (err) {
|
||||||
TraceStream trc(file, line, "ox::error");
|
TraceStream trc(file, line, "ox::error");
|
||||||
trc << "Error:" << err;
|
trc << "Error:" << err;
|
||||||
if (err.src.file_name() != nullptr) {
|
if (err.file != nullptr) {
|
||||||
trc << "(" << err.src.file_name() << ":" << err.src.line() << ")";
|
trc << "(" << err.file << ":" << err.line << ")";
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
10
deps/ox/src/ox/std/typetraits.hpp
vendored
10
deps/ox/src/ox/std/typetraits.hpp
vendored
@@ -19,15 +19,12 @@
|
|||||||
namespace std {
|
namespace std {
|
||||||
|
|
||||||
template<typename T>
|
template<typename T>
|
||||||
inline constexpr bool is_union_v = __is_union(T);
|
constexpr bool is_union_v = __is_union(T);
|
||||||
|
|
||||||
inline constexpr bool is_constant_evaluated() noexcept {
|
constexpr bool is_constant_evaluated() noexcept {
|
||||||
return __builtin_is_constant_evaluated();
|
return __builtin_is_constant_evaluated();
|
||||||
}
|
}
|
||||||
|
|
||||||
template<typename T>
|
|
||||||
inline constexpr bool is_trivially_copyable_v = __is_trivially_copyable(T);
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
@@ -159,9 +156,6 @@ static_assert(is_class<int>::value == false);
|
|||||||
template<typename T>
|
template<typename T>
|
||||||
constexpr bool is_class_v = is_class<T>();
|
constexpr bool is_class_v = is_class<T>();
|
||||||
|
|
||||||
template<typename T>
|
|
||||||
inline constexpr bool is_trivially_copyable_v = std::is_trivially_copyable_v<T>;
|
|
||||||
|
|
||||||
template<typename T>
|
template<typename T>
|
||||||
constexpr bool is_signed_v = integral_constant<bool, T(-1) < T(0)>::value;
|
constexpr bool is_signed_v = integral_constant<bool, T(-1) < T(0)>::value;
|
||||||
|
|
||||||
|
|||||||
42
deps/ox/src/ox/std/utility.hpp
vendored
42
deps/ox/src/ox/std/utility.hpp
vendored
@@ -27,48 +27,6 @@ constexpr void swap(T &a, T &b) noexcept {
|
|||||||
b = std::move(temp);
|
b = std::move(temp);
|
||||||
}
|
}
|
||||||
|
|
||||||
template<typename T, typename U>
|
|
||||||
constexpr bool cmp_equal(T const t, U const u) noexcept {
|
|
||||||
if constexpr(ox::is_signed_v<T> == ox::is_signed_v<U>) {
|
|
||||||
return t == u;
|
|
||||||
} else if constexpr(ox::is_signed_v<T>) {
|
|
||||||
return ox::Signed<T>{t} == u;
|
|
||||||
} else {
|
|
||||||
return t == ox::Signed<U>{u};
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
template<typename T, typename U>
|
|
||||||
constexpr bool cmp_less(T const t, U const u) noexcept {
|
|
||||||
if constexpr(ox::is_signed_v<T> == ox::is_signed_v<U>) {
|
|
||||||
return t < u;
|
|
||||||
} else if constexpr(ox::is_signed_v<T>) {
|
|
||||||
return ox::Signed<T>{t} < u;
|
|
||||||
} else {
|
|
||||||
return t < ox::Signed<U>{u};
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
template<typename T, typename U>
|
|
||||||
constexpr bool cmp_not_equal(T const t, U const u) noexcept {
|
|
||||||
return !std::cmp_equal(t, u);
|
|
||||||
}
|
|
||||||
|
|
||||||
template<typename T, typename U>
|
|
||||||
constexpr bool cmp_greater(T const t, U const u) noexcept {
|
|
||||||
return std::cmp_less(u, t);
|
|
||||||
}
|
|
||||||
|
|
||||||
template<typename T, typename U>
|
|
||||||
constexpr bool cmp_less_equal(T const t, U const u) noexcept {
|
|
||||||
return !std::cmp_less(u, t);
|
|
||||||
}
|
|
||||||
|
|
||||||
template<typename T, typename U>
|
|
||||||
constexpr bool cmp_greater_equal(T const t, U const u) noexcept {
|
|
||||||
return !std::cmp_less(t, u);
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|||||||
38
deps/ox/src/ox/std/vector.hpp
vendored
38
deps/ox/src/ox/std/vector.hpp
vendored
@@ -311,12 +311,8 @@ class Vector: detail::VectorAllocator<T, Allocator, SmallVectorSize> {
|
|||||||
*/
|
*/
|
||||||
constexpr Error unordered_erase(std::size_t pos) noexcept(useNoexcept);
|
constexpr Error unordered_erase(std::size_t pos) noexcept(useNoexcept);
|
||||||
|
|
||||||
constexpr Error remove(T const &val);
|
|
||||||
|
|
||||||
constexpr void reserve(std::size_t cap) noexcept(useNoexcept);
|
constexpr void reserve(std::size_t cap) noexcept(useNoexcept);
|
||||||
|
|
||||||
constexpr void shrink_to_fit() noexcept(useNoexcept);
|
|
||||||
|
|
||||||
private:
|
private:
|
||||||
constexpr void reserveInsert(
|
constexpr void reserveInsert(
|
||||||
std::size_t cap, std::size_t pos, std::size_t offset = 1) noexcept(useNoexcept);
|
std::size_t cap, std::size_t pos, std::size_t offset = 1) noexcept(useNoexcept);
|
||||||
@@ -345,7 +341,6 @@ constexpr Vector<T, SmallVectorSize, Allocator>::Vector(std::size_t size) noexce
|
|||||||
|
|
||||||
template<typename T, std::size_t SmallVectorSize, typename Allocator>
|
template<typename T, std::size_t SmallVectorSize, typename Allocator>
|
||||||
constexpr Vector<T, SmallVectorSize, Allocator>::Vector(std::initializer_list<T> list) noexcept {
|
constexpr Vector<T, SmallVectorSize, Allocator>::Vector(std::initializer_list<T> list) noexcept {
|
||||||
reserve(list.size());
|
|
||||||
for (auto &item : list) {
|
for (auto &item : list) {
|
||||||
emplace_back(std::move(item));
|
emplace_back(std::move(item));
|
||||||
}
|
}
|
||||||
@@ -429,13 +424,13 @@ constexpr Vector<T, SmallVectorSize, Allocator> &Vector<T, SmallVectorSize, Allo
|
|||||||
|
|
||||||
template<typename T, std::size_t SmallVectorSize, typename Allocator>
|
template<typename T, std::size_t SmallVectorSize, typename Allocator>
|
||||||
constexpr T &Vector<T, SmallVectorSize, Allocator>::operator[](std::size_t i) noexcept {
|
constexpr T &Vector<T, SmallVectorSize, Allocator>::operator[](std::size_t i) noexcept {
|
||||||
boundsCheck(__FILE__, __LINE__, i, size(), "Vector access overflow");
|
ox::primitiveAssert(__FILE__, __LINE__, i < size(), "Vector access overflow");
|
||||||
return m_items[i];
|
return m_items[i];
|
||||||
}
|
}
|
||||||
|
|
||||||
template<typename T, std::size_t SmallVectorSize, typename Allocator>
|
template<typename T, std::size_t SmallVectorSize, typename Allocator>
|
||||||
constexpr const T &Vector<T, SmallVectorSize, Allocator>::operator[](std::size_t i) const noexcept {
|
constexpr const T &Vector<T, SmallVectorSize, Allocator>::operator[](std::size_t i) const noexcept {
|
||||||
boundsCheck(__FILE__, __LINE__, i, size(), "Vector access overflow");
|
ox::primitiveAssert(__FILE__, __LINE__, i < size(), "Vector access overflow");
|
||||||
return m_items[i];
|
return m_items[i];
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -661,17 +656,6 @@ constexpr Error Vector<T, SmallVectorSize, Allocator>::unordered_erase(std::size
|
|||||||
return ox::Error(0);
|
return ox::Error(0);
|
||||||
}
|
}
|
||||||
|
|
||||||
template<typename T, std::size_t SmallVectorSize, typename Allocator>
|
|
||||||
constexpr ox::Error Vector<T, SmallVectorSize, Allocator>::remove(T const &val) {
|
|
||||||
for (size_t i{}; auto const &v : *this) {
|
|
||||||
if (v == val) {
|
|
||||||
return erase(i).error;
|
|
||||||
}
|
|
||||||
++i;
|
|
||||||
}
|
|
||||||
return ox::Error{1, "element not found"};
|
|
||||||
}
|
|
||||||
|
|
||||||
template<typename T, std::size_t SmallVectorSize, typename Allocator>
|
template<typename T, std::size_t SmallVectorSize, typename Allocator>
|
||||||
constexpr void Vector<T, SmallVectorSize, Allocator>::reserve(std::size_t cap) noexcept(useNoexcept) {
|
constexpr void Vector<T, SmallVectorSize, Allocator>::reserve(std::size_t cap) noexcept(useNoexcept) {
|
||||||
if (cap <= m_cap) {
|
if (cap <= m_cap) {
|
||||||
@@ -691,24 +675,6 @@ constexpr void Vector<T, SmallVectorSize, Allocator>::reserve(std::size_t cap) n
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
template<typename T, std::size_t SmallVectorSize, typename Allocator>
|
|
||||||
constexpr void Vector<T, SmallVectorSize, Allocator>::shrink_to_fit() noexcept(useNoexcept) {
|
|
||||||
if (m_size == m_cap) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
const auto oldItems = m_items;
|
|
||||||
const auto oldCap = m_cap;
|
|
||||||
m_cap = m_size;
|
|
||||||
this->allocate(&m_items, m_size);
|
|
||||||
if (oldItems) { // move over old items
|
|
||||||
for (std::size_t i = 0; i < m_size; ++i) {
|
|
||||||
std::construct_at(&m_items[i], std::move(oldItems[i]));
|
|
||||||
oldItems[i].~T();
|
|
||||||
}
|
|
||||||
this->deallocate(oldItems, oldCap);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
template<typename T, std::size_t SmallVectorSize, typename Allocator>
|
template<typename T, std::size_t SmallVectorSize, typename Allocator>
|
||||||
constexpr void Vector<T, SmallVectorSize, Allocator>::reserveInsert(
|
constexpr void Vector<T, SmallVectorSize, Allocator>::reserveInsert(
|
||||||
std::size_t cap,
|
std::size_t cap,
|
||||||
|
|||||||
21
deps/teagba/src/cstartup.cpp
vendored
21
deps/teagba/src/cstartup.cpp
vendored
@@ -4,20 +4,17 @@
|
|||||||
|
|
||||||
#include <ox/std/heapmgr.hpp>
|
#include <ox/std/heapmgr.hpp>
|
||||||
|
|
||||||
#include <teagba/bios.hpp>
|
|
||||||
#include <teagba/registers.hpp>
|
|
||||||
|
|
||||||
namespace mgba {
|
namespace mgba {
|
||||||
void initConsole();
|
void initConsole();
|
||||||
}
|
}
|
||||||
|
|
||||||
#define MEM_HEAP_BEGIN reinterpret_cast<char*>(0x02000000)
|
#define MEM_EWRAM_BEGIN reinterpret_cast<char*>(0x02000000)
|
||||||
#define MEM_HEAP_END reinterpret_cast<char*>(0x0203FFFF)
|
#define MEM_EWRAM_END reinterpret_cast<char*>(0x0203FFFF)
|
||||||
|
|
||||||
#define HEAP_BEGIN reinterpret_cast<char*>(MEM_HEAP_BEGIN)
|
#define HEAP_BEGIN reinterpret_cast<char*>(MEM_EWRAM_BEGIN)
|
||||||
// set size to half of EWRAM
|
// set size to half of EWRAM
|
||||||
#define HEAP_SIZE ((MEM_HEAP_END - MEM_HEAP_BEGIN) / 2)
|
#define HEAP_SIZE ((MEM_EWRAM_END - MEM_EWRAM_BEGIN) / 2)
|
||||||
#define HEAP_END reinterpret_cast<char*>(MEM_HEAP_BEGIN + HEAP_SIZE)
|
#define HEAP_END reinterpret_cast<char*>(MEM_EWRAM_BEGIN + HEAP_SIZE)
|
||||||
|
|
||||||
extern void (*__preinit_array_start[]) (void);
|
extern void (*__preinit_array_start[]) (void);
|
||||||
extern void (*__preinit_array_end[]) (void);
|
extern void (*__preinit_array_end[]) (void);
|
||||||
@@ -28,14 +25,6 @@ int main(int argc, const char **argv);
|
|||||||
|
|
||||||
extern "C" {
|
extern "C" {
|
||||||
|
|
||||||
void abort() {
|
|
||||||
REG_IE = 0;
|
|
||||||
teagba::intrwait(0, 0);
|
|
||||||
while (true);
|
|
||||||
}
|
|
||||||
|
|
||||||
void *__gxx_personality_v0{};
|
|
||||||
|
|
||||||
void __libc_init_array() {
|
void __libc_init_array() {
|
||||||
auto preInits = __preinit_array_end - __preinit_array_start;
|
auto preInits = __preinit_array_end - __preinit_array_start;
|
||||||
for (decltype(preInits) i = 0; i < preInits; i++) {
|
for (decltype(preInits) i = 0; i < preInits; i++) {
|
||||||
|
|||||||
@@ -162,9 +162,11 @@ The Ox way of doing things is the Olympic way of doing things.
|
|||||||
|
|
||||||
### Error Handling
|
### Error Handling
|
||||||
|
|
||||||
Instead of throwing exceptions, generally try to use
|
The GBA build has exceptions disabled.
|
||||||
[ox::Errors](deps/ox/ox-docs.md#error-handling) for error reporting,
|
Instead of throwing exceptions, all engine code should return
|
||||||
but exceptions may be used where they make sense.
|
[ox::Errors](deps/ox/ox-docs.md#error-handling) for error reporting.
|
||||||
|
For the sake of consistency, try to stick to ```ox::Error``` in non-engine code
|
||||||
|
as well, but non-engine code is free to use exceptions when they make sense.
|
||||||
|
|
||||||
Exceptions should generally just use ```OxException```, which is bascially an
|
Exceptions should generally just use ```OxException```, which is bascially an
|
||||||
exception form of ```ox::Error```.
|
exception form of ```ox::Error```.
|
||||||
|
|||||||
@@ -1,5 +0,0 @@
|
|||||||
O1;net.drinkingtea.ox.TypeDescriptor;1;{
|
|
||||||
"length" : 4,
|
|
||||||
"primitiveType" : 1,
|
|
||||||
"typeName" : "B.int32"
|
|
||||||
}
|
|
||||||
@@ -1,5 +0,0 @@
|
|||||||
O1;net.drinkingtea.ox.TypeDescriptor;1;{
|
|
||||||
"length" : 1,
|
|
||||||
"primitiveType" : 1,
|
|
||||||
"typeName" : "B.int8"
|
|
||||||
}
|
|
||||||
@@ -1,4 +0,0 @@
|
|||||||
O1;net.drinkingtea.ox.TypeDescriptor;1;{
|
|
||||||
"primitiveType" : 4,
|
|
||||||
"typeName" : "B.string"
|
|
||||||
}
|
|
||||||
@@ -1,4 +0,0 @@
|
|||||||
O1;net.drinkingtea.ox.TypeDescriptor;1;{
|
|
||||||
"length" : 2,
|
|
||||||
"typeName" : "B.uint16"
|
|
||||||
}
|
|
||||||
@@ -1,4 +0,0 @@
|
|||||||
O1;net.drinkingtea.ox.TypeDescriptor;1;{
|
|
||||||
"length" : 8,
|
|
||||||
"typeName" : "B.uint64"
|
|
||||||
}
|
|
||||||
@@ -1,4 +0,0 @@
|
|||||||
O1;net.drinkingtea.ox.TypeDescriptor;1;{
|
|
||||||
"length" : 1,
|
|
||||||
"typeName" : "B.uint8"
|
|
||||||
}
|
|
||||||
@@ -1,39 +0,0 @@
|
|||||||
O1;net.drinkingtea.ox.TypeDescriptor;1;{
|
|
||||||
"fieldList" :
|
|
||||||
[
|
|
||||||
{
|
|
||||||
"fieldName" : "bpp",
|
|
||||||
"typeId" : "B.int8;0"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"fieldName" : "rows",
|
|
||||||
"typeId" : "B.int32;0"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"fieldName" : "columns",
|
|
||||||
"typeId" : "B.int32;0"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"fieldName" : "defaultPalette",
|
|
||||||
"typeId" : "net.drinkingtea.ox.FileAddress;1"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"fieldName" : "pal",
|
|
||||||
"typeId" : "net.drinkingtea.nostalgia.core.Palette;1"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"fieldName" : "pixels",
|
|
||||||
"subscriptLevels" : 1,
|
|
||||||
"subscriptStack" :
|
|
||||||
[
|
|
||||||
{
|
|
||||||
"subscriptType" : 4
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"typeId" : "B.uint8;0"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"primitiveType" : 5,
|
|
||||||
"typeName" : "net.drinkingtea.nostalgia.core.NostalgiaGraphic",
|
|
||||||
"typeVersion" : 1
|
|
||||||
}
|
|
||||||
@@ -1,12 +0,0 @@
|
|||||||
O1;net.drinkingtea.ox.TypeDescriptor;1;{
|
|
||||||
"fieldList" :
|
|
||||||
[
|
|
||||||
{
|
|
||||||
"fieldName" : "name",
|
|
||||||
"typeId" : "net.drinkingtea.ox.BasicString#8#;1"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"primitiveType" : 5,
|
|
||||||
"typeName" : "net.drinkingtea.nostalgia.core.Palette.ColorInfo",
|
|
||||||
"typeVersion" : 3
|
|
||||||
}
|
|
||||||
@@ -1,23 +0,0 @@
|
|||||||
O1;net.drinkingtea.ox.TypeDescriptor;1;{
|
|
||||||
"fieldList" :
|
|
||||||
[
|
|
||||||
{
|
|
||||||
"fieldName" : "name",
|
|
||||||
"typeId" : "net.drinkingtea.ox.BasicString#8#;1"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"fieldName" : "colors",
|
|
||||||
"subscriptLevels" : 1,
|
|
||||||
"subscriptStack" :
|
|
||||||
[
|
|
||||||
{
|
|
||||||
"subscriptType" : 4
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"typeId" : "net.drinkingtea.nostalgia.core.PaletteColor;1"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"primitiveType" : 5,
|
|
||||||
"typeName" : "net.drinkingtea.nostalgia.core.Palette.PalettePage",
|
|
||||||
"typeVersion" : 1
|
|
||||||
}
|
|
||||||
@@ -1,19 +0,0 @@
|
|||||||
O1;net.drinkingtea.ox.TypeDescriptor;1;{
|
|
||||||
"fieldList" :
|
|
||||||
[
|
|
||||||
{
|
|
||||||
"fieldName" : "colors",
|
|
||||||
"subscriptLevels" : 1,
|
|
||||||
"subscriptStack" :
|
|
||||||
[
|
|
||||||
{
|
|
||||||
"subscriptType" : 4
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"typeId" : "B.uint16;0"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"primitiveType" : 5,
|
|
||||||
"typeName" : "net.drinkingtea.nostalgia.core.Palette",
|
|
||||||
"typeVersion" : 1
|
|
||||||
}
|
|
||||||
@@ -1,23 +0,0 @@
|
|||||||
O1;net.drinkingtea.ox.TypeDescriptor;1;{
|
|
||||||
"fieldList" :
|
|
||||||
[
|
|
||||||
{
|
|
||||||
"fieldName" : "pages",
|
|
||||||
"subscriptLevels" : 2,
|
|
||||||
"subscriptStack" :
|
|
||||||
[
|
|
||||||
{
|
|
||||||
"subscriptType" : 4
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"subscriptType" : 4
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"typeId" : "B.uint16;0"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"preloadable" : true,
|
|
||||||
"primitiveType" : 5,
|
|
||||||
"typeName" : "net.drinkingtea.nostalgia.core.Palette",
|
|
||||||
"typeVersion" : 2
|
|
||||||
}
|
|
||||||
@@ -1,34 +0,0 @@
|
|||||||
O1;net.drinkingtea.ox.TypeDescriptor;1;{
|
|
||||||
"fieldList" :
|
|
||||||
[
|
|
||||||
{
|
|
||||||
"fieldName" : "colorInfo",
|
|
||||||
"subscriptLevels" : 1,
|
|
||||||
"subscriptStack" :
|
|
||||||
[
|
|
||||||
{
|
|
||||||
"subscriptType" : 4
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"typeId" : "net.drinkingtea.nostalgia.core.Palette.ColorInfo;3"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"fieldName" : "pages",
|
|
||||||
"subscriptLevels" : 2,
|
|
||||||
"subscriptStack" :
|
|
||||||
[
|
|
||||||
{
|
|
||||||
"subscriptType" : 4
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"subscriptType" : 4
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"typeId" : "B.uint16;0"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"preloadable" : true,
|
|
||||||
"primitiveType" : 5,
|
|
||||||
"typeName" : "net.drinkingtea.nostalgia.core.Palette",
|
|
||||||
"typeVersion" : 3
|
|
||||||
}
|
|
||||||
@@ -1,31 +0,0 @@
|
|||||||
O1;net.drinkingtea.ox.TypeDescriptor;1;{
|
|
||||||
"fieldList" :
|
|
||||||
[
|
|
||||||
{
|
|
||||||
"fieldName" : "colorNames",
|
|
||||||
"subscriptLevels" : 1,
|
|
||||||
"subscriptStack" :
|
|
||||||
[
|
|
||||||
{
|
|
||||||
"subscriptType" : 4
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"typeId" : "net.drinkingtea.ox.BasicString#8#;1"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"fieldName" : "pages",
|
|
||||||
"subscriptLevels" : 1,
|
|
||||||
"subscriptStack" :
|
|
||||||
[
|
|
||||||
{
|
|
||||||
"subscriptType" : 4
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"typeId" : "net.drinkingtea.nostalgia.core.Palette.PalettePage;1"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"preloadable" : true,
|
|
||||||
"primitiveType" : 5,
|
|
||||||
"typeName" : "net.drinkingtea.nostalgia.core.Palette",
|
|
||||||
"typeVersion" : 4
|
|
||||||
}
|
|
||||||
@@ -1,24 +0,0 @@
|
|||||||
O1;net.drinkingtea.ox.TypeDescriptor;1;{
|
|
||||||
"fieldList" :
|
|
||||||
[
|
|
||||||
{
|
|
||||||
"fieldName" : "r",
|
|
||||||
"typeId" : "B.uint8;0"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"fieldName" : "g",
|
|
||||||
"typeId" : "B.uint8;0"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"fieldName" : "b",
|
|
||||||
"typeId" : "B.uint8;0"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"fieldName" : "a",
|
|
||||||
"typeId" : "B.uint8;0"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"primitiveType" : 5,
|
|
||||||
"typeName" : "net.drinkingtea.nostalgia.core.PaletteColor",
|
|
||||||
"typeVersion" : 1
|
|
||||||
}
|
|
||||||
@@ -1,42 +0,0 @@
|
|||||||
O1;net.drinkingtea.ox.TypeDescriptor;1;{
|
|
||||||
"fieldList" :
|
|
||||||
[
|
|
||||||
{
|
|
||||||
"fieldName" : "name",
|
|
||||||
"typeId" : "net.drinkingtea.ox.BasicString#8#;1"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"fieldName" : "rows",
|
|
||||||
"typeId" : "B.int32;0"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"fieldName" : "columns",
|
|
||||||
"typeId" : "B.int32;0"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"fieldName" : "subsheets",
|
|
||||||
"subscriptLevels" : 1,
|
|
||||||
"subscriptStack" :
|
|
||||||
[
|
|
||||||
{
|
|
||||||
"subscriptType" : 4
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"typeId" : "net.drinkingtea.nostalgia.core.TileSheet.SubSheet;1"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"fieldName" : "pixels",
|
|
||||||
"subscriptLevels" : 1,
|
|
||||||
"subscriptStack" :
|
|
||||||
[
|
|
||||||
{
|
|
||||||
"subscriptType" : 4
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"typeId" : "B.uint8;0"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"primitiveType" : 5,
|
|
||||||
"typeName" : "net.drinkingtea.nostalgia.core.TileSheet.SubSheet",
|
|
||||||
"typeVersion" : 1
|
|
||||||
}
|
|
||||||
@@ -1,42 +0,0 @@
|
|||||||
O1;net.drinkingtea.ox.TypeDescriptor;1;{
|
|
||||||
"fieldList" :
|
|
||||||
[
|
|
||||||
{
|
|
||||||
"fieldName" : "name",
|
|
||||||
"typeId" : "net.drinkingtea.ox.BasicString#8#;1"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"fieldName" : "rows",
|
|
||||||
"typeId" : "B.int32;0"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"fieldName" : "columns",
|
|
||||||
"typeId" : "B.int32;0"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"fieldName" : "subsheets",
|
|
||||||
"subscriptLevels" : 1,
|
|
||||||
"subscriptStack" :
|
|
||||||
[
|
|
||||||
{
|
|
||||||
"subscriptType" : 4
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"typeId" : "net.drinkingtea.nostalgia.core.TileSheet.SubSheet;3"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"fieldName" : "pixels",
|
|
||||||
"subscriptLevels" : 1,
|
|
||||||
"subscriptStack" :
|
|
||||||
[
|
|
||||||
{
|
|
||||||
"subscriptType" : 4
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"typeId" : "B.uint8;0"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"primitiveType" : 5,
|
|
||||||
"typeName" : "net.drinkingtea.nostalgia.core.TileSheet.SubSheet",
|
|
||||||
"typeVersion" : 3
|
|
||||||
}
|
|
||||||
@@ -1,46 +0,0 @@
|
|||||||
O1;net.drinkingtea.ox.TypeDescriptor;1;{
|
|
||||||
"fieldList" :
|
|
||||||
[
|
|
||||||
{
|
|
||||||
"fieldName" : "id",
|
|
||||||
"typeId" : "B.int32;0"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"fieldName" : "name",
|
|
||||||
"typeId" : "net.drinkingtea.ox.BasicString#8#;1"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"fieldName" : "rows",
|
|
||||||
"typeId" : "B.int32;0"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"fieldName" : "columns",
|
|
||||||
"typeId" : "B.int32;0"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"fieldName" : "subsheets",
|
|
||||||
"subscriptLevels" : 1,
|
|
||||||
"subscriptStack" :
|
|
||||||
[
|
|
||||||
{
|
|
||||||
"subscriptType" : 4
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"typeId" : "net.drinkingtea.nostalgia.core.TileSheet.SubSheet;4"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"fieldName" : "pixels",
|
|
||||||
"subscriptLevels" : 1,
|
|
||||||
"subscriptStack" :
|
|
||||||
[
|
|
||||||
{
|
|
||||||
"subscriptType" : 4
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"typeId" : "B.uint8;0"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"primitiveType" : 5,
|
|
||||||
"typeName" : "net.drinkingtea.nostalgia.core.TileSheet.SubSheet",
|
|
||||||
"typeVersion" : 4
|
|
||||||
}
|
|
||||||
@@ -1,20 +0,0 @@
|
|||||||
O1;net.drinkingtea.ox.TypeDescriptor;1;{
|
|
||||||
"fieldList" :
|
|
||||||
[
|
|
||||||
{
|
|
||||||
"fieldName" : "bpp",
|
|
||||||
"typeId" : "B.int8;0"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"fieldName" : "defaultPalette",
|
|
||||||
"typeId" : "net.drinkingtea.ox.FileAddress;1"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"fieldName" : "subsheet",
|
|
||||||
"typeId" : "net.drinkingtea.nostalgia.core.TileSheet.SubSheet;1"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"primitiveType" : 5,
|
|
||||||
"typeName" : "net.drinkingtea.nostalgia.core.TileSheet",
|
|
||||||
"typeVersion" : 2
|
|
||||||
}
|
|
||||||
@@ -1,24 +0,0 @@
|
|||||||
O1;net.drinkingtea.ox.TypeDescriptor;1;{
|
|
||||||
"fieldList" :
|
|
||||||
[
|
|
||||||
{
|
|
||||||
"fieldName" : "bpp",
|
|
||||||
"typeId" : "B.int8;0"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"fieldName" : "idIt",
|
|
||||||
"typeId" : "B.int32;0"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"fieldName" : "defaultPalette",
|
|
||||||
"typeId" : "net.drinkingtea.ox.FileAddress;1"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"fieldName" : "subsheet",
|
|
||||||
"typeId" : "net.drinkingtea.nostalgia.core.TileSheet.SubSheet;3"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"primitiveType" : 5,
|
|
||||||
"typeName" : "net.drinkingtea.nostalgia.core.TileSheet",
|
|
||||||
"typeVersion" : 3
|
|
||||||
}
|
|
||||||
@@ -1,24 +0,0 @@
|
|||||||
O1;net.drinkingtea.ox.TypeDescriptor;1;{
|
|
||||||
"fieldList" :
|
|
||||||
[
|
|
||||||
{
|
|
||||||
"fieldName" : "bpp",
|
|
||||||
"typeId" : "B.int8;0"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"fieldName" : "idIt",
|
|
||||||
"typeId" : "B.int32;0"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"fieldName" : "defaultPalette",
|
|
||||||
"typeId" : "net.drinkingtea.ox.FileAddress;1"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"fieldName" : "subsheet",
|
|
||||||
"typeId" : "net.drinkingtea.nostalgia.core.TileSheet.SubSheet;4"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"primitiveType" : 5,
|
|
||||||
"typeName" : "net.drinkingtea.nostalgia.core.TileSheet",
|
|
||||||
"typeVersion" : 4
|
|
||||||
}
|
|
||||||
@@ -1,23 +0,0 @@
|
|||||||
O1;net.drinkingtea.ox.TypeDescriptor;1;{
|
|
||||||
"fieldList" :
|
|
||||||
[
|
|
||||||
{
|
|
||||||
"fieldName" : "pages",
|
|
||||||
"subscriptLevels" : 2,
|
|
||||||
"subscriptStack" :
|
|
||||||
[
|
|
||||||
{
|
|
||||||
"subscriptType" : 4
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"subscriptType" : 4
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"typeId" : "B.uint16;0"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"preloadable" : true,
|
|
||||||
"primitiveType" : 5,
|
|
||||||
"typeName" : "net.drinkingtea.nostalgia.gfx.CompactPalette",
|
|
||||||
"typeVersion" : 1
|
|
||||||
}
|
|
||||||
@@ -1,28 +0,0 @@
|
|||||||
O1;net.drinkingtea.ox.TypeDescriptor;1;{
|
|
||||||
"fieldList" :
|
|
||||||
[
|
|
||||||
{
|
|
||||||
"fieldName" : "bpp",
|
|
||||||
"typeId" : "B.int8;0"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"fieldName" : "defaultPalette",
|
|
||||||
"typeId" : "net.drinkingtea.ox.FileAddress;1"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"fieldName" : "pixels",
|
|
||||||
"subscriptLevels" : 1,
|
|
||||||
"subscriptStack" :
|
|
||||||
[
|
|
||||||
{
|
|
||||||
"subscriptType" : 4
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"typeId" : "B.uint8;0"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"preloadable" : true,
|
|
||||||
"primitiveType" : 5,
|
|
||||||
"typeName" : "net.drinkingtea.nostalgia.gfx.CompactTileSheet",
|
|
||||||
"typeVersion" : 1
|
|
||||||
}
|
|
||||||
@@ -1,23 +0,0 @@
|
|||||||
O1;net.drinkingtea.ox.TypeDescriptor;1;{
|
|
||||||
"fieldList" :
|
|
||||||
[
|
|
||||||
{
|
|
||||||
"fieldName" : "name",
|
|
||||||
"typeId" : "net.drinkingtea.ox.BasicString#8#;1"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"fieldName" : "colors",
|
|
||||||
"subscriptLevels" : 1,
|
|
||||||
"subscriptStack" :
|
|
||||||
[
|
|
||||||
{
|
|
||||||
"subscriptType" : 4
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"typeId" : "net.drinkingtea.nostalgia.gfx.PaletteColor;2"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"primitiveType" : 5,
|
|
||||||
"typeName" : "net.drinkingtea.nostalgia.gfx.Palette.PalettePage",
|
|
||||||
"typeVersion" : 2
|
|
||||||
}
|
|
||||||
@@ -1,31 +0,0 @@
|
|||||||
O1;net.drinkingtea.ox.TypeDescriptor;1;{
|
|
||||||
"fieldList" :
|
|
||||||
[
|
|
||||||
{
|
|
||||||
"fieldName" : "colorNames",
|
|
||||||
"subscriptLevels" : 1,
|
|
||||||
"subscriptStack" :
|
|
||||||
[
|
|
||||||
{
|
|
||||||
"subscriptType" : 4
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"typeId" : "net.drinkingtea.ox.BasicString#8#;1"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"fieldName" : "pages",
|
|
||||||
"subscriptLevels" : 1,
|
|
||||||
"subscriptStack" :
|
|
||||||
[
|
|
||||||
{
|
|
||||||
"subscriptType" : 4
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"typeId" : "net.drinkingtea.nostalgia.gfx.Palette.PalettePage;2"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"preloadable" : true,
|
|
||||||
"primitiveType" : 5,
|
|
||||||
"typeName" : "net.drinkingtea.nostalgia.gfx.Palette",
|
|
||||||
"typeVersion" : 5
|
|
||||||
}
|
|
||||||
@@ -1,24 +0,0 @@
|
|||||||
O1;net.drinkingtea.ox.TypeDescriptor;1;{
|
|
||||||
"fieldList" :
|
|
||||||
[
|
|
||||||
{
|
|
||||||
"fieldName" : "r",
|
|
||||||
"typeId" : "B.uint8;0"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"fieldName" : "g",
|
|
||||||
"typeId" : "B.uint8;0"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"fieldName" : "b",
|
|
||||||
"typeId" : "B.uint8;0"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"fieldName" : "a",
|
|
||||||
"typeId" : "B.uint8;0"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"primitiveType" : 5,
|
|
||||||
"typeName" : "net.drinkingtea.nostalgia.gfx.PaletteColor",
|
|
||||||
"typeVersion" : 2
|
|
||||||
}
|
|
||||||
@@ -1,46 +0,0 @@
|
|||||||
O1;net.drinkingtea.ox.TypeDescriptor;1;{
|
|
||||||
"fieldList" :
|
|
||||||
[
|
|
||||||
{
|
|
||||||
"fieldName" : "id",
|
|
||||||
"typeId" : "B.int32;0"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"fieldName" : "name",
|
|
||||||
"typeId" : "net.drinkingtea.ox.BasicString#8#;1"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"fieldName" : "rows",
|
|
||||||
"typeId" : "B.int32;0"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"fieldName" : "columns",
|
|
||||||
"typeId" : "B.int32;0"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"fieldName" : "subsheets",
|
|
||||||
"subscriptLevels" : 1,
|
|
||||||
"subscriptStack" :
|
|
||||||
[
|
|
||||||
{
|
|
||||||
"subscriptType" : 4
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"typeId" : "net.drinkingtea.nostalgia.gfx.TileSheet.SubSheet;5"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"fieldName" : "pixels",
|
|
||||||
"subscriptLevels" : 1,
|
|
||||||
"subscriptStack" :
|
|
||||||
[
|
|
||||||
{
|
|
||||||
"subscriptType" : 4
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"typeId" : "B.uint8;0"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"primitiveType" : 5,
|
|
||||||
"typeName" : "net.drinkingtea.nostalgia.gfx.TileSheet.SubSheet",
|
|
||||||
"typeVersion" : 5
|
|
||||||
}
|
|
||||||
@@ -1,24 +0,0 @@
|
|||||||
O1;net.drinkingtea.ox.TypeDescriptor;1;{
|
|
||||||
"fieldList" :
|
|
||||||
[
|
|
||||||
{
|
|
||||||
"fieldName" : "bpp",
|
|
||||||
"typeId" : "B.int8;0"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"fieldName" : "idIt",
|
|
||||||
"typeId" : "B.int32;0"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"fieldName" : "defaultPalette",
|
|
||||||
"typeId" : "net.drinkingtea.ox.BasicString#8#;1"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"fieldName" : "subsheet",
|
|
||||||
"typeId" : "net.drinkingtea.nostalgia.gfx.TileSheet.SubSheet;5"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"primitiveType" : 5,
|
|
||||||
"typeName" : "net.drinkingtea.nostalgia.gfx.TileSheet",
|
|
||||||
"typeVersion" : 5
|
|
||||||
}
|
|
||||||
@@ -1,41 +0,0 @@
|
|||||||
O1;net.drinkingtea.ox.TypeDescriptor;1;{
|
|
||||||
"fieldList" :
|
|
||||||
[
|
|
||||||
{
|
|
||||||
"fieldName" : "tilesheet",
|
|
||||||
"typeId" : "net.drinkingtea.ox.BasicString#8#;1"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"fieldName" : "palettes",
|
|
||||||
"subscriptLevels" : 1,
|
|
||||||
"subscriptStack" :
|
|
||||||
[
|
|
||||||
{
|
|
||||||
"subscriptType" : 4
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"typeId" : "net.drinkingtea.ox.BasicString#8#;1"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"fieldName" : "tiles",
|
|
||||||
"subscriptLevels" : 3,
|
|
||||||
"subscriptStack" :
|
|
||||||
[
|
|
||||||
{
|
|
||||||
"subscriptType" : 4
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"subscriptType" : 4
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"subscriptType" : 4
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"typeId" : "net.drinkingtea.nostalgia.scene.TileDoc;1"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"preloadable" : true,
|
|
||||||
"primitiveType" : 5,
|
|
||||||
"typeName" : "net.drinkingtea.nostalgia.scene.SceneDoc",
|
|
||||||
"typeVersion" : 1
|
|
||||||
}
|
|
||||||
@@ -1,88 +0,0 @@
|
|||||||
O1;net.drinkingtea.ox.TypeDescriptor;1;{
|
|
||||||
"fieldList" :
|
|
||||||
[
|
|
||||||
{
|
|
||||||
"fieldName" : "tilesheet",
|
|
||||||
"typeId" : "net.drinkingtea.ox.FileAddress;1"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"fieldName" : "palettes",
|
|
||||||
"subscriptLevels" : 1,
|
|
||||||
"subscriptStack" :
|
|
||||||
[
|
|
||||||
{
|
|
||||||
"subscriptType" : 4
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"typeId" : "net.drinkingtea.ox.FileAddress;1"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"fieldName" : "columns",
|
|
||||||
"subscriptLevels" : 1,
|
|
||||||
"subscriptStack" :
|
|
||||||
[
|
|
||||||
{
|
|
||||||
"subscriptType" : 4
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"typeId" : "B.uint16;0"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"fieldName" : "rows",
|
|
||||||
"subscriptLevels" : 1,
|
|
||||||
"subscriptStack" :
|
|
||||||
[
|
|
||||||
{
|
|
||||||
"subscriptType" : 4
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"typeId" : "B.uint16;0"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"fieldName" : "tileMapIdx",
|
|
||||||
"subscriptLevels" : 2,
|
|
||||||
"subscriptStack" :
|
|
||||||
[
|
|
||||||
{
|
|
||||||
"subscriptType" : 4
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"subscriptType" : 4
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"typeId" : "B.uint16;0"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"fieldName" : "tileType",
|
|
||||||
"subscriptLevels" : 2,
|
|
||||||
"subscriptStack" :
|
|
||||||
[
|
|
||||||
{
|
|
||||||
"subscriptType" : 4
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"subscriptType" : 4
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"typeId" : "B.uint8;0"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"fieldName" : "layerAttachments",
|
|
||||||
"subscriptLevels" : 2,
|
|
||||||
"subscriptStack" :
|
|
||||||
[
|
|
||||||
{
|
|
||||||
"subscriptType" : 4
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"subscriptType" : 4
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"typeId" : "B.uint8;0"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"preloadable" : true,
|
|
||||||
"primitiveType" : 5,
|
|
||||||
"typeName" : "net.drinkingtea.nostalgia.scene.SceneStatic",
|
|
||||||
"typeVersion" : 1
|
|
||||||
}
|
|
||||||
@@ -1,33 +0,0 @@
|
|||||||
O1;net.drinkingtea.ox.TypeDescriptor;1;{
|
|
||||||
"fieldList" :
|
|
||||||
[
|
|
||||||
{
|
|
||||||
"fieldName" : "subsheet_id",
|
|
||||||
"typeId" : "B.int32;0"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"fieldName" : "subsheet_path",
|
|
||||||
"typeId" : "net.drinkingtea.ox.BasicString#8#;1"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"fieldName" : "type",
|
|
||||||
"typeId" : "B.uint8;0"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"fieldName" : "layer_attachments",
|
|
||||||
"subscriptLevels" : 1,
|
|
||||||
"subscriptStack" :
|
|
||||||
[
|
|
||||||
{
|
|
||||||
"length" : 4,
|
|
||||||
"subscriptType" : 3
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"typeId" : "B.uint8;0"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"preloadable" : true,
|
|
||||||
"primitiveType" : 5,
|
|
||||||
"typeName" : "net.drinkingtea.nostalgia.scene.TileDoc",
|
|
||||||
"typeVersion" : 1
|
|
||||||
}
|
|
||||||
@@ -1,9 +0,0 @@
|
|||||||
O1;net.drinkingtea.ox.TypeDescriptor;1;{
|
|
||||||
"primitiveType" : 4,
|
|
||||||
"typeName" : "net.drinkingtea.ox.BasicString",
|
|
||||||
"typeParams" :
|
|
||||||
[
|
|
||||||
"8"
|
|
||||||
],
|
|
||||||
"typeVersion" : 1
|
|
||||||
}
|
|
||||||
@@ -1,20 +0,0 @@
|
|||||||
O1;net.drinkingtea.ox.TypeDescriptor;1;{
|
|
||||||
"fieldList" :
|
|
||||||
[
|
|
||||||
{
|
|
||||||
"fieldName" : "path",
|
|
||||||
"typeId" : "B.string"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"fieldName" : "constPath",
|
|
||||||
"typeId" : "B.string"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"fieldName" : "inode",
|
|
||||||
"typeId" : "B.uint64;0"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"primitiveType" : 6,
|
|
||||||
"typeName" : "net.drinkingtea.ox.FileAddress.Data",
|
|
||||||
"typeVersion" : 1
|
|
||||||
}
|
|
||||||
@@ -1,16 +0,0 @@
|
|||||||
O1;net.drinkingtea.ox.TypeDescriptor;1;{
|
|
||||||
"fieldList" :
|
|
||||||
[
|
|
||||||
{
|
|
||||||
"fieldName" : "type",
|
|
||||||
"typeId" : "B.int8;0"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"fieldName" : "data",
|
|
||||||
"typeId" : "net.drinkingtea.ox.FileAddress.Data"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"primitiveType" : 5,
|
|
||||||
"typeName" : "net.drinkingtea.ox.FileAddress",
|
|
||||||
"typeVersion" : 1
|
|
||||||
}
|
|
||||||
@@ -1,35 +0,0 @@
|
|||||||
# d2025.04.0
|
|
||||||
|
|
||||||
* Add app icon for both window and file
|
|
||||||
* Fix selection clearing in TileSheet editor to work when clicking outside
|
|
||||||
image.
|
|
||||||
* Fix color number key range in PalettEditor. Previously, pressing A caused the
|
|
||||||
editor to jump to the last color.
|
|
||||||
|
|
||||||
# d2025.02.1
|
|
||||||
|
|
||||||
* Fix closing tab with unsaved changes (a44c5acc4b)
|
|
||||||
|
|
||||||
# d2025.02.0
|
|
||||||
|
|
||||||
* Rename core namespace to gfx.
|
|
||||||
* Add PaletteV5 to accommodate namespace change.
|
|
||||||
* Add TileSheetV5. TileSheetV5 retains the bpp field for the sake of
|
|
||||||
CompactTileSheet, but always store it pixel as 8 bpp for itself.
|
|
||||||
* Add ability to move subsheets in the subsheet tree.
|
|
||||||
* Add Flip X and Flip Y functionality to TileSheet Editor.
|
|
||||||
* Add rotate functionality to TileSheet Editor.
|
|
||||||
* Add draw line tool to TileSheet editor
|
|
||||||
* Replace file picker combo boxes with a browse button and file picker, and
|
|
||||||
support for dragging files from the project explorer.
|
|
||||||
* Add ability to jump to a color in a Palette by double clicking on the
|
|
||||||
color from the TileSheet editor
|
|
||||||
* Add ability to create directories.
|
|
||||||
* Add ability to add files to specific directories.
|
|
||||||
* Add ability to delete files from the project explorer.
|
|
||||||
* Ctrl-<num key> keyboard shortcuts for jumping between tabs.
|
|
||||||
* Fix Palette Editor to ignore keyboard input when popups are open.
|
|
||||||
* Palette Editor move color mechanism now uses drag and drop.
|
|
||||||
* Add ability to reorder Palette pages.
|
|
||||||
* Add warning for closing a tab with unsaved changes.
|
|
||||||
* Add ability to close a tab with Ctrl/Cmd-W
|
|
||||||
@@ -1,23 +0,0 @@
|
|||||||
O1;net.drinkingtea.ox.TypeDescriptor;1;{
|
|
||||||
"fieldList" :
|
|
||||||
[
|
|
||||||
{
|
|
||||||
"fieldName" : "pages",
|
|
||||||
"subscriptLevels" : 2,
|
|
||||||
"subscriptStack" :
|
|
||||||
[
|
|
||||||
{
|
|
||||||
"subscriptType" : 4
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"subscriptType" : 4
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"typeId" : "B.uint16;0"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"preloadable" : true,
|
|
||||||
"primitiveType" : 5,
|
|
||||||
"typeName" : "net.drinkingtea.nostalgia.gfx.CompactPalette",
|
|
||||||
"typeVersion" : 1
|
|
||||||
}
|
|
||||||
@@ -1,28 +0,0 @@
|
|||||||
O1;net.drinkingtea.ox.TypeDescriptor;1;{
|
|
||||||
"fieldList" :
|
|
||||||
[
|
|
||||||
{
|
|
||||||
"fieldName" : "bpp",
|
|
||||||
"typeId" : "B.int8;0"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"fieldName" : "defaultPalette",
|
|
||||||
"typeId" : "net.drinkingtea.ox.FileAddress;1"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"fieldName" : "pixels",
|
|
||||||
"subscriptLevels" : 1,
|
|
||||||
"subscriptStack" :
|
|
||||||
[
|
|
||||||
{
|
|
||||||
"subscriptType" : 4
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"typeId" : "B.uint8;0"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"preloadable" : true,
|
|
||||||
"primitiveType" : 5,
|
|
||||||
"typeName" : "net.drinkingtea.nostalgia.gfx.CompactTileSheet",
|
|
||||||
"typeVersion" : 1
|
|
||||||
}
|
|
||||||
@@ -1,23 +0,0 @@
|
|||||||
O1;net.drinkingtea.ox.TypeDescriptor;1;{
|
|
||||||
"fieldList" :
|
|
||||||
[
|
|
||||||
{
|
|
||||||
"fieldName" : "name",
|
|
||||||
"typeId" : "net.drinkingtea.ox.BasicString#8#;1"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"fieldName" : "colors",
|
|
||||||
"subscriptLevels" : 1,
|
|
||||||
"subscriptStack" :
|
|
||||||
[
|
|
||||||
{
|
|
||||||
"subscriptType" : 4
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"typeId" : "net.drinkingtea.nostalgia.gfx.PaletteColor;2"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"primitiveType" : 5,
|
|
||||||
"typeName" : "net.drinkingtea.nostalgia.gfx.Palette.PalettePage",
|
|
||||||
"typeVersion" : 2
|
|
||||||
}
|
|
||||||
@@ -1,31 +0,0 @@
|
|||||||
O1;net.drinkingtea.ox.TypeDescriptor;1;{
|
|
||||||
"fieldList" :
|
|
||||||
[
|
|
||||||
{
|
|
||||||
"fieldName" : "colorNames",
|
|
||||||
"subscriptLevels" : 1,
|
|
||||||
"subscriptStack" :
|
|
||||||
[
|
|
||||||
{
|
|
||||||
"subscriptType" : 4
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"typeId" : "net.drinkingtea.ox.BasicString#8#;1"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"fieldName" : "pages",
|
|
||||||
"subscriptLevels" : 1,
|
|
||||||
"subscriptStack" :
|
|
||||||
[
|
|
||||||
{
|
|
||||||
"subscriptType" : 4
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"typeId" : "net.drinkingtea.nostalgia.gfx.Palette.PalettePage;2"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"preloadable" : true,
|
|
||||||
"primitiveType" : 5,
|
|
||||||
"typeName" : "net.drinkingtea.nostalgia.gfx.Palette",
|
|
||||||
"typeVersion" : 5
|
|
||||||
}
|
|
||||||
@@ -1,24 +0,0 @@
|
|||||||
O1;net.drinkingtea.ox.TypeDescriptor;1;{
|
|
||||||
"fieldList" :
|
|
||||||
[
|
|
||||||
{
|
|
||||||
"fieldName" : "r",
|
|
||||||
"typeId" : "B.uint8;0"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"fieldName" : "g",
|
|
||||||
"typeId" : "B.uint8;0"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"fieldName" : "b",
|
|
||||||
"typeId" : "B.uint8;0"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"fieldName" : "a",
|
|
||||||
"typeId" : "B.uint8;0"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"primitiveType" : 5,
|
|
||||||
"typeName" : "net.drinkingtea.nostalgia.gfx.PaletteColor",
|
|
||||||
"typeVersion" : 2
|
|
||||||
}
|
|
||||||
@@ -1,46 +0,0 @@
|
|||||||
O1;net.drinkingtea.ox.TypeDescriptor;1;{
|
|
||||||
"fieldList" :
|
|
||||||
[
|
|
||||||
{
|
|
||||||
"fieldName" : "id",
|
|
||||||
"typeId" : "B.int32;0"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"fieldName" : "name",
|
|
||||||
"typeId" : "net.drinkingtea.ox.BasicString#8#;1"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"fieldName" : "rows",
|
|
||||||
"typeId" : "B.int32;0"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"fieldName" : "columns",
|
|
||||||
"typeId" : "B.int32;0"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"fieldName" : "subsheets",
|
|
||||||
"subscriptLevels" : 1,
|
|
||||||
"subscriptStack" :
|
|
||||||
[
|
|
||||||
{
|
|
||||||
"subscriptType" : 4
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"typeId" : "net.drinkingtea.nostalgia.gfx.TileSheet.SubSheet;5"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"fieldName" : "pixels",
|
|
||||||
"subscriptLevels" : 1,
|
|
||||||
"subscriptStack" :
|
|
||||||
[
|
|
||||||
{
|
|
||||||
"subscriptType" : 4
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"typeId" : "B.uint8;0"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"primitiveType" : 5,
|
|
||||||
"typeName" : "net.drinkingtea.nostalgia.gfx.TileSheet.SubSheet",
|
|
||||||
"typeVersion" : 5
|
|
||||||
}
|
|
||||||
@@ -1,24 +0,0 @@
|
|||||||
O1;net.drinkingtea.ox.TypeDescriptor;1;{
|
|
||||||
"fieldList" :
|
|
||||||
[
|
|
||||||
{
|
|
||||||
"fieldName" : "bpp",
|
|
||||||
"typeId" : "B.int8;0"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"fieldName" : "idIt",
|
|
||||||
"typeId" : "B.int32;0"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"fieldName" : "defaultPalette",
|
|
||||||
"typeId" : "net.drinkingtea.ox.BasicString#8#;1"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"fieldName" : "subsheet",
|
|
||||||
"typeId" : "net.drinkingtea.nostalgia.gfx.TileSheet.SubSheet;5"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"primitiveType" : 5,
|
|
||||||
"typeName" : "net.drinkingtea.nostalgia.gfx.TileSheet",
|
|
||||||
"typeVersion" : 5
|
|
||||||
}
|
|
||||||
@@ -1,28 +1 @@
|
|||||||
K1;0f75977f-1c52-45f8-9793-52ea2dc200a0;O1;net.drinkingtea.nostalgia.gfx.Palette;5;{
|
K1;0f75977f-1c52-45f8-9793-52ea2dc200a0;M2;net.drinkingtea.nostalgia.core.Palette;1;<03><><07><>
|
||||||
"colorNames" :
|
|
||||||
[
|
|
||||||
"Color 1",
|
|
||||||
"Color 2"
|
|
||||||
],
|
|
||||||
"pages" :
|
|
||||||
[
|
|
||||||
{
|
|
||||||
"colors" :
|
|
||||||
[
|
|
||||||
{
|
|
||||||
"a" : 1,
|
|
||||||
"b" : 31,
|
|
||||||
"g" : 31,
|
|
||||||
"r" : 31
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"a" : 1,
|
|
||||||
"b" : 22,
|
|
||||||
"g" : 22,
|
|
||||||
"r" : 22
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"name" : "Page 1"
|
|
||||||
}
|
|
||||||
]
|
|
||||||
}
|
|
||||||
|
|||||||
@@ -1,36 +1 @@
|
|||||||
K1;c79f21e2-f74f-4ad9-90ed-32b0ef7da6ed;O1;net.drinkingtea.nostalgia.gfx.Palette;5;{
|
K1;c79f21e2-f74f-4ad9-90ed-32b0ef7da6ed;M2;net.drinkingtea.nostalgia.core.Palette;1;P<>{<03><>C<>
|
||||||
"colorNames" :
|
|
||||||
[
|
|
||||||
"Color 1",
|
|
||||||
"Color 2",
|
|
||||||
"Color 3",
|
|
||||||
"Color 4"
|
|
||||||
],
|
|
||||||
"pages" :
|
|
||||||
[
|
|
||||||
{
|
|
||||||
"colors" :
|
|
||||||
[
|
|
||||||
{
|
|
||||||
"b" : 5
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"b" : 22,
|
|
||||||
"g" : 22,
|
|
||||||
"r" : 22
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"b" : 27,
|
|
||||||
"g" : 27,
|
|
||||||
"r" : 27
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"b" : 20,
|
|
||||||
"g" : 8,
|
|
||||||
"r" : 8
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"name" : "Page 1"
|
|
||||||
}
|
|
||||||
]
|
|
||||||
}
|
|
||||||
|
|||||||
BIN
sample_project/TileSheets/Chester.ng
Normal file
BIN
sample_project/TileSheets/Chester.ng
Normal file
Binary file not shown.
@@ -1,352 +0,0 @@
|
|||||||
K1;5667c759-7ba1-470a-8860-72f0720dc58c;O1;net.drinkingtea.nostalgia.gfx.TileSheet;5;{
|
|
||||||
"bpp" : 4,
|
|
||||||
"defaultPalette" : "uuid://14fc3dd8-42ff-4bf9-81f1-a010cc5ac251",
|
|
||||||
"idIt" : 7,
|
|
||||||
"subsheet" :
|
|
||||||
{
|
|
||||||
"columns" : -1,
|
|
||||||
"name" : "Root",
|
|
||||||
"rows" : -1,
|
|
||||||
"subsheets" :
|
|
||||||
[
|
|
||||||
{
|
|
||||||
"columns" : 1,
|
|
||||||
"id" : 5,
|
|
||||||
"name" : "Blank",
|
|
||||||
"pixels" :
|
|
||||||
[
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0
|
|
||||||
],
|
|
||||||
"rows" : 1
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"columns" : 2,
|
|
||||||
"id" : 6,
|
|
||||||
"name" : "Dirt",
|
|
||||||
"pixels" :
|
|
||||||
[
|
|
||||||
1,
|
|
||||||
1,
|
|
||||||
1,
|
|
||||||
1,
|
|
||||||
1,
|
|
||||||
1,
|
|
||||||
1,
|
|
||||||
1,
|
|
||||||
1,
|
|
||||||
1,
|
|
||||||
2,
|
|
||||||
1,
|
|
||||||
1,
|
|
||||||
1,
|
|
||||||
1,
|
|
||||||
1,
|
|
||||||
1,
|
|
||||||
1,
|
|
||||||
1,
|
|
||||||
1,
|
|
||||||
1,
|
|
||||||
1,
|
|
||||||
1,
|
|
||||||
1,
|
|
||||||
1,
|
|
||||||
1,
|
|
||||||
1,
|
|
||||||
1,
|
|
||||||
1,
|
|
||||||
1,
|
|
||||||
1,
|
|
||||||
1,
|
|
||||||
1,
|
|
||||||
1,
|
|
||||||
1,
|
|
||||||
1,
|
|
||||||
1,
|
|
||||||
1,
|
|
||||||
1,
|
|
||||||
1,
|
|
||||||
1,
|
|
||||||
1,
|
|
||||||
1,
|
|
||||||
1,
|
|
||||||
1,
|
|
||||||
2,
|
|
||||||
1,
|
|
||||||
1,
|
|
||||||
1,
|
|
||||||
2,
|
|
||||||
1,
|
|
||||||
1,
|
|
||||||
1,
|
|
||||||
1,
|
|
||||||
1,
|
|
||||||
1,
|
|
||||||
1,
|
|
||||||
1,
|
|
||||||
1,
|
|
||||||
1,
|
|
||||||
1,
|
|
||||||
1,
|
|
||||||
1,
|
|
||||||
1,
|
|
||||||
1,
|
|
||||||
1,
|
|
||||||
1,
|
|
||||||
1,
|
|
||||||
1,
|
|
||||||
1,
|
|
||||||
1,
|
|
||||||
1,
|
|
||||||
1,
|
|
||||||
1,
|
|
||||||
1,
|
|
||||||
1,
|
|
||||||
1,
|
|
||||||
1,
|
|
||||||
1,
|
|
||||||
1,
|
|
||||||
1,
|
|
||||||
1,
|
|
||||||
1,
|
|
||||||
2,
|
|
||||||
1,
|
|
||||||
1,
|
|
||||||
1,
|
|
||||||
1,
|
|
||||||
1,
|
|
||||||
1,
|
|
||||||
1,
|
|
||||||
1,
|
|
||||||
1,
|
|
||||||
1,
|
|
||||||
1,
|
|
||||||
1,
|
|
||||||
1,
|
|
||||||
1,
|
|
||||||
1,
|
|
||||||
1,
|
|
||||||
1,
|
|
||||||
1,
|
|
||||||
1,
|
|
||||||
1,
|
|
||||||
1,
|
|
||||||
1,
|
|
||||||
1,
|
|
||||||
1,
|
|
||||||
1,
|
|
||||||
1,
|
|
||||||
1,
|
|
||||||
1,
|
|
||||||
1,
|
|
||||||
2,
|
|
||||||
1,
|
|
||||||
1,
|
|
||||||
1,
|
|
||||||
1,
|
|
||||||
1,
|
|
||||||
1,
|
|
||||||
1,
|
|
||||||
1,
|
|
||||||
1,
|
|
||||||
1,
|
|
||||||
1,
|
|
||||||
1,
|
|
||||||
1,
|
|
||||||
1,
|
|
||||||
1,
|
|
||||||
1,
|
|
||||||
1,
|
|
||||||
1,
|
|
||||||
1,
|
|
||||||
1,
|
|
||||||
1,
|
|
||||||
1,
|
|
||||||
1,
|
|
||||||
1,
|
|
||||||
1,
|
|
||||||
1,
|
|
||||||
1,
|
|
||||||
2,
|
|
||||||
1,
|
|
||||||
1,
|
|
||||||
1,
|
|
||||||
1,
|
|
||||||
1,
|
|
||||||
1,
|
|
||||||
1,
|
|
||||||
1,
|
|
||||||
1,
|
|
||||||
1,
|
|
||||||
1,
|
|
||||||
1,
|
|
||||||
1,
|
|
||||||
1,
|
|
||||||
1,
|
|
||||||
1,
|
|
||||||
1,
|
|
||||||
1,
|
|
||||||
1,
|
|
||||||
1,
|
|
||||||
1,
|
|
||||||
1,
|
|
||||||
1,
|
|
||||||
1,
|
|
||||||
1,
|
|
||||||
1,
|
|
||||||
1,
|
|
||||||
1,
|
|
||||||
1,
|
|
||||||
1,
|
|
||||||
1,
|
|
||||||
1,
|
|
||||||
1,
|
|
||||||
1,
|
|
||||||
1,
|
|
||||||
1,
|
|
||||||
1,
|
|
||||||
2,
|
|
||||||
1,
|
|
||||||
1,
|
|
||||||
1,
|
|
||||||
1,
|
|
||||||
1,
|
|
||||||
1,
|
|
||||||
1,
|
|
||||||
1,
|
|
||||||
1,
|
|
||||||
1,
|
|
||||||
1,
|
|
||||||
1,
|
|
||||||
1,
|
|
||||||
1,
|
|
||||||
1,
|
|
||||||
1,
|
|
||||||
1,
|
|
||||||
1,
|
|
||||||
1,
|
|
||||||
1,
|
|
||||||
1,
|
|
||||||
1,
|
|
||||||
1,
|
|
||||||
1,
|
|
||||||
1,
|
|
||||||
1,
|
|
||||||
2,
|
|
||||||
1,
|
|
||||||
1,
|
|
||||||
1,
|
|
||||||
1,
|
|
||||||
1,
|
|
||||||
1,
|
|
||||||
1,
|
|
||||||
1,
|
|
||||||
1,
|
|
||||||
1,
|
|
||||||
1,
|
|
||||||
2,
|
|
||||||
1,
|
|
||||||
1,
|
|
||||||
1,
|
|
||||||
1,
|
|
||||||
1,
|
|
||||||
1,
|
|
||||||
1,
|
|
||||||
1,
|
|
||||||
1,
|
|
||||||
1,
|
|
||||||
1,
|
|
||||||
1,
|
|
||||||
1,
|
|
||||||
1,
|
|
||||||
1,
|
|
||||||
1,
|
|
||||||
1,
|
|
||||||
1,
|
|
||||||
1,
|
|
||||||
1,
|
|
||||||
1,
|
|
||||||
1,
|
|
||||||
1,
|
|
||||||
1,
|
|
||||||
1,
|
|
||||||
1,
|
|
||||||
1,
|
|
||||||
2,
|
|
||||||
1,
|
|
||||||
1,
|
|
||||||
1,
|
|
||||||
1,
|
|
||||||
1,
|
|
||||||
1,
|
|
||||||
1,
|
|
||||||
1,
|
|
||||||
1
|
|
||||||
],
|
|
||||||
"rows" : 2
|
|
||||||
}
|
|
||||||
]
|
|
||||||
}
|
|
||||||
}
|
|
||||||
BIN
sample_project/TileSheets/Logo.ng
Normal file
BIN
sample_project/TileSheets/Logo.ng
Normal file
Binary file not shown.
@@ -1,591 +0,0 @@
|
|||||||
K1;896a7d25-9dc2-46a0-b4da-c6923b6da01b;O1;net.drinkingtea.nostalgia.gfx.TileSheet;5;{
|
|
||||||
"bpp" : 4,
|
|
||||||
"defaultPalette" : "uuid://c79f21e2-f74f-4ad9-90ed-32b0ef7da6ed",
|
|
||||||
"idIt" : 2,
|
|
||||||
"subsheet" :
|
|
||||||
{
|
|
||||||
"columns" : 3,
|
|
||||||
"id" : 1,
|
|
||||||
"name" : "Root",
|
|
||||||
"pixels" :
|
|
||||||
[
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
1,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
1,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
1,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
1,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
1,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
1,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
1,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
1,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
1,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
1,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
1,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
1,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
1,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
1,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
1,
|
|
||||||
0,
|
|
||||||
1,
|
|
||||||
1,
|
|
||||||
1,
|
|
||||||
1,
|
|
||||||
1,
|
|
||||||
1,
|
|
||||||
1,
|
|
||||||
1,
|
|
||||||
1,
|
|
||||||
1,
|
|
||||||
1,
|
|
||||||
1,
|
|
||||||
1,
|
|
||||||
1,
|
|
||||||
1,
|
|
||||||
1,
|
|
||||||
1,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
1,
|
|
||||||
1,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
1,
|
|
||||||
1,
|
|
||||||
1,
|
|
||||||
1,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
1,
|
|
||||||
1,
|
|
||||||
1,
|
|
||||||
1,
|
|
||||||
1,
|
|
||||||
1,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
1,
|
|
||||||
1,
|
|
||||||
1,
|
|
||||||
1,
|
|
||||||
1,
|
|
||||||
1,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
1,
|
|
||||||
1,
|
|
||||||
1,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
1,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
1,
|
|
||||||
1,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
1,
|
|
||||||
1,
|
|
||||||
1,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
1,
|
|
||||||
0,
|
|
||||||
1,
|
|
||||||
1,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
1,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
1,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
1,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
1,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
1,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
1,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
1,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
1,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
1,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
1,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
1,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
1,
|
|
||||||
1,
|
|
||||||
1,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
1,
|
|
||||||
1,
|
|
||||||
1,
|
|
||||||
1,
|
|
||||||
1,
|
|
||||||
1,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
1,
|
|
||||||
1,
|
|
||||||
1,
|
|
||||||
1,
|
|
||||||
1,
|
|
||||||
1,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
1,
|
|
||||||
1,
|
|
||||||
1,
|
|
||||||
1,
|
|
||||||
1,
|
|
||||||
1,
|
|
||||||
1,
|
|
||||||
1,
|
|
||||||
1,
|
|
||||||
1,
|
|
||||||
1,
|
|
||||||
1,
|
|
||||||
1,
|
|
||||||
1,
|
|
||||||
1,
|
|
||||||
1,
|
|
||||||
1,
|
|
||||||
1,
|
|
||||||
1,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
1,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
1,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
1,
|
|
||||||
0,
|
|
||||||
1,
|
|
||||||
1,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
1,
|
|
||||||
1,
|
|
||||||
1,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
1,
|
|
||||||
1,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
1,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0
|
|
||||||
],
|
|
||||||
"rows" : 3
|
|
||||||
}
|
|
||||||
}
|
|
||||||
BIN
sample_project/TileSheets/NS_Logo.ng
Normal file
BIN
sample_project/TileSheets/NS_Logo.ng
Normal file
Binary file not shown.
@@ -1,591 +0,0 @@
|
|||||||
K1;f551fb8b-0e9f-45fc-8106-b98b7fd18ff5;O1;net.drinkingtea.nostalgia.gfx.TileSheet;5;{
|
|
||||||
"bpp" : 4,
|
|
||||||
"defaultPalette" : "uuid://c79f21e2-f74f-4ad9-90ed-32b0ef7da6ed",
|
|
||||||
"idIt" : 2,
|
|
||||||
"subsheet" :
|
|
||||||
{
|
|
||||||
"columns" : 3,
|
|
||||||
"id" : 1,
|
|
||||||
"name" : "Root",
|
|
||||||
"pixels" :
|
|
||||||
[
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
1,
|
|
||||||
1,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
1,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
1,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
1,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
1,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
1,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
1,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
1,
|
|
||||||
1,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
1,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
1,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
1,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
1,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
1,
|
|
||||||
1,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
3,
|
|
||||||
3,
|
|
||||||
3,
|
|
||||||
3,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
3,
|
|
||||||
3,
|
|
||||||
3,
|
|
||||||
2,
|
|
||||||
3,
|
|
||||||
3,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
3,
|
|
||||||
3,
|
|
||||||
2,
|
|
||||||
3,
|
|
||||||
3,
|
|
||||||
3,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
3,
|
|
||||||
3,
|
|
||||||
3,
|
|
||||||
3,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
1,
|
|
||||||
1,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
1,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
1,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
1,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
1,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
1,
|
|
||||||
1,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
1,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
1,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
1,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
1,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
1,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
1,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
1,
|
|
||||||
1,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0
|
|
||||||
],
|
|
||||||
"rows" : 3
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,269 +0,0 @@
|
|||||||
K1;e7ae945e-d6c5-4444-5738-be95b4e5937a;O1;net.drinkingtea.nostalgia.gfx.TileSheet;5;{
|
|
||||||
"bpp" : 4,
|
|
||||||
"defaultPalette" : "uuid://c79f21e2-f74f-4ad9-90ed-32b0ef7da6ed",
|
|
||||||
"subsheet" :
|
|
||||||
{
|
|
||||||
"columns" : 2,
|
|
||||||
"name" : "Root",
|
|
||||||
"pixels" :
|
|
||||||
[
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
1,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
1,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
1,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
1,
|
|
||||||
1,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
1,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
3,
|
|
||||||
3,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
1,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
1,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
1,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
1,
|
|
||||||
1,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
2,
|
|
||||||
3,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
1,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
1,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
3,
|
|
||||||
2,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
1,
|
|
||||||
1,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
1,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
1,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
1,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
3,
|
|
||||||
3,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
1,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
1,
|
|
||||||
1,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
1,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
1,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
1,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0,
|
|
||||||
0
|
|
||||||
],
|
|
||||||
"rows" : 2
|
|
||||||
}
|
|
||||||
}
|
|
||||||
File diff suppressed because it is too large
Load Diff
Binary file not shown.
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user