Version 0.20.2 (2019-12-1)
   * Fix to minor bug involving serialization of locked environments

Version 0.20.1 (2019-12-1)
   * More efficient serialization of S4 objects, environments and other complex types (DOTSXP, PROMSXP, CLOSXP)
   * Better support for S4 objects
      * S4 object flags are now correctly serialized and de-serialized (previously, the flag was ignored)
      * S4SXP (non-simple S4 objects with slots) are efficiently serialized, instead of previously relying on R serialization

Version 0.19.1 (2019-9-2)
   * Exposed C++ API for use in other Rcpp packages and Rcpp scripts (https://github.com/traversc/qs/issues/18)

Version 0.18.4 (2019-8-22)
   * Fixed an rchk issue with a missing `PROTECT` call during serialization
   * Various code refactor and optimizations

Version 0.18.3 (2019-8-20)
   * `qsave` now returns invisibly the number of bytes written to file
   * Fixed an issue with deserialization of large S4 objects (https://github.com/traversc/qs/issues/14)
   * Additional serialization and deserialization functions for advanced usage:
      * `qserialize` and `qdeserialize` reads and writes objects in memory to raw vectors
      * `qsave_fd` and `qread_fd` reads and write objects to file descriptors
      * `qsave_handle` and `qread_handle` reads and writes objects to Windows HANDLE pointer (Windows only)
      * `qread_ptr` reads objects from a void pointer

Version 0.18.2 (2019-7-19)
   * Changed license to GPL-3 (https://github.com/traversc/qs/issues/13)

Version 0.18.1 (2019-7-14)
   * Revised header format in order to include more information -- files created by 0.18.1 cannot by read by earlier versions
   * Remove R version restriction.  Previously, `qs` required R >= 3.5.0.  R alt-rep functionality will not be used in earlier versions.  

Version 0.17.3 (2019-7-8)
   * Fixed unprotected variable issue found by rchk (https://github.com/kalibera/rchk)

Version 0.17.2 (2019-7-6)
   * Remove `restrict` keyword from R source files due to Solaris CRAN checks
   * Remove executable file permission from src/* files due to OSX CRAN detecting license files as executable

Version 0.17.1 (2019-6-24)
   * Re-write of `qdump` function to output more information
   * Added regression unit testing for previous versions (tests/regression_testing.R")

Version 0.16.3 (2019-6-21)
   * Use hash checksums for checking file integrity using the `xxhash` library
      * New parameter: `qsave` -- `check_hash`, computes a checksum on the serialized data
      * New paramter: `qread` -- `strict`, throws an error if checksum does not pre-computed value
   * `qdump` function reports checksums
   * Performance optimizations -- use C interface directly rather than Rcpp containers
      * About 180% serialization speed improvement for large lists (e.g., `as.list(runif(1e6))`)
   * Removed `qinspect` function as checks are now performed within serialization functiosn directly
   * Additional error checking for proper compression and serialization
      * The goal is R should not crash even if a file is corrupted

Version 0.16.2 (2019-6-15)
   * Added `Set_elt` method for alt-rep string class (https://github.com/traversc/qs/issues/9)
   * Code cleanup:
      * Additional error checking during compression and de-compression
     * Use of RAII for protection stack handling
      * Use of templates instead of function pointers for compression and decompression
     * Moved some functions to qs_common.h as templates to avoid code redundancy

Version 0.16.1 (2019-5-15)

   * Support for zstd streaming interface.  As opposed to block compression routines, streaming compression offers better compression ratio but is not as fast 
   * Re-factor configure script to not be so messy
   * Changed file suffixes in examples from "q" to "qs" (https://github.com/traversc/qs/issues/5)
   * (Not included) brotli compression library was evaluated, but did not offer better performance compared to zstd on average
   * Updated zstd to version 1.4.0 (from 1.3.8) and lz4 to 1.9.1 (from 1.8.2)
   * Updated benchmarks to include zstd streaming interface and newer versions of zstd and lz4
   * C++ macro compiler warnings fixed in zstd; this needs to be done every time zstd is updated (https://github.com/facebook/zstd/issues/1538)

Version 0.15.1 (2019-04-07)

   * Initial multi-threading support using C++11 concurrency
   * Added support for lz4HC (high compression lz4 variant, but slower compression)
   * Additional error check handling to verify file integrity; see `qinspect` function
   * Additional documentation and examples
   * Normalize file paths before attempting to write or read (https://github.com/traversc/qs/issues/4)
   * Added star name database from the International Astronomical Union; see `?starnames`

Version 0.14.1  (2019-03-03)

   * Support for LZ4 compression codec
   * Defined several compression presets: "fast", "balanced" and "high" which trade speed for compression ratio
   * Byte shuffling routines adapted from the BLOSC library, for higher compression ratios
   * Utility functions for compressing and decompressing raw data using zstd or lz4

Version 0.13.1  (2019-02-13)

   * Added configure file to detect system installation of zstd
   * Fixes to "undefined behavior" (C++ unaligned type casts)

Version 0.12 (2019-02-08)

   * Initial CRAN release
   * This package provides serialization of R objects through block compression with zstd
   * Utilizes Alt-rep data to quickly de-serialize string data
