// ~Musa - This is a unity build, where all source files in the project is combined into a single 
// translation unit.
// lib_main.cpp can be treated as a single-header library and added to a project like that.

// #TODO: #Library This is quite disorganized. There must be a better way to do this by moving the 
// typedefs and procedures that require forward declaration to the top with a metaprogram.
// [ ] Linux / MacOS Ports

// Not implemented as distinct types: singly-linked list, doubly-linked list
// I'll see where it's used most often and see if I can make macros or templates to make
// them easier to use. 

// Third party single-header libs:
#include "lib/third_party/sort_r.h"

// #include "lib/meta_generated.h"
#include "lib/Base/Base.h"
#include "lib/Base/Allocator.h"
#include "lib/Base/Array.h"
#include "lib/Base/String.h"
#include "lib/Base/General_Purpose_Allocator.h"
#include "lib/Base/Arena.h"
#include "lib/Base/Arena_Array.h"
#include "lib/Base/String_Builder.h"
#include "lib/Base/Hash_Functions.h"
#include "lib/Base/Hash_Table.h"
#include "lib/Base/Arena_Hash_Table.h"
#if OS_WINDOWS
# include "lib/OS/OS_Win32.h"
#endif
#include "lib/UI/Layout.h"
#include "lib/Base/Logger.h"

#include "lib/Base/Expandable_Arena.h"
#include "lib/Base/Base_Thread_Context.h"
#include "lib/Base/Serializer.h"
#include "lib/Base/Bit_Array.h"
#include "lib/Base/Timing.h"
// #include "lib/Base/Arena_Free_List.cpp"

#include "lib/Base/Arena.cpp"
#include "lib/Base/String.cpp"
#include "lib/Base/Unicode.cpp"
#include "lib/Base/String_Matching.cpp"
#include "lib/Base/RadixSort.cpp"

#include "lib/Base/Base_Thread_Context.cpp"
#include "lib/Base/ErrorType.cpp"
#include "lib/Base/Logger.cpp"
#include "lib/Base/Expandable_Arena.cpp"
#include "lib/Base/Allocator.cpp"
#include "lib/Base/General_Purpose_Allocator.cpp"

// OS-Abstraction Layer
#include "lib/Base/Threads.cpp"

#include "lib/Base/Thread_Group.cpp"

#if OS_WINDOWS 
# include "lib/OS/OS_Win32.cpp"
#endif

// #include "lib/Base/File_Search.h"

#include "lib/Graphics.cpp"

// #if OS_LINUX..
// #include "src/OS_Linux.cpp"
// #if OS_MACOS..
// #include "src/OS_MacOS.cpp"

