- Use constexpr ifs to massively simplify
Variantimplementation - Allow Hash to work with
ARRAY_MOVEproperly - Add compile-time FNV hash
- Simplified
Hashimplementation and addedstd::tuplesupport - Switched
Mapto usestd::tupleso it can be iterated over withfor(auto[k,v] : map) - Added precompiled header to makefile and visual studio projects
- VARARRAY now constructs and destructs nontrivial types
- Unified static/stateful allocators and require reallocations to input the correct old size
- Added CacheAlloc
- Removed
HashBaseand addedHashInsinstead Hashiterator now returns anstd::tuplekey/value pair.- Renamed
Start()toFront()andEnd()toBack()inHash - Added
std::array<T, N>support to most constructors accepting a native array - Removed embedded engine in
AliasTableand fixed constructor/assignment - Split off
RandomQueueintoRandomQueue.h - Rewrote internal implementation of
Serializer, which now requires objects implementvoid(Serializer, const char*) Serializerincludes a check to ensure an object has the appropriate function required- Added iterator to
ArrayCircular - Added serialization support to
Array,ArrayCircular,ArraySort,CompactArray,Map,Queue,Stack,BinaryHeap, andPriorityQueue - Added
std::tuplesupport toSerializer - Removed deprecated std::iterator
- Replace most instances of
uint32_twithsize_t - Static build now works with vcpkg
bunVersionInfowas changed to a 64-bit int with 4 16 bit integers, which makes it easier to serialize/deserialize as an arrayDynArraystreams have been replaced by a generic read-only array stream and a read-writeDynArraystream- Added a functional buffer stream
- Renamed
ArraySlicetoSliceand improved support - Added
memsubset() Serializercompletely rewritten, now natively supports hashes and variants for all implementations- Added
fsign() - Added
Collision.hwith 2D collision algorithms between different shapes - Added
Geometry.hwith N-dimensional and 2D shape objects - Added bit groups to
BitField - Remove
bunSeqand use standardizedstd::index_sequenceinstead - Drop all attempts to support VS2010 and remove legacy code
- Simplify template boilerplate with
if constexpr - Add aligned allocator support
- Add move semantics to
TRBTree - Added
constexprsupport - Added XML serializer engine
- Restructure animations
- Rename
DYNARRAYtoVARARRAYand make it fall back to heap allocation above 65535 bytes. - Remove extraction operator from SSE and replace with
Set() - Move Xorshift implementation to
XorshiftEngine.h, switch tostd::generate_canonical - Rename
Reserve()toSetCapacity()and refactor arrays
- Added
AttemptRLock(),AttemptStrictLock()to RWLock - Removed thread-specific debug assertions in RWLock to allow complex usage
- Rewrote ring allocator with a per-bucket RWLock
- Added a Semaphore class to Thread and removed Thread
Signal()/Wait() - Rewrote ThreadPool to actually work properly
- Added Future class that utilizes ThreadPool
- Added
SafeFormat()function which allows you to format output to an std::ostream via "{0}{1}" notation - Rewrote Logger class for more customizability, adding source parameter, maximum error level, and formatting.
- Removed fastcall because it doesn't do anything on 64-bit platforms
- Removed BSS_EXPLICITSTATIC by fixing BSS_FORCEINLINE on clang/GCC, and removing spurious static keywords
- Added
GetFontPath()for windows - Updated
khash.hand the correspondingcHashtemplatized version of it. - Added CompactArray for creating simplistic arrays that avoid heap allocation as much as possible
- Moved FACTION to
Traverse()in KDtree cTRBTreecan now be used statically, and properly calls destructors- changed include folder structure for vcpkg compatibility
- inverted include order on tests to catch header file mistakes
- Internal function refactored to camelCase
- All public functions that aren't meant to mimic standard library functions are now Capitalized
- Some function names have been expanded to full words for readability
- Singleton behavior has been changed, and now does not provide
Instance()or instantiate the static variable for you to prevent DLL boundary accidents. - bunFill added as typesafe alternative to
memset() - Removed
rswap()andbunReverse(), use std::swap and std::reverse instead. - Moved internal entities into the "internal" namespace
- Moved UTF function declarations to
utf_conv.h - Version info is now an exported symbol, thus accurately reflecting the version of the compiled DLL itself
- Fixed minor bugs in XML and TOML parsers
- Added install/uninstall to makefile
- AVL tree Insert now returns a pointer on success or null on failure
- Added Gauss–Legendre quadrature for approximating integrals
- Added C-style object functions to
delegate.h - Added
Set()to DynArray and Array - Fixed up headers and #defines so bun-util builds and runs under Linux Subsystem for Windows
- Fixed GetNear on TRBTree
- Add
GetAttribute<TYPE>()helper functions tocXML.h - Improve FixedPt class to work on 64-bits with minimal precision loss
- Added case-insensitive Trie implementation
- Optimized zero length arrays for UBJSON
- Fixed bug in UTF8 to UTF32 conversion
- Removed outdated
leaktest.h - Added SSE fallback for dealing with compilers or architectures that don't support SSE
- Project now compiles using clang under visual studio
- Added TOML parser/serializer under
cTOML.h - Made a few minor improvements to JSON parsing/serializing
- Added auxiliary binsearch function
- Added
Capacity()/Length()tocTrie - Added helper functions to
cHash - Added RWlock, a readers-writer lock.
- Added
defer(), a function that defers another function or delegate until the end of the block - Moved
cAutoReftocRefCounter.hand renamed to ref_ptr<> - Made greedy allocator threadsafe
- Replaced Ring Allocator's reader writer lock with RWLock
- Added override specifiers whenever possible
- Removed
cDef.h - Added iteration to
cArraySlice, added more GetSlice methods - Removed
cSettings.h - Added a universal serializer as
cSerializer.h, and changed JSON and UBJSON to serializer engines - Made linked list operations move safe
- Fixed
CARRAY_CONSTRUCTincDynArrayandcArrayand added more vigorous testing to detect similar errors - Fixed const bug in
bun_vector.h - added bunmalloc function
- Added missing UTF conversion functions and standardized them
- Added
STRUPRand fixedcDisjointSet.hinclude in bun_Graph - Refactored tests into individual cpp files
- Added GetRegistryValue for windows platforms only
- Added bunloadfile for quickly loading files into memory
- Rewrote
cHashto supportARRAY_TYPEand proper safe types, and added hash support forcStr. - Fixed parsing bug in
cXMLand added more tests
- Added variant class, an algebriac data type implemented in
variant.h - Added bool array support and tests to UBJSON
- Added support for variants in both UBJSON and JSON parsing and serialization.
- Put bun_graph back in bun_util namespace but removed it from
bun_algo.h - Added base64 encoder and decoder using url-safe convention, but no padding.
- Added stream buffer for
cDynArray, renamed ``StreamSplitter.hto `bun_stream.h` - Added option for non-recursive DelDir
- Fixed comparison bug in
bun_vector.h - Added AddConstruct function to
cDynArray - Added FromC for stateless functions to
delegate.h - Added a Newton-Raphson root finder method, and a Newton-Raphson Bisection hybrid algorithm that should converge for all well behaved functions.
- Added cubic function solver
- Added cubic curve and quadratic curve splitter
- Removed VC++ __int32 style types
- Removed custom uint16, uint32, etc. types from bun_util namespace
- Standardized all types to C++11 uint32_t format
- Added
ARRAY_MOVEso std::unique_ptr can be safely put into an array object so long as it isn't copied. - Fixed AddConstruct so it uses perfect forwarding
- Changed uses of
NULLto nullptr - Used reinterpret_cast to avoid violating strict aliasing rules
- Add noexcept for some simpler functions
- Added a hash generation function for std::pair in
cHash
- Fixed static keywords on explicit template specializations.
- Fixed divide by zero error in
bun_profiler. - Created a #define version of fbnext that can be used instead of the template version, then removed bun_util references from several files.
- Added
operator[]tocStack - Added
*operatortosseVeci - Added
bun_vector.hand moved n-dimensional vector algorithms frombun_algo.hto there. - Changed
cArraySimple/cArrayConstruct/cArraySafeinto justcArrayBase<> that takes a template parameter and changed all the template signatures of dependent types. RemovedWArraysince you can usecArraynow instead. - Made ToArgV an inline template function
cHashnow directly implements kh_template_t, which was promoted to a real classcStrcan now construct a substring from a larger string- Added xorshift random number generator
- Fixed error in
cHashSet()function definition - Added multithreaded ring allocator, renamed Fixed to Block and Additive to Greedy
- Fixed issue with integer constants that were assumed to be 32-bits long when they should have been 64-bits long.
- Added AA tree
- Fixed errant precision issues in some unit tests
- Fixed some previously unused move constructors
cThreadPoolwas completely rewritten to be entirely threadsafe and more extensible, while also eliminating race conditions- All random number functions were completely overhauled to use C++ random number engines.
bunrand()uses a default xorshift_engine to generate high quality random numbers. - Fixed regression in TRB_Tree that did not handle duplicate values properly (then adjusted the unit tests to catch it)
- Removed
bun_literals - Fixed
Shuffle()in sseVec and addedSum() - Added std::initializer_list to
cArrayandcDynArray - Removed const modifier from operators to prevent breaking move semantics
- Added
cXML cHashwas simplified so that the value is now set to void by default, which implies a set, so you no longer have to explicitly state that it is or isn't a map.Insert()was specialized so that Sets can only insert keys, not values.- Added
cJSON, a simple JSON parser - Added
cUBJSON, a simple UBJSON parser - Animations were completely refactored and AniAttribute has been removed. Animation data is now separate from animation state, which is managed on a higher level.
cRefCounterGrab()andDrop()now both return signed ints- Removed
strhex(x)because it was juststrtoul(x,0,16) delegate<T>can now accept a const T* pointer when referring to a constant member function.- Added missing operations to
cRational - Added
cPriorityHeap, a variation ofcPriorityQueuethat uses the key to keep track of each item's place in the heap, allowing item values to be adjusted. cArraynow usesCapacity()instead ofSize()cDynArrayno longer initializes all potential members. Instead, it only constructs objects that were actually added, and immediately destructs removed objects.cArraySort,cArrayCircularandcBinaryHeaphave all adopted this convention.- the
PROF_HEATNODEallocator now correctly performs a reallocation. - Moved Graph into a ::graph namespace to reduce name collision problems.
cBitArrayhas been supplanted bycDynArray<bool>, which now specializes to an efficient bit array representation.
- Added version of
Get()tocTriethat takes a string length parameter for non-null terminated strings. - Fixed header includes
- Removed
cCmdLineArgsand replaced it with a simpleGetWindowsArgV()function andProcessCmdArgs() - Replaced
cKhashspecializations withcHash, which automatically chooses a hash for you and implementsoperator[] - Restored CreateDir, DelDir, and ListDir functions in
os.h - Changed some functions to static so they don't cause link conflicts
- rewrote how bun_log does levels and renamed it
cLog - Renamed
cArraySimple.htocArray.h, but didn't rename the actual class. - Added
WriteLog()using variadic templates tocLog - delegate now implicitly constructs from an equivalent lambda function
- Added FPU control functions
- Support was added (again) for VS2010
- SetInterpolate is no longer available on
cAnimation. Use GetAttribute<> instead - Added a high performance custom profiler in
profiler.hand removed Shiny - Added a time interpolation helper function
- Removed
CLASSPROPfrombun_defines.h - Adjusted a few of the type shortcuts in
bun_defines.h - Made animation keyframes more efficient and added the ability to set all keyframes for a certain attribute at once.
- Gave
cPriorityQueueandcBinaryHeapaClear()function - Added Interval AniAttribute for transient discrete animations, like hitboxes.
- Added SetArray to
cArraySimple/Construct/Safe - Added 16bit and 8bit integer SSE instructions
- Changed integral distribution using
rand()to utilize an underlying float distribution because the performance is almost exactly the same. - Added a random seed-able mersenne function and gave it a suitable [min,max) wrapper in
bun_algo.h - Added LLAdd specialization for both root and last
- Created non-template
cFixedAllocVoidclass that is now instantiated bycFixedAlloc. - Simplified
cAVLtree's method of handling void Data parameters - Fixed a few subtle header errors
- Added AltLLAdd and AltLLRemove to
LLBase.hto allow arbitrary linked list structures - Added
Capacity()tocLinkedArray - Tweaked bunmod, added tests for a few missing functions in
bun_util.h - Added
cBSS_queue, which implements an efficient queue using a circular array - Added Stati
cNullAlloc, useful for enforcing correct behavior when substituting array pointers. - Improved
cDisjointSetso it can operate on an outside array pointer, changedMinSpanningTree()to use dynamic stack allocation, fixedGetElements() - Added
bun_graph.hwith an adjacency list representation of a DAG. - Added BreadthFirstTree and BreadthFirstGraph in
bun_algo.hthat perform an efficient breadth-first traversal of either a tree or a graph. - Added Push-Relabel algorithm for solving max-flow problems, a function for reducing a circulation graph to a max-flow graph, and a function for reducing a lower-bound graph to a circulation graph.
- Added flipendian for dealing with bigendian architectures
- Added
cBitStreamwrapper that lets you manipulate an ostream with bit-level precision. - Added simple bun_Serialize/bun_Deserialize functions for writing and reading basic types to an ostream while taking endianness into account.
- Completely rewrote
cAnimationusing an attachment system.AniTypeID.hhas been absorbed intoAniAttribute.h cAnimationcan now be serialized and deserialized to an ostream- Added
cIDHashfor implementing simple, compact ID systems - Fixed bad usage of std::ostream move constructor
- Added
Set()tocKhash - log2 and log2_p2 now use the BSR instruction if available
- Upgraded project to use Visual Studio 2013 variadic templates, but it should still work on earlier versions.
BSS_VARIADIC_TEMPLATESis now defined if the current compiler supports variadic templates - Removed TSignPick, use std::make_signed and std::make_unsigned instead.
- Renamed ABitLimit to BitLimit, use it to get integral types for specific bit counts
- Changed a bunch of
bun_util.htests to static assertions - Allocator<> has been removed, because it wasn't standard compatible anyway. Instead, use StandardAllo
cPolicyand FixedPolicy directly. - reallocate was removed from the static allocators. Static allocators are now expected to use realloc on the
allocate()call, or at least emulate it if the pointer is non-null (deallocate the pointer sent in) - Added
bunfmod()for real modulo operations on floats, fixed edge-case inangledistsgn() - Simplified
cLocklessFixedAllocand fixed a bug in the DCAS sync - Changed a few function names to enforce more consistency
- Upgraded all move/copy constructors to properly use c++11 = delete syntax where appropriate
- Added multi-producer multi-consumer
cMicroLockQueue(incLocklessQueue.h) cThreadnow inherits from std::thread and augments its existing functions with a timeout join and signalable state.bun_deprecated.hhas been removed - its contents have been absorbed intobun_defines.h- Removed
cByteQueue - Removed
cBSS_DebugInfo, it's useful functions are now standalone inbun_util_c.h, and it's profiler code is now a static function incHighPrecisionTimer - Added
cThreadPool,cTaskPool, and StoredFunction - Renamed
cBSS_Queue.h->bun_queue.handcBSS_Queue ->cQueue, and did the same forcBSS_Stack.bun_fixedpt.his nowFixedPt.hand bun_dual is nowDual.h`
cDynArraynow supports + and += operations and derives its array as a protected membercDynArrayno longer tries to return something from its Insert function. An assertion in the _insert function was also fixed.- Added unit test for
cDynArray - Added
UTF8toUTF32()and basic support forcStrT - Added
min()/max()functions to sseVec by implementing them manually with SSE2 operations instead of relying on the SSE4.1 instruction - Fixed a bunch of using keywords to use protected: instead of private:
- A minor tweak to AniAttributeSmooth that makes pval optional
cAllocTrackernow checks for self-assignment- Removed completely stupid "INIT" template argument from
cFixedAllocand moved to constructor - renamed _allocbytes
alloc()andalloc()allocT()incAdditiveAllocto make it consistent withcFixedAlloc - Added
Clear()function incFixedAlloc - All allocaters now use single malloc memory allocations.
- Adjusted
asmcas()to properly deal with non-integral arguments - Added multi-producer multi-consumer lockless fixed allocator in
bun_alloc_fixed_MT.h - Removed
cLocklessByteQueue - Added
bunGetCPUInfo() - Took QNode out of
cLocklessQueueand renamedcLQ_QNode - Made the
cINIstoragestatic fixed allocators threadsafe - Added n-dimensional vector operations to
bun_algo.h cThreadnow deals with the fact that _beginthreadex can return either 0 or -1 on failure because someone at microsoft needs to be fired.- Absorbed
bun_dlldef.hintobun_defines.h - Stati
cAllocPolicyhas been removed and replaced by a minimalistic implementation not designed to work in the standard libraries. - Added
cArbitraryArrayandcScheduler - Removed
cHolder - Added
cKDTree cArraySafe/cArrayConstructnow support Insert and +/+= operators- Removed
cObjSwap - Fixed CompTSecond to actually use second type
- Added
cTrie - Changed
cBinaryHeapto default to a maxheap using CompT rather than a minheap so HeapSort sorts things in ascending order by default (and so this behavior is consistent with the std heap implementation).cSchedulerwas modified to account for this, butcPriorityQueuenow has inverted default behavior. - Renamed
cUniquePtr.htocSmartPtr.h, removedcUniquePtrand addedcAutoRef - Removed
cSparseArray.h - Changed several
Size()calls to Capacity to prevent accidents bun_algo.hnow contains an implementation of Robert Bridson's Fast Poisson Disk Sampling algorithm and an SSE2 optimized 4x4 matrix multiplier.- DArray is now WArray because why the hell was it named DArray anyway?
cINIstorageandcINIsectionnow have proper iterators- Added Quadratic and Cubic B-spline interpolations to
bun_algo.h - Tweaked aspects of the animation system, added generic interpolators to
cAniAttributeSmooth. - Renamed LLAdd to LLAddAfter, LLInsertRoot to LLAdd, LLInsertFull to LLInsert and LLInsertAfterFull to LLInsertAfter
- Changed
cKhashto have a single Get and GetValue function that returns the value type for integral and pointer types (with a configurableINVALIDvalue), or pointers for anything else. - Dropped support for command line arguments in
cSetting(use updatedcCmdLineArgsinstead) and massively simplified the implementation - Fixed
cBitArrayand added tests, standardizing the bit reference object and introducingT_SETBITorbunSetBit()as a standard way to flip a bit. - Added functional command line processing to
cCmdLineArgs, along with the option of overloading the default command line parsing with a string. - Removed fFastDoubleRound and it's siblings, changed fFastRound to always use SSE2 instructions because they're faster, added fFastTruncate using SSE2 instructions (but if your compiler isn't stupid, it should use SSE automatically)
- Updated shinyprofiler to a new version, adjusting it's headers so it compiles in GCC and uses bun_util's static lib export and import options
- Added
SetSizeDiscard()tocArraySimple - Made ismap actually do something on the
cKhashspecializations - Removed check for null pointers on
cKhash. If this is really required it should be absorbed into the hash and equality functions. - Added intdiv for enforcing mathematically correct integer division towards negative infinity.
- Added ParseToken to
cStrT - Added
GetNumEntries()andGetNumSections()tocINIsectionandcINIstorage - Added
Front(),Back(),begin(), andend()tocArrayWrap,cArraySort,cDynArrayandcBinaryHeap - Changed
cStrTconstructor so that it no longer directly accepts format strings due to serious potential performance penalties and the fact that it messes everything up.cStrFandcStrWFnow returncStr/cStrWwith the proper formatting. - Fixed a bunch of windows specific header includes and some missing header dependencies
- Added a deleter class for unique_ptr that forces a pointer to be deallocated inside the bun_util dll.
- Changed FileDialog to utilize the above deleter, so that it now returns a dynamically allocated string that is automatically cleaned up.
- Cleaned up static usage, template shortcuts GCC didn't like, and implemented a GCC workaround for missing stream move semantics in bun_Log
- Implemented POSIX version of
cHighPrecisionTimerand added test for it - Adjusts bun_DebugInfo to take advantage of POSIX specific profiler timers exposed in
cHighPrecisionTimeron POSIX systems - Implemented POSIX unicode conversions
- Fixed minor bug in Fisher-Yates shuffle algorithm (the last element was not being shuffled)
- Threw out useless
bun_call.hheader and incorporated it into bun_defines. cThreadnow has move assignment, join-with-timeout, and responds to errors.cArraySimple/Construct uses realloc and avoids memory allocation when set to size 0- Rebuilt
cBitFieldinto a non-inheritable class with more powerful management simplified via operators. - Renamed
TESTtoTESTDEFso as not to confuse it with theTEST()macro - Removed
functor.hand replaced withdelegate.h, which is a more elegant and efficient implementation. - Introduced
cAnimation.h, which defines a fully generic animation system that can be used for anything. reallocate()is now defined as an optional allocation operationcArraySimple/Construct/Safe now support custom allocators withreallocate()defined- Added
cDisjointSetand used it to implement Kruskal's algorithm for generating a minimum spanning tree given a sorted set of edges. - Templatized KH_POINTER_HASHFUNC
- Removed
cLAIterRM - Renamed GetRoot to Front and GetLast to Back on
cLinkedList, and made the use of _last optional. - AVL tree can now have "void" as data and it will change its layout accordingly. TRB tree now only has a single value instead of Key/Data
cAdditiveFixedAllocatorremoved because who on earth would use that?cAdditiveVariableAllocatoris now justcAdditiveAlloc- Expanded and templatized SSE classes
- Fixed error that prevented the INI parser from reading blank ini values
- Fixed horrifying pointer bug in
StreamSplitterthat should never have worked in the first place - Eliminated unnecessary memory allocation and copying in
StreamSplitter - Changed how namespaces were dealt with in
cSettingsand switched out cmdhash for a global variable because GCC hates it less - Compiling via makefile using GCC on linux systems is now fully supported!
- Tweaked internal constant names to be less likely to collide with reserved identifiers
- Added
GetEntryNode()andGetSectionNode() - Added bun_util.rc so windows builds contain version/copyright information.
- Version numbers are now #define'd in
bun_defines.hand pasted into the version number struct - Removed
DELETE_SAFEmacros because you really should be using unique_ptr for that kind of stuff. - Removed
CLONE_MEmacros because its way too easy to just copy+paste that and you never have to modify it again. - Changed GetKeyPtrOnly to return
KHVALinstead ofKHVAL&so it actually works properly - Added
STRISWAPandWCSISWAPtypedefs tocObjSwap.h - Changed RemoveShrink to Remove and added
Add()tocArrayWrap - Changed
cINIentryto always store a 64-bit integer, and changed GetLong to GetInt - Added single-consumer, single-producer lockless queue and corresponding tests.
- Fixed
cAVLTree's handling of constructors, destructors and return values, so you can now use standard classes as items. - Removed vestigial
cBucketAlloc.h - Replaced ::operator new and ::operator delete with malloc and free in
bun_alloc.hto maintain consistency. - Added more details to
bun_compiler.hincluding an attempt to determine endianness. - Added
Front(),Back(), andPopLast()tocArrayCircular, which now preserves its state afterSetSize() - Changed
Insert()toPush(),PopRoot()toPop(),RemoveRoot()toDiscard(), andPeekRoot()toPeek()oncPriorityQueueand addedGet(),Remove()and unit tests. - Added some static assertions
- Removed
cAutoList.h - Rewrote
cStrTableusingcArraySimpleand added the ability to append a string, along with unit tests. - Added
bun_dual.hand unit tests for automatic differentiation - fixed a few operators in FixedPt
- Added
AlertBox()convenience function - Fixed VC++ intermediate directories for 64-bit compile
- Added
cBitWrapand sseVeci64 - Refactored
cRBT_List intocTRBtreeand tweakedcAVLtree - Fixed move/copy constructors and assignment operators for
cAllocTracker - Added LLInsertFull and LLInsertAfterFull convenience functions
- Changed default initial sizes from 1 to 0 where appropriate to avoid needless memory allocations
- Marked as LargeAddressAware
- Added
cThreadas a tiny wrapper over OS-specific thread creation and joining features. - Removed
cTaskStackandcMutex cCmdLineArgsnow always parses unicode windows arguments and puts them into a UTF-8 encoded string.
- Added
ForceWin64Crash(), which is a function that shouldn't exist but is necessary to prevent 64-bit Windows 7 from pretending crashes that occur over a kernal barrier never happened, which causes undefined, insanely weird and unpredictable behavior. - Fixed the project to throw on Win32 errors to bypass AFX stack corruption bugs in the debugger.
- Changed how
cAllocTrackerworks - Optimized
cAllocTrackerso that, if using the default allocator, it uses no memory. - Improved lambda handling
- Removed [] from
cBitFieldbecause of all the conflicts it created - Adjusted logging functions
cArraySafenow uses std::move inRemove()cLinkedArraynow uses move semantics and no longer supports traits (traits are incompatible with move semantics)- Standardized function pointer calls to use less ambiguous syntax in certain functions
- Fixed broken algorithm in binsearch_exact and added unit tests.
- Added __restrict to UTF8 conversion functions because they explode if output==input anyway.
- Removed
cThread - Removed atomic_inc and replaced with atomic_xadd. Intrinsics are now used when possible for MSC in
lockless.h - Added atomic_xchg
- x64 compile now passes all tests
- _trimpath more efficient
- log times now work properly and don't give negative hours
cObjSwapno longer uses Traits (which is a good thing because it would have exploded the instant someone tried using reference traits in it)- Added sseVec for safe SSE optimized vector operations.
- Added tests for object-based
cObjSwapand sseVec. cKhashnow supports move semantics on insert and setvalue, and no longer uses Traitsbun_traits.hhas been removed- Removed
cFixedSizeAlloc - Renamed
cFixedChunkAlloctocFixedAlloc - Fixed compile crash when using DISABLE_CUSTOM_ALLOCATORS
- Reorganized source folder
- Cleared out unnecessary CLR related tags
- Renamed
VSPRINTFtoVSNPRINTFbecause vsprintf is actually an unrelated function, and updatedcStrreferences - Added
VSCPRINTFto deprecated function list in preperation for GCC compilation (currently nonfunctional) cINIstoragesplit intocINIstorage.h,cINIsection.h,cINIentry.h, and accompanying *.cpp filescINIstorageis now a linked list with significantly less overhead for handling unique section and entry IDs.- Added
Front()andBack()tocArrayWrap - Adjusted
cArraySimpleto avoid allocating an array in a constructor if its given an initial size of 0, which can be very valuable when you need to avoidmalloc()hits. -! Swapped keyinstance and secinstance incINIstorageEditEntry to make it consistent with GetEntry. cStrT::SetSize has been removed andcStrT::StripChar actually does what it says it doescStrT::RecalcSizeis no longer capable of touching memory that was reserved and modified. If you were using this before withreserve(), you should switch toresize().- Removed using namespace std; from
StreamSplitterand fixed broken namespace references StreamSplitter,bun_Log, andbun_debuginfonow only have move semantics. For GCC,StreamSplitterhas NO move or copy constructors (because stream_buf doesn't).
- Added windows-specific Registry manipulation functions
- Fixed bug in AdditiveFixedAllocator that over-allocated memory when consolidating
- Added AdditiveVariableAllocator
- Changed all comparisons to use a branch free sign check
- Fixed
functor.hsoCall()actually works. - Moved lockless functions from
bun_util.htolockless.h - Created
bun_compiler.hand put in preliminary compiler detection. - Changed 32bit/64bit to specific architectures.
- There is now a 64BIT flag that should be used only when you need to know the pointer size, not when using architecture specific assembly
cLocklessQueueis nowcLocklessByteQueue- Adjusted
cKhash, which now properly handles hash sets cAVL_Treenow uses standard old-style functors- Fixed fsmall and added dsmall
VERSION_INFO.Patchis nowVERSION_INFO.Revisiontest.exeis now a comprehensive set of unit testscAutoPtr.hnow modifies unique_ptr to be easier to use (this can be turned off)- Custom allocators now verify deallocated pointers and fill them with junk values when possible in debug mode
- All custom allocators using the
Allocatorclass can be disabled by definingBSS_DISABLE_CUSTOM_ALLOCATORS. This is useful if a custom allocator does not fill deallocations with junk, or if the junk filling is insufficient, resulting in an invalid memory access bug being masked. Many compilers also have special hooks for detecting out of bounds memory accesses that only work with the default allocation routines. - Rewrote
cBinaryHeap - Added bunreverse
- removed
cVect.h - Changed
cAutoPtrtocUniquePtr - Refactored the entire Compare methodology and introduced methods of doing only LT and GT comparisons.
- Created
bun_algo.hand movedshuffle()to it. - added
for_all() - added binsearch_near and variants
- Implemented library wide utf8 decoding. Most wchar_t implementations remain, but all char* functions are translated to wchar_t internally. If you happen to recieve strings in wchar_t format, this allows you to avoid unnecessary encoding/decoding while still ensuring all text is utf8 enabled. You should #define _UNICODE in your application if you want to enforce unicode compatability.
cStrconversion betweencStr<->cStrWuse unicode encoder/decoders, so unicode information is always preserved. - Removed wchar_t specialization from
cINIstorageand certain other things. You can no longer output to a wostream - instead, all output will be utf8 encoded. - Removed
Iterator.hand standardized iterators for linked lists, added iterator based begin/end functions. - Added non-standard removal specific iterator for linked lists.
- Extended compiler specific switches and available information
- Added x86_64 platform to project and configured for 64-bit compilation.
- Created workarounds for assembly based functions and removed others in x86_64, allowing bun_util to compile in x86_64
- Adjusted some x86 assembly and added
CPU_Barrier()as an efficient way to prevent CPU re-ordering. - Changed hash to use iterators
- Existing iterator Begin/IterStart functions renamed to
begin()to support range-based for loops - Added unit testing.
- Fixed extremely subtle bug in
cINIStorageand several other bugs
- Added
CLASS_PROP_VALandCLASS_PROP_WRITEONLY_VALfor value-type class property generation - Added smaller valued
log2()overloads (ushort and uchar) - Changed
cSettingsCMD parsing to simply interprete the existence of a boolean flag as setting the value to true - Fixed a
cSettingsconst char* assignment glitch cSettingsnow forces char values to write as numbers- Added char values to possible conversions for
cINIEntry - Added
bytesearch()function - Fixed bizarre bug where fopen in text mode "helpfully" replaced all \n with \n\r and caused infinitely expanding newlines.
- Added generic Iterator class and linkedlist implementations
- Made header gaurds more unique
- Changed the command argument parser to return an unsigned int on size
- filesize returns an unsigned long long instead of an unsigned int
- Added SSCANF to deprecated list
cMapnow properly uses the Key traits- Fixed unholy deluge of useless dll warnings spawned by
cStr cArrayConstructnow properly copies values from othercArrayConstructobjects with respect to constructors- Made
cArraySafewhich properly deconstructs and reconstructs all objects for full type safety cArraySortandcMapcan now use anycArraySimple/cArrayConstruct/cArraySafe- Added
IsValid()helper function tocINIentry - Implemented
cAutoPtr(modification of standard auto_ptr) - Changed all GetSize/GetLength to just
Size()/Length() - Added
cAutoRef cObjSwapnow allows arrays- Completely rewrote
bun_Log - Added
cArrayCircular - Added check for self-assignment to most assignment operators where necessary
- Added move semantics to all low-level objects
- Added GetBitMask and C equivelent
- Changed
cArraySimpleto requirecArrayWrapto be accessible (reduces inheritance issues)
- Initial Public Release