= Changelog == 0.14 === breaking changes - change the type `'a CCParse.t` with continuations - add labels on `CCParse.parse_*` functions - change semantics of `CCList.Zipper.is_empty` === other changes - deprecate `CCVector.rev'`, renamed into `CCVector.rev_in_place` - deprecate `CCVector.flat_map'`, renamed `flat_map_seq` - add `CCMap.add_{list,seq}` - add `CCSet.add_{list,seq}` - fix small uglyness in `Map.print` and `Set.print` - add `CCFormat.{ksprintf,string_quoted}` - add `CCArray.sort_generic` for sorting over array-like structures in place - add `CCHashtbl.add` mimicking the stdlib `Hashtbl.add` - add `CCString.replace` and tests - add `CCPersistentHashtbl.stats` - reimplementation of `CCPersistentHashtbl` - add `make watch` target - add `CCVector.rev_iter` - add `CCVector.append_list` - add `CCVector.ensure_with` - add `CCVector.return` - add `CCVector.find_map` - add `CCVector.flat_map_list` - add `Containers.Hashtbl` with most combinators of `CCHashtbl` - many more functions in `CCList.Zipper` - large update of `CCList.Zipper` - add `CCHashtbl.update` - improve `CCHashtbl.MakeCounter` - add `CCList.fold_flat_map` - add module `CCChar` - add functions in `CCFormat` - add `CCPrint.char` - add `CCVector.to_seq_rev` - doc and tests for `CCLevenshtein` - expose blocking decoder in `CCSexpM` - add `CCList.fold_map` - add `CCError.guard_str_trace` - add `CCError.of_exn_trace` - add `CCKlist.memoize` for costly computations - add `CCLevenshtein.Index.{of,to}_{gen,seq}` and `cardinal` - small bugfix in `CCSexpM.print` - fix broken link to changelog (fix #51) - fix doc generation for `containers.string` - bugfix in `CCString.find` - raise exception in `CCString.replace` if `sub=""` - bugfix in hashtable printing - bugfix in `CCKList.take`, it was slightly too eager == 0.13 === Breaking changes - big refactoring of `CCLinq` (now simpler and cleaner) - changed the types `input` and `ParseError` in `CCParse` - move `containers.misc` and `containers.lwt` into their own repo - change the exceptions in `CCVector` - change signature of `CCDeque.of_seq` === Other changes - add module `CCWBTree`, a weight-balanced tree, in `containers.data`. - add module `CCBloom` in `containers.data`, a bloom filter - new module `CCHashTrie` in `containers.data`, HAMT-like associative map - add module `CCBitField` in `containers.data`, a safe abstraction for bitfields of < 62 bits - add module `CCHashSet` into `containers.data`, a mutable set - add module `CCInt64` - move module `RAL` into `containers.data` as `CCRAL` - new module `CCThread` in `containers.thread`, utils for threading (+ blocking queue) - new module `CCSemaphore` in `containers.thread`, with simple semaphore - add `containers.top`, a small library that installs printers - add `CCParse.memo` for memoization (changes `CCParse.input`) - add `CCString.compare_versions` - update `CCHash` with a functor and module type for generic hashing - add `CCList.{take,drop}_while`; improve map performance - add `CCList.cons_maybe` - add `CCArray.bsearch` (back from batteries) - add fair functions to `CCKList` - deprecate `CCList.split`, introduce `CCList.take_drop` instead. - add `CCKtree.force` - add tests to `CCIntMap`; now flagged "stable" (for the API) - add `CCOpt.choice_seq` - add `CCOpt.print` - add `CCIntMap.{equal,compare,{of,to,add}_{gen,klist}}` - add `CCThread.Barrier` for simple synchronization - add `CCPersistentArray.{append,flatten,flat_map,of_gen,to_gen}` - add `CCDeque.clear` - add `CCDeque.{fold,append_{front,back},{of,to}_{gen,list}}` and others - add `CCKList.{zip, unzip}` - add `CCKList.{of_array,to_array}` - add `CCKList.{head,tail,mapi,iteri}` - add `CCKList.{unfold,of_gen}` - add `CCParse.{input_of_chan,parse_file,parse_file_exn}` - modify `CCParse.U.list` to skip newlines - add `CCDeque.print` - add `CCBV.print` - add printer to `CCHashtbl` - bugfix in `CCSexpM` - new tests in `CCTrie`; bugfix in `CCTrie.below` - lots of new tests - more benchmarks; cleanup of benchmarks - migration of tests to 100% qtest - migration markdown to asciidoc for doc (readme, etc.) - add tests to `CCIntMap`, add type safety, and fix various bugs in `{union,inter}` - more efficient `CCThread.Queue.{push,take}_list` - slightly different implem for `CCThread.Queue.{take,push}` - new implementation for `CCDeque`, more efficient - update makefile (target devel) == 0.12 === breaking - change type of `CCString.blit` so it writes into `Bytes.t` - better default opening flags for `CCIO.with_{in, out}` === non-breaking NOTE: use of `containers.io` is deprecated (its only module has moved to `containers`) - add `CCString.mem` - add `CCString.set` for updating immutable strings - add `CCList.cons` function - enable `-safe-string` on the project; fix `-safe-string` issues - move `CCIO` from `containers.io` to `containers`, add dummy module in `containers.io` - add `CCIO.read_all_bytes`, reading a whole file into a `Bytes.t` - add `CCIO.with_in_out` to read and write a file - add `CCArray1` in containers.bigarray, a module on 1-dim bigarrays (experimental) - add module `CCGraph` in `containers.data`, a simple graph abstraction similar to `LazyGraph` - add a lot of string functions in `CCString` - add `CCError.catch`, in prevision of the future standard `Result.t` type - add `CCError.Infix` module - add `CCHashconsedSet` in `containers.data` (set with maximal struct sharing) - fix: use the proper array module in `CCRingBuffer` - bugfix: `CCRandom.float_range` == 0.11 - add `CCList.{remove,is_empty}` - add `CCOpt.is_none` - remove packs for `containers_string` and `containers_advanced` - add `Containers_string.Parse`, very simple monadic parser combinators - add `CCList.{find_pred,find_pred_exn}` - bugfix in `CCUnix.escape_str` - add methods and accessors to `CCUnix` - in `CCUnix`, use `Unix.environment` as the default environment - add `CCList.partition_map` - `RingBuffer.{of_array, to_array}` convenience functions - `containers.misc.RAL`: more efficient in memory (unfold list) - add `CCInt.pow` (thanks to bernardofpc) - add `CCList.group_succ` - `containers.data.CCMixset`, set of values indexed by poly keys - disable warning 32 (unused val) in .merlin - some infix operators for `CCUnix` - add `CCUnix.async_call` for spawning and communicating with subprocess - add `CCList.Set.{add,remove}` - fix doc of `CCstring.Split.list_` == 0.10 - add `containers.misc.Puf.iter` - add `CCString.{lines,unlines,concat_gen}` - `CCUnix` (with a small subprocess API) - add `CCList.{sorted_merge_uniq, uniq_succ}` - breaking: fix documentation of `CCList.sorted_merge` (different semantics) - `CCPersistentArray` (credit to @gbury and Jean-Christophe Filliâtre) - `CCIntMap` (big-endian patricia trees) in containers.data - bugfix in `CCFQueue.add_seq_front` - add `CCFQueue.{rev, --}` - add `App_parse` in `containers.string`, experimental applicative parser combinators - remove `containers.pervasives`, add the module `Containers` to core - bugfix in `CCFormat.to_file` == 0.9 - add `Float`, `Ref`, `Set`, `Format` to `CCPervasives` - `CCRingBuffer.append` (simple implementation) - `containers.data` now depends on bytes - new `CCRingBuffer` module, imperative deque with batch (blit) operations, mostly done by Carmelo Piccione - new `Lwt_pipe` and `Lwt_klist` streams for Lwt, respectively (un)bounded synchronized queues and lazy lists - `CCKTree.print`, a simple S-expressions printer for generic trees - Add `CCMixmap` in containers.data (close #40), functional alternative to `CCMixtbl` - remove old META file - simplified `CCTrie` implementation - use "compiledObject: best" in `_oasis` for binaries - document some invariants in `CCCache` (see #38) - tests for `CCCache.lru` - fix `CCFormat.seq` combinator - add `CCSet` module in core/ - add `CCRef` module in core/ == 0.8 - add `@Emm` to authors - refactored heavily `CCFuture` (much simpler, cleaner, basic API and thread pool) - add `CCLock` in containers.thread - merged `test_levenshtein` with other tests - Add experimental rose tree in `Containers_misc.RoseTree`. - remove a lot of stuff from `containers.misc` (see `_oasis` for details) - `make devel` command, activating most flags, for developpers (see #27) - use benchmark 1.4, with the upstreamed tree system - test `ccvector.iteri` - add `CCFormat` into core/ - infix map operators for `CCArray` - `fold_while` impl for `CCList` and `CCArray` - Added `CCBigstring.length` for more consistency with the `CCString` module. - Added name and dev fields in the OPAM file for local pinning. - Fix `CCIO.remove*` functions. - Added `CCIO.remove_safe`. - only build doc if all the required flags are enabled - `CCHashtbl.{keys,values}_list` in the functor as well. Better doc. - `CCHashtbl.{keys,values}_list` - more accurate type for `CCHashtbl.Make` == 0.7 === breaking - remove `cgi`/ - removed useless Lwt-related module - remove `CCGen` and `CCsequence` (use the separate libraries) - split the library into smaller pieces (with `containers.io`, `containers.iter`, `containers.sexp`, `containers.data`) === other changes - cleanup: move sub-libraries to their own subdir each; mv everything into `src/` - `sexp`: * `CCSexp` now splitted into `CCSexp` (manipulating expressions) and `CCSexpStream` * add `CCSexpM` for a simpler, monadic parser of S-expressions (deprecating `CCSexpStream`) - `core`: * `CCString.fold` * `CCstring.suffix` * more efficient `CCString.init` * fix errors in documentation of `CCString` (slightly over-reaching sed) * add `CCFloat.{fsign, sign_exn}` (thanks @bernardofpc) - new `containers.bigarray`, with `CCBigstring` - `CCHashtbl.map_list` - `io`: * `CCIO.read_all` now with ?size parameter * use `Bytes.extend` (praise modernity!) * bugfix in `CCIO.read_all` and `CCIO.read_chunks` - use `-no-alias-deps` == 0.6.1 - use subtree `gen/` for `CCGen` (symlink) rather than a copy. - Add benchmarks for the function `iter` of iterators. - `CCKTree`: more printers (to files), `Format` printer - `CCOpt.get_lazy` convenience function - introduce `CCFloat`, add float functions to `CCRandom` (thanks to @struktured) == 0.6 === breaking changes - new `CCIO` module, much simpler, but incompatible interface - renamed `CCIO` to `advanced.CCMonadIO` === other changes - `CCMultiSet.{add_mult,remove_mult,update}` - `CCVector.{top,top_exn}` - `CCFun.compose_binop` (binary composition) - `CCList.init` - `CCError.map2` has a more general type (thanks to @hcarty) - new module `CCCache` * moved from `misc` * add `CCache`.{size,iter} * incompatible interface (functor -> values), much simpler to use - `lwt/Lwt_actor` stub, for erlang-style concurrency (albeit much much more naive) - `misc/Mixtbl` added from its old repository - more benchmarks, with a more general system to select/run them - more efficient versions of `CCList.{flatten,append,flat_map}`, some functions are now tailrec == 0.5 === breaking changes - dependency on `cppo` (thanks to @whitequark, see `AUTHORS.md`) and `bytes` - `CCError`: * now polymorphic on the error type * some retro-incompatibilies (wrap,guard) - `CCPervasives.Opt` -> `CCPervasives.Option` - `Levenshtein.Index.remove` changed signature (useless param removed) === other changes - stronger inlining for `CCVector` (so that e.g. push is inline) - more tests for `CCVector` - removed many warnings - `CCSequence` now provides some bytes-dependent operations - `CCList.(>|=)` map operator - `CCOpt.filter` - `CCInt.neg` - `CCMap` wrapper to the standard `Map` module - make some functions in `CCFun` and `CCString` depend on ocaml version - thanks to @whitequark, could use cppo for preprocessing files - add Format printers to `CCString` - `AUTHORS.md` == 0.4.1 - `CCOpt.get` - new functions in `CCSexp.Traverse` - comments in `CCMultiSet.mli`, to explain meet/intersection/union - `CCMultiset`: Add meet - update of readme - generate doc for `containers.advanced` == 0.4 - `core/CCSexp` for fast and lightweight S-expressions parsing/printing - moved `CCLinq`, `CCBatch` and `CCat` from core/ to advanced/ - ensure compatibility with ocaml 4.00 - get rid of deprecated `Array.create` - move benchmarks to benchs/ so they are separate from tests - `CCError.{iter,get_exn}` - `CCPair.print` - some small improvements to `CCRandom` - moved `CCHashtbl` to `CCFlatHashtbl`; new module `CCHashtbl` that wraps and extends the standard hashtable - `CCPervasives` module, replacing modules of the standard library - removed type alias `CCString.t` (duplicate of String.t which already exists) == 0.3.4 - subtree for `sequence` repo - `CCSequence` is now a copy of `sequence` - `CCOpt.wrap{1,2}` - `CCList.findi`, `CCArray.findi` and `CCArray.find_idx` - better `Format` printers (using break hints) - specialize some comparison functions - `CCOrd.map` == 0.3.3 - readme: add ci hook (to http://ci.cedeela.fr) - `CCIO`: monad for IO actions-as-values - explicit finalizer system, to use a `>>>=` operator rather than callbacks - `File` for basic filenames manipulations - `Seq` for streams - `CCMultiMap`: functor for bidirectional mappings - `CCMultiSet`: sequence - renamed threads/future to threads/CCFuture - big upgrade of `RAL` (random access lists) - `CCList.Ref` to help use references on lists - `CCKList`: `group,uniq,sort,sort_uniq,repeat` and `cycle`, infix ops, applicative,product - `CCTrie.above/below`: ranges of items - more functions in `CCPair` - `CCCat`: funny (though useless) definitions inspired from Haskell - `CCList`: applicative instance - `CCString.init` - `CCError.fail_printf` == 0.3.2 - small change in makefile - conversions for `CCString` - `CCHashtbl`: open-addressing table (Robin-Hood hashing) - registered printers for `CCError`.guard,wrap1,etc. - monadic operator in `CCList`: `map_m_par` - simple interface to `PrintBox` now more powerful - constructors for 1 or 2 elements fqueues - bugfixes in BTree (insertion should work now) - `CCFQueue`: logarithmic access by index - add BTree partial implementation (not working yet) - fix bug in `CCPrint.to_file` - `CCArray.lookup` for divide-and-conquer search - `CCList.sort_uniq` - `CCError`: retry and choose combinators - stub for monadic IO in `CCPrint` - `CCopt.pure` - updated `CCPersistentHashtbl` with new functions; updated doc, simplified code - move `CCString` into core/, since it deals with a basic type; also add some features to `CCString` (Sub and Split modules to deal with slices and splitting by a string) - `CCArray.blit`, `.Sub.to_slice`; some bugfixes - applicative and lifting operators for `CCError` - `CCError.map2` - more combinators in `CCError` == 0.3.1 - test for `CCArray.shuffle` - bugfix in `CCArray.shuffle` - `CCOpt.get_exn` - `CCOpt.sequence_l` - mplus instance for `CCOpt` - monad instance for `CCFun` - updated description in `_oasis` - `CCTrie`, a compressed functorial persistent trie structure - fix `CCPrint.unit`, add `CCPrint.silent` - fix type mismatch NOTE: `git log --no-merges previous_version..HEAD --pretty=%s`