# 2.0.0 * Bump API version; * Remove arr from dev; * Make nulptr into a function; * Remove isusgn; * Replace C++ maxval, minval, is*typ, and issgn classes with common metaprogramming class: typ; * Add metaprogramming class for detecting reference types: isref; * Fix infdl; * Rename remqual to remcv; * Fix nan and inf for qualified types; # 1.1.1 * Fix res dtor calls; * Update logo colours; # 1.1.0 * Bump extension version; * Add type for storing either errors or return values: res; * Add type for dynamic arrays: arr; * Make cpy, equ, fil, and srh run-time and throwable; * Bring back opt; * Add move constructor for arr; * Add method to arr for getting the underlying pointer; * Add copy constructor for arr; * Add method for checking if the arr is okay; * Update logo; * Update logo; * Rework opt; * Add equivalent to C++ move: fwd; * Inline some opt and res methods; * Add namespace for experimental features: dev; * Move arr to this namespace; * Don't define methods in class definitions; * Require C++11 for opt, res, and arr; * Rework opt and res; * Make opt and res constexpr (except for exp); * res: Overload oky and err with const-reference parameters; * Don't make res and opt constexpr; * Define destructors for opt and res; * Define conversion function for opt; * Make assignment operators return references; * Fix text paddings; * Add algorithm for moving: mov; # 1.0.0 * Update API-BREAK file; * Don't call run-time functions from translation-time functions; * Remove Zap version tags; * Implement memcpy on ARM; * Update readme; * Update logo; * Implement memcpy on ARM64; * Update run-time tests; * Wrap arguments in parantheses in isnan; * Return the one-after-the-end address of the destination from memfil and fil; * Increment the extension version; * Add metaprogramming class for determening pointer types: isptr; * Fix run-time tests printing equal on inequality; * Rename API-BREAK to FEATURE-WISHLIST; * Don't build project in installation script; * Add development branch 'development'; * Rename arch-macros to arc; * Update versioning scheme; * Rename impl macros to imp; * Rename os macros to sys; * Remove FEATURE-WHISHLIST and move relevavnt content to readme; * Bump API version; * Update readme (fix typo); * Fix useq; * Add more comments to headers; * Rename syscalret to syscalres; * Rename cpyret to cpyres; * Update syscalid and syscalres types; * Add development guidelines to readme; * Fix nulptrtyp; * Remove C++ nulptr; * Add license file; * Actually don't build project in installation script; * Remove logo from readme; * List logo colours in readme; * Add logo section to readme; * Remove development branch; * Revert u8c merge; * Remove build artefacts; * Rebase (post-zp commits only); * Implement remaining C functions in C++; * Use NASM on AMD64; * Remove build artefacts; * Switch back to GNU Make; * Add u8c logos; * Remove installation script; * Update target detection script; * Update gitingore; * Use NASM on IA-32; * Don't use libfmt in rttest; * Fix uninitialised variable in rttest; * Make test support C++20; * Fix out-of-bounds write in strcpy; * Fix installation target; * Add more run-time tests; * Rename likly and ulikly to lik and ulik; * Fix memcpy results on ARM; * Fix order of parameters in memcpy on ARM; * Add more assembly comments; * Update run-time test start message; * Assemble missing objects; * Fix object variable names in makefile; * Fix wrong symbols; * Support C++11; * Make constexpr conditional; * Use raw metaprogramming classes; * Remove specialisations for nulptrtyp; * Rename private namespace: priv => prv; * Rename isarith to isari; * Clean up makefile; * Support C++98; * Make some facilities standard-dependent; * Don't implement one-line functions in seperate files; * Remove restr; * Update optimisation flags; * Use reference for value in fil and srh; * Qualify template parameters correctly; * Update template typings; * Make all C++ functions (except cpy, equ, isconsteval, fil, and srh) run-time; * Implement some functions in C again; * Add private header directory; * Add function for filling strings: strfil; * Don't always define nulptrtyp; * Mind the digraphs; * Combine tests; * Support C90; * Don't use C++-style comments; * Fix typings of constants; * Remove pair type (replace with divmodres); * Remove member functions from vector classes; * Don't implement mathematical functions as templates in C++; * Update naming convention for vector functions; * Add more trigonometric functions; * Temporarily remove fmt; * Fix missing include in test; * Disable metaprogramming classes in standards before C++11; * Use double long instead of long double; * Overload metaprogramming classes with qualified types; * Fix C++ memcpy; * Add metaprogramming classes for removing references and pointers; * Make test support C++17; * Compile position-independent code; * Fix installation target installating old private header directory; * Use tagging for development versions; * Fix minval and maxval; * Rename sz to siz; * Update readme; * Add matching concepts for C++20; * Rename bs module to bas; * Rename is* metaprogramming classes back to is*typ; * Rename isconsteval to iscstevl; * Rename syscal to syscal; * Don't declare C++ syscal as noexcept; * Rename syscalid to syscalidt; * Add more comments to headers; * Update and fix standard-detection macros; * Update target detection in makefile; * Update readme; * Add isnan to C++; * Rename nthrw to nthw; * Add constant-evaluated mathematical functions; * Rename dist to dst; * Implement cpy, equ, fil, and srh in C++11; * Use shared implementation files; * Fix install target; * Rename nret back to noret; * Rename useq to unseq; * Rename urch to unrch; * Rename ulik to unlik; * Rename bas module to zp; * Rename extver to ext; * Rename ver to api; * Fix installation target; * Update header guards; * Typedef structures again; * Rename nthw to nothw; * Add missing prefix to divmod types; * Use structure for version constant (use oldstyle in C); * Use maxval for inf fallback; * Fix trtval; * Add optional type: opt; * Remove minimum-width integral types; * Guarantee fixed-width integral types; * Guarantee fixed-width floating-point types; * Remove extended fixed-width integral types; * Remove extended fixed-width floating-point types (including f01); * Only overload mathematical functions for fixed-width types; * Move inf and nan to zp; * Fix urch not being renamed to unrch in C++; * Remove constant mathematical functions; * Fix isnan not being present in C++ API; * Fix prefixes and sufixes being present on C++ objects; * Fix changelog; * Add more math tests; * Implement C++ isnan; * Don't implement isnan as a macro; * Fix syscal not being translated; * Rename targ variable to tar; * Don't use "fast" optimisation; * Add signed equivalent to siz: sizerr (size error); * Remove nopos; * Fix ptrdif not being defined; * Rename intptr to ptr; * Use int long and int long long instead of long and long long; * Update type identifiers; * Fix long doulbe type suffixes; * Remove fmtlen; * Temporarily disable fmt; * Temporarily disable opt; * Update file structure of private headers; * Use int short instead of short; * Rename implementation file directory: imp => det; * Fix *fil functions; * Bring back restr (as rsr and private); * Fix text paddings; * Fix utf32srh * Rename sys identifiers: - openbsd => opnbsd; - freebsd => frebsd; - drgnfly => drgfly; - hurd => hrd; - linux => lnx; - minix => mnx; - unix => unx; * Rename imp identifiers: - clang => cln; - cray => cry; - msvc => msc; - tiny => tcc; - watcom => wat; * Remove logo section from readme; * Update logo; * Remove u8c logos; * Revert logo resize; * Update logo colour; * Fix install target; * Fix comments; * Fix typings of vectors; # 0.0.2 * Migrate to CMake; * Fix useres using the nodiscard attribute in all C++ editions; * Fix the nodiscard attribute being used; * Fix nthrw not always being specified; * Don't use designated initialisation in C++; * Fix trp definition in any; * Add new file for listing potential API-breaks (API-BREAK.txt); * Disable system calls by default; * Fix getarch script on IA-32; * Rename getarch script to getTarget; * Add installation script; * Update gitignore; # 0.0.1 * Fix unused parameter and invalid invocation in overload of srh; # 0.0.0 * Rename C++ cp to cpy; * Rename C++ eq to equ; * Rename C++ srch to srh; * Rename C cp and C++ bytecp to memcpy; * Rename C eq and C++ byteeq to memequ; * Rename C fill and C++ bytefill to memfil; * Add function for copying strings: strcpy; * Add function for searching strings: strsrh; * Rename cpyret.dest to cpyret.dst; * Add new headers to makefile; * Rename math to mth; * Rename root to nrt; * Rename unreach to urch; * Make likly and ulikly public; * Add extver to C++; * Fix fixflt macros; * Rename trap to trp; * Add functions for UTF-16 encoding/decoding; * Add C++ variants to UTF-8, UTF-16, and Windows-1252 functions; * Move public C++ definitions to implementation files ('.ii); * Make C++ string functions call their C equivalent at run-time; * Add wide-string and UTF-32-string functions to C; * Rename typeq to typequ; * Use built-in type _Bool in C; * Fix language-detection macros; * Don't typedef cpyret; * Fix C-implementation of cpy; * Fix C-implementation of syscall; * Define wchr as wchar_t in C++; * Add minimum-width character types; * Add minimum-width integral types; * Update type codes; * Remove type identifiers; * Install implementation files; * Fix non-existent source being referenced on ARM64; * Use trailing return types; * Fix isflttyp; * Add more fixed-width floating-point types; * Add more fixed-width integer types; * Make ifconsteval public in the form of a compile-time function; * Don't typedef pair; * Add mathematical functions to C++; * Add NaN constants; * Add infinity constants to C; * Add mathematical function for natural logarithm (unimplemented); * Add mathematical function for binary logarithm (unimplemented); * Add mathematical function for common logarithm (unimplemented); * Add mathematical function for cube root (unimplemented); * Add mathematical functions for distance (unimplemented); * Add mathematical function for arc cosine (unimplemented); * Add mathematical function for arc sine (unimplemented); * Add mathematical function for arc tangens (unimplemented); * Add mathematical function for logarithm (unimplemented)s * Add mathematical functions for dot product; * Add structures for vectors; * Add classes for vector; * Add mathematical function for fourth root (unimplemented); * Assert arithmetic types in mathematical templates; * Rename sign to sgn and usign to usgn; * Add functions for adding vectors; * Add functions for subtracting vectors; * Implement 'any' architecture using C++; * Add metaprogramming class for determening signed and unsigned types; * Add UTF-8 encoders/decoders to C++; * Add format to C++; * Change type of fmtlen to sz; * Remove attr prefix from attributes; * Support shared libraries; * Rename unuse to nuse; * Remove sys and move members to bs; * Add types for system call return values and system call identifier; * Rename C srch and C++ bytesrch to memsrh; * Restructure headers and implementations files; * Add constant that defines the largest Unicode codepoint: unimax; * Clean up code; * Use binary literals; * Rename is*typ to is*; * Add functions for determening non-numbers; * Add minimum-value and maximum-value constants to floating-point types; * Define dos on DOS-like systems; * Don't use file extensions for C++ headers; * Update type codes; * Change namespace to zp; * Rename noret to nret; * Rename project to zp (from zap); * Add readme; * Reset version epoch; * Add logo; * Add csys logo; * Add null pointer type: nullptrtyp; * Rename cmp to impl; * Rename lang to std; * Rename syscall to syscal; * Add more comments to headers; * Rename nullptr to nulptr; * Add attribute for warning against unused results; * Change type of ver and extver to i04m; * Add type for storing the result of pointer subtraction: ptrdif; * Rename ptr to intptr; * Update gitignore; * Rewrite test program; # 1B.0.1 * Fix CSys still being included; # 1B.0.0 * Move C++ facilities to their own headers; * Add more C++ variants; * Add fixed-width floating-point types; * Make minimum-width integer types fixed-width; * Update code style; * Add new module 'sys'; * Add syscall function; * Add option to disable sys module; * Add function to mark unreachable code; * Make trap public; * Remove version checks; * Add floating-point mathematical functions; * Add compiler detection macros; * Fragmentate headers; * Add character sign detection; * (Temporarily) remove support for MIPS, POWER, and SPARC; * Make noret public; * Add attributes; * Use MSVC constructs; * Make restr public; * Fix C++ srch; * Install new headers; * Add "bytewise" overloads for C++ memory functions; * Add metaprogramming class for removing type qualifiers; * Overload C++ maxval and minval for character types and the boolean type; * Add wchr type to C; * Add macros for detecting the language standard; # 1A.0.0 * cp: Return structure with the one-after-the-end addresses of both dest and src; * Remove all mathematical functions except divmod (and C++ variants); * Combine quotrem and frac into new type 'pair'; * Use new versioning: api.ext.patch; * Remove compatver (and add extver); # 19.0 * Return the one-after-the-emd address from cp; * (amd64) Fix wrong registers being used in cp and the function not working at all; * Add compatibility version constant; * Add compile-time string functions for C++; * Check type in compile-time functions; * Add more type checking constants for C++; # 18.1 * Enable debug symbols; # 18.0 * Add integer-string format functions; * Move string-related facilities to new module 'str'; * Update code style; * Add aliases for C++; * Add C++ metaprogramming classes; * Fix C/C++ standard detections; * Add more attributes to functions; * Implement mathematical functions in C++; * Implement mathematical functions using basic arithmetic types, including (depending on the function) signed, unsigned, and floating-point; * Add fraction structure; # 17.0 * Add functions for null-terminated strings: streq (for equality checking), strlen (for getting the length); * Add type limit macros; * Rename bytesz to bytelen; * Remove byte type; * Remove bool type (and related macros); * Remove chr8, chr01, and chr02 types; * Update nullptr definition; * Update nopos definition; # 16.7 * Fix segmentation fault in fill caused by usage of wrong register (amd64); # 16.6 * cp: Use vmovdqu instead of vmovups (amd64); # 16.5 * Optimise fill (amd64); * Optimise cp (amd64); # 16.4 * Update assembly comments; * Implement fill in AMD64; * Remove signal support; * Fix exp; # 16.3 * Implement exp; * Fix bad directory name; * Fix makefile; # 16.2 * Implement cp and abs in AMD64; * Fix indentations; * Implement cp and abs in ARM64; # 16.1 * Add install target to makefile; * Fix csys usage; # 16.0 * Rewrite project (the following is the current feature set); * Add minimum-width unsigned integer types: i8, i01, i02, i04; * Add minimum-width signed integer types: i8s, i01s, i02s, i04s; * Add type for object sizes: sz; * Add type for pointer values: ptr; * Add function for logical values: bool; * Add logical constants: false, true; * Add function for memory sequence copying: cp; * Add function for memory sequence filling: fill; * Add types for storing quotients and remainders: quotrem8, quotrem01, quotrem02, quotrem04; * Add function for division and modulo: divmod; * Add function for getting absolute values: abs; * Add function for memory sequence comparison: eq; * Add function for radication: root (unimplemented); * Add function for exponentiation: exp (unimplemented); * Add function for bytes value searching: srch: * Add constant for indicating invald positions: nopos; * Add constant for indicating null pointers: nullptr; * Add types for UTF-8, UTF-16,a and UTF-32 values: chr8, chr01, chr02; * Add function for UTF-8 encoding: utf8enc; * Add function for UTF-8 decoding: utf8dec; * Add function for UTF-32 to UTF-8 length calculations: utf8enclen; * Add function for UTF-8 to UTF-32 length calculations: utf8declen; * Add function for Windows-1252 encoding: win1252enc; * Add function for Windows-1252 decoding: win1252dec; * Add function for logarithming: log (unimplemented); # 15.1 * mem: Implement; * docs: Add example definition to mem; # 15.0 * Add new module mth; * Add mathematical functions: abs, div, exp, log, mul, nrt (currently, only abs has been implemented); * Add structure for fractions (frac); * Fix version; * Re-add documentation; * Add maximum and minimum values for types; # 14.0 * memcat: Remove; * strcat: Remove; * memcp: Return number of copied bytes; * memfill: Return number of filled bytes; # 13.1 * Implement memcnt in assembly; # 13.0 * Add counting function; * Rename foreach to memfor; * Rename fndbtyte to memfnd; * Rename fndchr to strfnd; # 12.2 * Improve assembly readability (save utf8enc and utf8enclen for later); * Update readme; * Fix memory leak in demo; # 12.1 * Remove typing of nullptr; # 12.0 * Add function for getting the length of UTF-32 strings; # 11.1 * Fix install target; # 11.0 * Remove memcmp and strcmp; * Restructure sources; * Remove root makefile; # 10.1 * Don't use susinfo; # 10.0 * Update readme; * Fix typo in makefile; * Include headers inside header guard; * Remove unneeded includes; * Rename private include directory: 'include-priv' => 'include-private'; * Remove assembly support from (public) headers; * Remove fastimpl (assembly algorithms are still used); * Add copyright/license notices to makefiles; * Seperate sources according to header; * Require GNU Make; * Move (most) C-implementations into a seperate project: zapx; * Restructure assembly; * Implement strfill in assembly; * Use new versioning system (api.ver); * Remove documentation; * Add features from latest standard; * Temporarily remove i386 implementations; * Update readme format; * Update changelog format; * Remove impl; * Remove stdver; * Readd ver; * Use git tagging; # F * Remove type specifier from version macro; * Add mathematical functions abs and fma; * Update documentation; * Remove nothrw attribute from foreach; * Remove UB from foreach test; * Fix parameter mismatch in foreach test; * Use unsigned char instead of uint_least8_t; * Remove unnecessary casts; * Add new headers: 'zap/math.h' (for mathematical functions), 'zap/mem.h' (for memory sequence functions); * Restructure makefile; * Fix not using INT_LEAST8_MAX and INT_LEAST8_MIN instead of INT8_MAX and INT8_MIN; * Remove '/build' from gitignore; # E * Fix incorrect version number; # D * Add function foreach: Run function on each element; * Use directive globl instead of global in assembly; * Use SIZE_MAX instead of negative one; * Remove asflags from makefile; * Don't require GNU Make; * Change the type of fndbyte: (size_t (void const *,size_t,uint_least8_t)) => (size_t (void const *,size_t,unsigned char)); * Change the type of memfill: (void (void *,size_t,uint_least8_t)) => (void (void *,size_t,unsigned char)); * Update readme (add documentation for some functions); * Update susinfo symbol names; # C * Fix install target; * Remove type literals; # B * memdup: Use sus_unlikely instead of __builtin_expect; * Rename project to zap (from rgo); * Remove global license file (useless with MPL); * Migrate test to C++ (for reasons which will be revealed later); * Restructure headers; * Add include guards to the private header; * Add attribute useret to functions; * Require GNU Make; * Compile position independent code; * Update readme; # A * Installation script: Create installation directories if they don't already exist; * Don't use susinfo types; * Remove declarations for getbinver; * Add memcmp, strcmp; * Update makefile; * Reimplement fastimpl as a global variable; * Change type of fastimpl (uint_least8_t => _Bool); * Change the return types of memeq and streq (uint_least8_t => _Bool); * Enable compilation warnings; * Add type literals (like those from susinfo); * Use *int_leastN_t instead of *intN_t; * Remove restrict-qualifications; * Remove C++ version of memdup; # 9 * Fix readme not reflecting that we now support all platforms; * Rename the 'Building' section in the readme to 'Building & Installing'; # 8 * Use susinfo; * Implement algorithms in C (with inline assembly on supported platforms); * Add comments; * Fix strcpy counting the null-terminator; * Fix strcpy taking a pointer-to-const as the output; * Implement strcpy, streq in IA-32; * Optimise streq: Only use the lower eight bytes for the return value; * Optimise strlen: Use fewer registers; * Fix memfill taking a pointer-to-const as the output; * Fix strfill taking a pointer-to-const as the output; * Update readme; * Add private header; * Remove assembly-specific version macro; # 7 * Relicense under MPL2; * Instead of throwing an error, define a macro when the header is included on an unsupported platform; # 6 * Remove stupid debug return from memcpy; # 5 * Fix compile flags not indicating new relative header location; # 4 * Add install target to makefile; * Merge makefiles; # 3 * Enable compiler optimisations; * Optimise memfill; * Optimise memcpy: Use movdqu instead of movups (AMD64, i386 SSE2), add 256-bit copy (AMD64 AVX, i386 AVX); * Update makefile; * Implement fndbyte, fndchr, strlen in IA-32; * Fix bug in test; * Update readme; * Add new planned architectures: Motorola 68000, Power ISA, RISC-V, Sparc; # 2 * Fix target purge in makefile not being labeled phony; * Add machien architecture check in header; * Implement memcpy, memeq, memfill in IA-32; * Fix some incorrect comments; * Use a different register order for temporaries and optimise register usage; * Fix bug in memeq: Should jump if zero, not if equal; * Update readme; # 1 * Fix indentation in license notices; * Fix incorrect declaration for rgo_strcpy, rgo_streq; * Implement fndbyte,memeq,strcpy,streq; * Add new tests; * Fix bug in memcpy: Should jump if zero, not if equal; * Remove declaration for rgo_memcmp; * Add macro rgo_ver, defined to the current version number; * Add assembly declaration for rgo_fndchr, rgo_fndbyte; * Fix some incorrect comments; * Use movups instead of movdqu in memcpy; # 0 * Initial.