This repository represents the Lynar Studios - Standard Library (ls-std).

Patrick-Christopher Mattulat f1ae1c713b Replace deprecated Windows mkdir implementation преди 1 година
config a1a57c735e Add Clang-Format configuration преди 1 година
doc 371674186d Rename documentations преди 1 година
include f1ae1c713b Replace deprecated Windows mkdir implementation преди 1 година
source f1ae1c713b Replace deprecated Windows mkdir implementation преди 1 година
test 2a66626d56 Fix File class tests on Windows OS преди 1 година
.clang-format 7afcd37b70 Extend format rules преди 1 година
.gitignore 82faffd63e Add AppleClang compiler support преди 2 години
CMakeLists.txt ebfe6e262f Remove StlUtils class преди 1 година
LICENSE.MIT bbf7536450 Rename LICENSE.txt file преди 4 години
README.md 3d9f56f13a Provide Changelog via README.md file преди 1 година

README.md

Lynar Studios - Standard Library 2023.1.0

This is a cross-platform standard library written in C++ offering functionalities you would usually miss in C++'s standard template library (STL), especially if you would search for cross-platform implementations.
This library has been tested on Windows, Linux and MacOS systems. Following a modularized approach the following submodules are defined in scope of this library, which are independent:

Boxing

This library module provides boxing classes for primitive data types (e.g. string, int, long, float...) to provide additional functionalities.

Core

The core module is a base module providing a base Class, exceptions, data types and interfaces. Usually the other submodules are dependent on this module.

Encoding

To encode a byte field (e.g. a binary file) for transfer the Base64 encoding / decoding functionality is being provided by this submodule as a first feature.

Event

This submodule comes with an Event class, as well as with handlers and managers to provide an intuitive event handling for your application.

IO

To handle file operations - or to receive information of a file - this library submodule provides an own File class implementation, which can also be passed to library implemented input or output stream classes.
Additionally XML and KV parsing functionalities are provided by this submodule.

Time

A Date class comes with this submodule, which you can use to represent a date and do operations on it.


Changelog

Features

  • AppleClang compiler is now officially supported

Improvements

  • logic module has been removed from this library and can now be found in ls-game-tool-kit library
  • core.utils module has been removed from this library to provide more clean implementations where it's needed
  • namespaces have been completely removed from module tests to improve readability
  • a new naming convention for files and directories has been introduced, where underscores were replaced by dashes entirely
  • fetching the library version can now be achieved by using a dedicated LibraryVersion class - the usage of a static function for this purpose has been removed completely
  • missing nodiscard attributes have been added to library classes

Fixes

  • potential memory leaks have been resolved by strictly splitting prototypes and implementation project-wide, which enabled the usage of virtual or overridden destructors

Documentation

You can find a detailed documentation on Lynar Studios Website: lynarstudios.com


License

This software is licensed and uses MIT-license. You can find a LICENSE.MIT file inside the project's root directory.


Building

To build this library you'd need a recent version of cmake and your OS specific compiler collection, like gcc or MinGW installed.
Inside project's root directory create the following folder:

cmake_build_release

Open your OS specific command line interface (CLI) and navigate to this new folder and run the following command to configure the project and generate a native build system:

cmake ../

Inside cmake_build_release folder you will now find cmake generated files. To compile the library now, just run:

cmake --build . --config Release

Please note: Currently only a small set of compilers is officially supported. If you'd like to compile with an unsupported compiler, you have to set LS_STD_BUILD_WITH_SUPPORTED_COMPILER - option in CMakeLists.txt file to OFF - then reset and reload the cmake project.

Find below a table of compiler/OS combinations which have been tested during library version development:

Supported Compiler OS Compiler Version
GCC Linux Mint 20.3 12.2.0
Clang Linux Mint 20.3 12.0.0-3ubuntu1~20.04.5
MinGW-w64 / GCC Windows 10 11.2.0
MSVC Windows 10 19.32.31332.0
AppleClang MacOS Monterey 14.0.0

Add Library To Your CMake Project

If you would like to add this library to your CMake project (CMakeLists.txt file), make sure that you would add the libraries' include directory:

include_directories(${CMAKE_CURRENT_LIST_DIR}/path/to/this/library/include)

Then link the libraries' binary file inside your CMakeLists.txt file:

target_link_libraries(... libls-std-core libls-std-boxing ...)

Testing

This project contains unit tests to provide test coverage.
To run those tests you have to build this project with option LS_STD_BUILD_WITH_TESTS set to ON - then reset and reload the CMake project.