package containers-data
A set of advanced datatypes for containers
Install
Dune Dependency
Authors
Maintainers
Sources
containers-3.16.tbz
sha256=1e7992cb2e59c0d2290d1b6c3a31531b3f310be6170b8ef3dde17ccd876b5b79
sha512=bb124e69ad0690f88393e18eee499be07761e767593558867aab32f643466b43258ced503170b154ca3b56dbd68987abd6d9438cf473707ec9866511589a5b84
doc/CHANGELOG.html
3.16
- breaking: Renamed predicate parameter of
take_while
,rtake_while
fromp
tof
, aligining it with pre-existingdrop_while
. - feat: add
containers.leb128
library - feat: add
CCFun.with_return
- Added functions to the
Char
module to check common character properties. - feat: add
CCVector.findi
- fix: compat with OCaml 5.4
- fix: oob(!!) in CCHash.bytes
3.15
- Add
CCList.split_result
(#459) - pretty printer in MultiSet
CCHeap
: building a heap from an almost-sorted sequence- perf:
CCHeap
: building a heap from n elements is now in time O(n) instead of O(n log n) - perf:
CCHeap
:filter
anddelete_all
are now in time O(n) instead of O(n log n), and they ensure physical equality (fordelete_all
this is a bugfix)
3.14
- predicate combinators:
and_pred
andor_pred
- feat
pp
: add a bunch of extensions - Kleisli Composition Operator and Apply_or for option/result/fun (#455)
- add
CCByte_buffer.to_slice
- add a byte slice type
CCByte_slice
- add
cons_when
toCCListLabels
- add
(|||>)
and||>
toCCFun
CCVector
: Add function foldi- add
containers.pvec
, a persistent vector type. - perf: use a monomorphic impl for
CCMonomorphic.{min,max}
3.13.1
- list: TRMC was in 4.14, we can use it earlier
- fix insidious bug in CCList.flat_map linked to unspecified evaluation order
- perf: use
concat_map
forCCList.flat_map
on >= 5.1 (this also re-fixes the same bug inCCList.flat_map
anyway)
3.13
- breaking: delete containers-thread (which was deprecated)
- breaking: pp: modify
Ext.t
so it takes surrounding value - breaking: remove CCShims
- CCMultiMap: Rename functions find_left and find_right in the bidirectional multimap to find_left_iter and find_right_iter respectively to reflect their usage, and add new functions to replace the old find_left and find_right that return a list of values rather than an iterator, to make the signatures of CCMultiMap.S and CCMultiMap.BIDIR cohere. Additionally, change the return type of
S.find_iter
fromt -> key -> (value -> unit) -> unit
tot -> key -> value iter
. - CCList: add
unfold
- CCBool: Add functions if_then and if_then_else
- CCList: remove some functions that are subsumed by the stdlib
- CCList: use TRMC for many functions on 5.1
- feat CCFunvec: add
fold_rev
- add
Containers_pp.newline_or_spaces
- cleanup: remove stubs for code always present on 4.08, rely on newer functions in 5.1
- perf: accelerate
List.append
andList.flat_map
on 5.1 - more warnings, more tests, cleanup dead code
- change COC to ocaml-coc
3.12
- add
containers.pp
sublibrary, with Wadler-style pretty printing combinators - add
CCArray.{max,argmax,min,argmin}
and their _exn counterparts - add
CCParse.take_until_success
- add
Option.flat_map_l
- add
CCSet.{find_first_map,find_last_map}
CCHash
: native FNV hash for int64/int32- fix bugs in CCParse related to
recurse
andSlice
- fix: fix Set.find_last_map on OCaml 4.03
- fix: make sure
Vector.to_{seq,gen}
captures the length initially
3.11
- official OCaml 5 support
- add
CCFun.(let@)
(if OCaml >= 4.08) - add
CCHet.Tbl.{clear,reset}
- fix(CCVector): concurrent modification safety in
resize_with
- fix(CCVector): always obtain a copy of array before using unsafe_{set,get}
- CI: add ocaml 5.0.x
3.10
CCArray
: addmapi_inplace
- add sublibrary
containers.scc
for strongly connected components CCSeq
: addconcat_map
CCSeq
: add some missing function from 4.14- add
CCInt64.{hash,hash_to_int64}
Ref
: addprotect
function- fix: include
Seq
inCCSeq
for ocaml >= 4.07
3.9
- feat: add
Containers_cbor
module - feat(CCInt32): add popcount function
- feat(CCInt64): add
popcount
operation CCBV:
- more extensive test suite
- use
bytes
underneath, not an array of integers
- add
containers_testlib
, removing qtest and ounit. cbor
: use int64 as main int type- fix: handle uppercase in string/hex
3.8
- add
Containers_bencode
for lightweight (de)ser - perf(CCHash): improve a bit commutative hashing of arrays/lists
- perf(CCHash): only hash prefix of string/bytes
- feat(CCList): Add
Assoc.{keys,values,map_values}
- feat(CCArray): add
CCArray.map_inplace
- add
CCString.{to_hex,of_hex}
- fix(Atomic): prevent race conditions under flambda, for now
3.7
- add
Format.styling
- make
Format
compatible with OCaml 5.0, using Stag for colors - new preprocessor, compatible with merlin, using
[@@@ifge 4.12]
-style pragmas - feat: add
Byte_buf
, a byte buffer. - add
CCSeq.{zip_i,of_string}
- add
CCResult.opt_map
to simplify result function application over optionals (#397) - add shims for Atomic and Unit
- expose
CCParse.pos
to get current pos; improve perf - add
CCVector.resize_with
andCCVector.resize_with_init
, tests and doc (#389) - add
CCVector.insert
- update dune to 1.10, condition some rules to unix
- perf: reduce allocations in
CCSeq.to_array
- fix asymptotic behavior of resize functions in
CCVector
- fix: rely on
either
compatibility library
3.6.1
- use
either
compatibility library instead of shims
3.6
- rename
CCOpt
toCCOption
and deprecateCCOpt
- add iterator functions to
CCIO
CCOrd
: addpoly
, deprecatecompare
- add
CCIO.File.walk_iter
CCParse
: heavy refactoring, many new functions- backtracking by default
- add
slice
and the ability to recurse on them - expose Position module, add
or_
,both
,lookahead
,U.bool
- example Sexpr parser, and a test
- example and test of an IRC log parser
- fix bug in
CCIO.read_lines_seq
3.5.1
- fix bug in
CCIO.read_lines_seq
(backported from 3.6)
3.5
- add
CCHash.map
andCCHash.bytes
- CCIO: add many
Seq.t
based functions - CCUtf8string: add
{make,empty,of_uchar}
- add
CCFormat.{const_string,opaque}
- add
CCOpt.{some,none}
- CCFormat: expose
ANSI_codes
module - CCBV: add
equal
, refactor for performance and readability - CCList: add
{sorted_diff_uniq,sorted_mem,sorted_diff,sorted_remove}
- fix(bv): index error in union
- test: add some property tests on
Csexp/Canonical_sexp
- bv: add more tests, including regression for #370
3.4
- Add
CCOpt.get_exn_or
and deprecateCCOpt.get_exn
- CCRAL: add
get_and_remove_exn
operation - CCString: add
CCString.uniq
- refactor
CCHash
to use FNV in many combinators - CCInt: improve perf by using a single implementation of popcount using int64
- fix: CCRAL.remove does not always remove
- fix(sexp): re-export the
loc
type to the functor's argument's type - refactor and clarify
cutoff
inString.edit_distance
- fix(CCInt): make sure hash is always positive
- big upgrade to CI thanks to @Fardale
3.3
- feat: add code-generator for optimal bitfields; add tests
- new Canonical sexpr module with printer and parser
- CCSeq: Add
for_all
andexists
- feat(sexp): expose last location in decoder
- feat(CCChar): add CCChar.Infix
- feat(CCString): add CCString.foldi
- feat(CCFormat): add
string_lines
combinator - feat(CCList): update with regards to
partition_map
- add
CCList.cons'
- implement {of,add}_*_with family of function in
CCMap
with update (#352) - add
CCMap.of_{list,iter,seq}_with
functions - add
CCHashtbl.{of,add}_{list,seq,iter}_with
- Fix integer overflow warning on jsoo (#346)
- updated fuzzer scripts
Containers-thread
- refactor(pool): less locking, fix deadlock, more parallelism
- feat(pool): keep one idle thread
- small optim in
Pool.sequence_a
3.2
- add CCEither module
- add
CCList.chunks
- add iter/seq functions to
CCString
- add
CCList.reduce
(resolves #305) - fix: in
CCInt
pick popcount at runtime on 64 bits - fix: in shims, use configurator properly to determine int size
- in
CCFormat
, addappend
,append_l
, infix++
for sequencing,space
,break
,cut
- fix: in
CCSexp
, handle non-ascii escapes in strings CCUtf8_string
: add and exposeuchar_to_bytes
- enable auto deploy of doc
- improve CI: test core on non ubuntu platform, test all on ubuntu
- update readme
- CCImmutArray: add tests (#344)
- add fuzzing (#339)
- add stronger test to compare with uutf in ccutf8string
3.1
- add
List.combine_chop
and corresponding(and&)
synchronized product - chore: remove travis to use github CI instead
- add
CCList.mguard
function for list comprehensions - add some basic tests to CCMutHeap
- un-specify order of elements in
CCMap.to_list
- Move definition of
CCMap.update
so that it is shadowed by Stdlib.Map.update - fix(intmap): order of arguments for the HO param should be stable
- feat(containers-data): add
CCMutHeap
mutable heap with increase/decrease
3.0.1
- fix build on 32 bits architectures
3.0
Breaking changes
see https://github.com/c-cube/ocaml-containers/issues/290 for a summary of a subset of these changes.
packaging:
- split the library into separate packages
containers
,containers-data
, andcontainers-thread
. - delete
containers.iter
and merge parts of it intocontainers-data
; - move
CCSexp
into the core library, removecontainers.sexp
.
api:
- remove slice APIs in string and array.
- change pp functions to take unit printer for sep/stop/start (#295)
- CCPair: use more standard name for some map functions (#316)
- add CCSeq module, mostly adapted from
CCKlist
- remove
CCKlist
from everywhere - CCGraph: remove deprecated module and function
- rename
<op>_std_seq
to<op>_seq
, makingSeq.t
the standard everywhere; remove the old<op>_seq
that were previously deprecated in favor of<op>_iter
. - CCVector: rename
shrink
intotruncate
- CCVector: rename
remove to CCVector.remove_unordered
- CCList: make mem compatible with the Stdlib by making
?eq
optional - CCVector: rename
filter'
intofilter_in_place
Other changes
- CI: add github actions in addition to travis
- feat: add infix operators to
String
- feat: add opt.bind
- CCResult: add
<$>
operator - CCResult: add
get_lazy
- put infix operators in
Infix
module, then include it - ccnativeint: complete CCNativeint with regards to CCInt
- Int64: complete CCInt64 with regards to CCInt
- CCInt32: complete CCInt32 with regards to CCInt
- implement
CCInt.sign
usingCCInt.compare
- CCInt: include module Int for ocaml >= 4.08
- CCInt: add
of_float
- CCInt: add
of_string_exn
- add
CCResult.get_lazy
- add
Int.popcount
operator - CCFloat: add
pi
- CCFloat: add
of_string_opt
- fix: expose
always_eq
/never_eq
inCCEqual
- string: add optional
cutoff
arg onString.edit_distance
- CCVector: add
remove_and_shift
- CCArray: add optional argument eq to mem
- CCSexp: Escape empty atoms
- substitute 'Pervasives' with 'Stdlib'
- CCFormat: add
exn
combinator - IO: add
copy_into
for transferring data between channels - Extend benchmark:
to_array
, cons andcons_fold
- Extend benchmark: Sek, iter and pop
- benchmark for memory usage of data structures
And many, many bugfixes.
2.8.1
- add missing
CCVector.of_iter
2.8
Breaking:
- bump minimum version of OCaml to 4.03, drop deps
{result,uchar}
- deprecate
{of,to}_seq
a bit everywhere - deprecate
CCKList
as it's subsumed bySeq
- feat: on
>= 4.08
, support let+ and let* operators - feat(list): add indexed functions and
fold_on_map
- refactor: also port
CCGraph
to iter - feat: add
{to,of,add}_{iter,std_seq}
where relevant - feat(unix): add
ensure_session_leader
and add some docs - feat(pool): add infix operators on futures
- fix(pp): improve printing of hashtables
- feat: add
monoid_product
to Array and Vector - improved gc behavior for
CCvector
- deprecate
CCVector.fill_empty_slots_with
CCVector.shrink_to_fit
to limit memory usage- add
CCVector.clear_and_reset
- feat(sexp): expose
parse_string_list
and the list decoder - add
CCUnix.with_temp_dir
function - deprecate
CCOpt.to_seq
, provideto_iter
instead - add
CCOpt.value
to improve compat withStdlib.Option
- add
CCVector.mapi
- fix: restore
CCSexp.atom
andlist
which was lost in 2.7 - fix(sexp): set location properly when parsing a file
- fix: properly alias to
CCChar
in containers.ml - use older dune dialect
- remove unlabel, remove all traces of Result
- require dune configurator explicitly in opam
- Re-enable mdx tests
- fix benchs so they don't depend on clarity and they compile again
2.7
- deprecate CCKList in favor of the standard Seq
- CCIO: add
_gen
suffixes to some functions - ccsexp: provide ability to annotate parsed S-exprs with their position
- ccsexp: functorize the parser/printer
- ccsexp: support
#;
for commenting a sexp - fix: remove dep from vec to list
- add
to_string
to many modules (#270) - add
CCDeque.{remove_*;update_*}
,CCDeque.{*_opt}
- add
CCDeque.{filter,filter_map}
- add
CCDeque.filter_in_place
- add
CCBool.{to,of}_int
- add
Result.flatten_l
to turn a list of results into a result of list - refactor: remove stdlib's code, simple reimplementation of
Stdlib.Fun
- add
CCArray.Infix
- Document behaviour of
Fun.finally
when finaliser raises - travis: test on OCaml 4.09, too.
- more docs for IO
2.6.1
bugfix release:
- fix(parse): error in
many
- chore: add 4.08 to travis
- fix
Containers.Stdlib
on OCaml 4.07
2.6
- introduce shim modules for 4.08 compat
- remove reference to sequence, use
iter
instead for tests - add
remove
function to het map/tbl - missing type annotation for specializing int.compare
- doc: fix bad example in CCIO
- use
iter
, notsequence
, in tests - fix: use same evaluation order as stdlib for
CCList.init
- fix: make
Array.random_choose
fail on empty array at creation time - breaking: make
Array.random_choose
raise invalid_arg instead of not_found - migrate readme to .md, using mdx to test it
2.5
- perf: annotate types in monomorphic/float/int to help specialize builtins
- use GADT to discard impossible case on
CCFQueue
(@dinosaure). - fix(funvec): expose
pop
, fix off by one error
2.4.1
- revert some compatibility-breaking changes in label modules
2.4
breaking:
- rename
Random.sample_without_{replacement,duplicates}
Features
- add
CCResult.iter_err
- add
CCEqual.{always,never}_eq
- add
containersLabels.ml
, generate unlabelled interfaces from labelled ones - add
CCEqualLabels
- add
CCArray_sliceLabels
- add
CCStringLabels
- add
CCResult.get_or_failwith
- add
CCInt.( ** )
for integer exponentiation - add
List.counts
, related toList.count
(#230) - migrate to dune
- migrate to opam2
- add CODE_OF_CONDUCT.md
Fixes
- #235: release memory in vector/ringbuffer (thanks to @copy)
- remove spurious
Labels
module - doc: fix small inaccuracy in comments and API
- test: improve perf by changing random gens
2.3
- feat(vector): add
Vector.{filter,filter_map}_in_place
- perf(hashtrie): use int64 for 64-bits branching factor and popcount
- feat(intmap): add
CCIntMap.{filter,filter_map,merge,is_empty}
- Add
CCHeap.Make_from_compare
(#225) - add relational ops
CCList.{group_by,join,join_by,join_all_by,group_join_by}
- fix(float): make
Float.{min,max}
compliant with revised IEEE754 - fix(build): remove
[@inline]
attributes since they break on 4.02.3 - Fix Int32 and Int64 operators that are not visible (#224)
- some performance tweaks in Vector
- test(float): add some tests for FP min/max
2.2
- Improving comments presentation
- Add
CCOpt.return_if
- Add
CCOpt.flatten
- Add
CCString.{,r}drop_while
- add many missing functions to
CCListLabels
- test: consistency
CCList{,Labels}
- fix(arrayLabels): compatibility with 4.07
- fix: compatibility for CCArrayLabels
- test: add compatibility checks between
CCArray{,Labels}
2.1
- make
CCInt64
compatible withInt64
(breaking!) (closes #192) - Add
CCBijection
in containers.data - feat(mono): add dotted comparison operators for floats
- add
?margin
parameter toCCFormat.ksprintf
- add
CCUtf8_string
with basic encoding and decoding functionalities - Add
CCLazy_list.<|>
- Adding
CCNativeint
- enrich
CCInt.Infix
to get a uniform interface withCCInt{32,64}
- add
CCInt{32,64}.Infix
- Adding CCInt32 module
- add
CCHash.combine{5,6}
- Add infix operators to CCFloat
- feat(list): add
{interleave,intersperse}
(closes #191) - add missing signatures of
CCArrayLabels
(closes #193) - Add CCFun.iterate
- add experimental
CCFun_vec
data structure for fast functional vectors - fix: strong type aliases in Random (closes #210)
- use standard
List.sort_uniq
- remove explicit dep on
bytes
in jbuild files - update printers names in containers.top (closes #201)
- Enable support for Travis CI and Appveyor
- test deps are required when we run tests
- point to JST's blog post on poly compare
2.0
breaking
- move to jbuilder (closes #165), requiring at least OCaml 4.02
become defensive w.r.t polymorphic operators:
- Internally shadow polymorphic operators and functions from Pervasives by
include CCMonomorphic
inContainers
module - Shadow the physical equality operator
- Shadow polymorphic functions in
CCList
- Internally shadow polymorphic operators and functions from Pervasives by
- rename
print
topp
for Format printers (closes #153, #181) - remove
CCFlatHashtbl
others
- many typos and style fixes (from Fourchaux)
- Add
CCList.iteri2
andCCList.foldi2
- remove
PARAM.min_size
inCCPool
- Add
CCEqual.physical
- Avoid uses of the polymorphic operators
- Add a
CCMonomorphic
module shipped into acontainers.monomorphic
library - make complexity of
Array.lookup
explicit (closes #174) - add
CCFormat.lazy_{or,force}
for printing thunks - now that ocaml >= 4.02 is required, use
Format.pp_print_text
directly - add
CCHeap.delete_{one,all}
- add
CCList.tail_opt
- remove qtest makefile and use a script instead
- add many tests
- fix bug in
CCRAL.drop
(see #184) CCFormat
: fix support of unrecognized styles- fix bug: don't reverse twice in
CCList.repeat
1.5.1, 1.5.2
- re-export
Format
types and functions inCCFormat
1.5
- have
CCList.{get,insert,set}_at_idx
work with negative indices - Add CCCache.add
- missing function in
CCListLabels
- Allow negative indexes in CCList.remove_at_idx
- add an optional
drop
parameter to string-splitting functions - add
Hash.const0
for trivial hash function that ignores its input - improve compatibility with the stdlib
- Add List.count
- Add String.is_empty
- add missing compatibility functions:
{assoc_opt,assq_opt}
- backport some functions added in 4.05 in
CCList
- add functions from 4.05 into
CC{Map,Set}
- Implement
CCImmutArray.sub
- bugfix in
CCTrie.Make
: Remove polymorphic comparison - remove dependency on cppo
- add travis support
- update doc of
CCList.cartesian_product
, which returns results in unspecified order (close #154) - fix containers.top (closes #155)
1.4
- add
CCMap.union
- add
CCRef.swap
- add
CCArray.swap
- change signature of
CCWBTree.get_rank
- add
CCWBTree.get_rank{,_exn}
- more efficient
List.map
Using efficient chunking algorithm - Fix
CCVector.append_array
(empty vector case) CCFQueue.take_back_exn
raised InvalidArg instead of Empty on an empty queue- faster
CCString.{prefix,suffix}
- speed improvements and benchmarks for
CCString.{prefix,suffix}
- add ocp-indent file
- fix
CCFun.tap
example in doc - specify behavior of
CCFQueue.take_{front,back}_l
in some corner cases - More tests for CCVector.append and CCVector.append_array
- assertions and cleanup in
CCPool
1.3
- deprecate
CCBool.negate
- add
CCString.compare_natural
(closes #146) - add callbacks in
CCCache.with_cache{,_rec}
(closes #140) - tail-rec
CCList.split
(by @bikalgurung, see #138) - change
CCRingBuffer.peek_{front,back}
to return options (closes #127) - add
CCRingBuffer.is_full
- add
CCArray.find_map{,_i}
, deprecated older names (closes #129) - add
CCList.{keep,all}_{some,ok}
(closes #124) - large refactor of
CCSimple_queue
(close #125) - add
CCSimple_queue
to containers.data - small change for consistency in
CCIntMap
- bugfix in
CCRingBuffer.skip
, and corresponding tests - cleanup and refactor of
CCRingBuffer
(see #126). Add strong tests. - add rich testsuite to
CCIntMap
, based on @jmid's work
1.2
- make many modules extensions of stdlib (close #109) the modules are:
String List ListLabels Array ArrayLabels Char Random
- add
CCString.{l,r}trim
(close #121) - add
CCInt.floor_div
andCCInt.rem
- add test and bugfix for
CCBV
- add
CCList.take_drop_while
(close #120) - add
CCstring.equal_caseless
(close #112) - add alias
CCString.split
(close #115) - add
CCFormat.text
(close #111) - add
CCFormat.{newline,substring}
- add
CCList.combine_gen
(close #110) - add module
CCEqual
- add
CCResult.fold_ok
(closes #107) - add
CCFormat.with_color_ksf
for colored printing - add
CCInt.range{,',by}
for iterating on integer ranges - add
CCString.Sub.get
- add
CCResult.add_ctx{,f}
for replacing stack traces - add
CCString.split_on_char
- add
CCArray.{fold_map,scan_left}
(close #101) - add
CCList.scan_left
- add
CCList.{cartesian_product,map_product_l}
- add
CCUnix.with_file_lock
for locking whole files - add
CCFormat.of_chan
- add
CCFormat.flush
- Add
{map_lazy, or_, or_lazy, to_result, to_result_lazy, of_result}
toCCOpt
- annotations in
CCEqual
, for optimization - Add a tail-recursive implementation of
List.combine
- fix too restrictive type in
CCResult
- build unix support by default
- bugfix and test for
CCZipper.is_focused
(closes #102) - use boxes in
CCFormat.Dump
for tuples - update header, and use more
(##)
inCCIntMap
1.1
bugfixes:
- fix bug in
CCGraph
(in DFS traversal) - fix bug in
CCOpt.filter
(close #100)
new features:
- add
CCHeap.to_seq_sorted
- add
CCHeap.to_list_sorted
- add
CCIO.File.walk_l
cleanup and doc:
- remove dead code
- new test for
CCPool
- new test and small readme section on
CCParse
- remove CCError from tutorial
- merge tutorial into readme, cleanup
1.0
See https://github.com/c-cube/ocaml-containers/issues/84 for an overview.
Breaking and Removals:
- simplify and cleanup of CCGraph
- remove poly-variant based errors, use
result
everywhere - remove deprecated functions and modules
- remove
CCVHashconsedSet
- remove
CCAllocCache
- remove
CCBloom
- update benchmarks (ignoring hamt); remove useless old script
- simplify
CCHash
, changing the type to'a -> int
, relying onHashtbl.seeded_hash
for combining hashes - split
CCList.Zipper
into its own module,CCZipper
in containers.data - change argument ordering in
CCList.Assoc
- remove
CCList.Idx
, rename its functions to toplevel - remove
CCList.Set
, move functions to toplevel and rename them - rewrite
CCBitField
with a much simpler interface - split
CCArray.Sub
intoCCArray_slice
remove containers.string
- remove CCParse and CCKMP (will be replaced in core)
CCFormat
:- remove
start/stop
args, makesep
aunit printer
- many other improvements and additions
- add
CCFormat.tee
- add
CCFormat.Dump.{result,to_string}
- remove
- replace
or_
bydefault
in labelled functions - remove trailing
_
inCCOrd
primitives - remove
containers.io
(deprecated for a while) - remove
containers.bigarray
- remove
CCSexpM
, use ocamllex for a much simplerCCSexp
using ocamllex - add
CCParse
into core, a simple, lightweight version of parser combs - remove
CCPrint
, useCCFormat
instead (also, update tests relying on it) - remove containers.advanced
- change type of
CCUnix.escape_str
Additions:
CCHashtbl
:CCHash.{list,array}_comm
CCHashtbl.Poly
and fix issue in Containers (close #46)CCHashtbl.get_or_add
CCList.sublists_of_len
(close #97)Char.{of_int{,_exn},to_int}
(close #95)- Add
CCResult.{is_ok,is_error}
- improve
CCUnix
a bit - update
containers.ml
so as to include all core containers - add
CCOrd.Infix
- use
Labels
versions ofCCList
andCCArray
- add
CCString.edit_distance
- expose
CCString.Find
for efficient sub-string searching
Bugfixes:
CCIO
: deal properly with broken symlinks and permission errors- test for #94 (using Thread.yield to trigger segfault) Fix
CCSemaphore.with_acquire
: release a non locked mutex is UB - containers.top: remove printers on structural types (#71)
- add doc for
of_list
in relevant modules (close #85) - bugfix: do not use
Sequence.flatMap
(close #90)
0.22
- threads/CCLock: add
try_with_lock
to wrapMutex.try_lock
- Add
CCMultiSet.remove_all
- document errors in
CCIO
(close #86) - use the new qtest/qcheck
0.21
- (breaking) make default
start
/stop
arguments empty in printers (#82) - add
CCFormat.{with_color_sf,fprintf_dyn_color,sprintf_dyn_color}
- add
CCFormat.Dump
for easy debugging (see #82) - add
CCArray.Sub.to_list
- add
CCArray.{sorted,sort_indices,sort_ranking}
(closes #81) - handle
\r
in CCSexpM (fixes #83) - add alias
Containers.IO
- bugfixes in
CCArray.Sub
- bugfix + tests for
CCArray.Sub.sub
- disable parallel build to support cygwin
0.20
- bugfix in
CCArray.equal
- fix
CCString.*_ascii
; addCCChar.{upper,lower}case_ascii
- add functions in
CCArray
: fold2,iter2,map2 - add
CCArray.rev
- add
CCFloat.round
- add
CCVector.append_gen
- add
CCList.{head_opt,last_opt}
- add
CCInt.{print_binary,to_string_binary}
+ tests (thanks @gsg) - more general types for
CCArray.{for_all2,exists2}
- more general type for
CCResult.map_or
0.19
- add regression test for #75
- Fix
CCString.Split.{left,right}
(#75) - additional functions in
CCMultiSet
- show ocaml array type concretely in
CCRingBuffer.Make
sig - cleanup and more tests in
CCHeap
- fix bugs in
CCFlatHashtbl
, add some tests - add more generic printers for
CCError
andCCResult
(close #73) - add
CCstring.of_char
- update headers
0.18
- update implem of
CCVector.equal
- add
CCOpt.get_or
with label, deprecatesget
- add
CCArray.get_safe
(close #70) - add
CCGraph.is_dag
- add aliases to deprecated functions from
String
, addFun.opaque_identity
- add
CCLazy_list.take
- add
Lazy_list.filter
- add
CCList.range_by
0.17
potentially breaking
- change the semantics of
CCString.find_all
(allow overlaps)
Additions
- add
CCString.pad
for more webscale - add
(--^)
to CCRAl, CCFQueue, CCKlist (closes #56); addCCKList.Infix
- add monomorphic signatures in
CCInt
andCCFloat
- add
CCList.{sorted_insert,is_sorted}
- add
CCLazy_list
in containers.iter (with a few functions) - add
CCTrie.longest_prefix
- provide additional ordering properties in
CCTrie.{above,below}
- add
CCOpt.if_
have
CCRandom.split_list
fail onlen=0
CCRandom.sample_without_replacement
fail ifn<=0
- add
CCOpt.{for_all, exists}
- add
CCRef.{get_then_incr,incr_then_get}
- add
Result.{to,of}_err
- add
CCFormat.within
- add
map/mapi
to some of the map types. - add
CCString.{drop,take,chop_prefix,chop_suffix,filter,filter_map}
- add
CCList.fold_filter_map
- add
CCIO.File.with_temp
for creating temporary files - add
{CCArray,CCVector,CCList}.(--^)
for right-open ranges - add
Containers.{Char,Result}
- modify
CCPersistentHashtbl.merge
and addCCMap.merge_safe
- add
CCHet
, heterogeneous containers (table/map) indexed by keys - add
CCString.rev
- add
CCImmutArray
into containers.data - add
CCList.Assoc.remove
Fixes, misc
- Make
CCPersistentHashtbl.S.merge
more general. - optimize KMP search in
CCString.Find
(hand-specialize code) - bugfix in
CCFormat.to_file
(fd was closed too early) - add a special case for pattern of length 1 in
CCString.find
- more tests, bugfixes, and benchs for KMP in CCString
- in CCString, use KMP for faster sub-string search; add
find_all{,_l}
others:
watch
target should build all- add version constraint on sequence
- migrate to new qtest
- add an
IO
section to the tutorial - enable
-j 0
for ocamlbuild
0.16
breaking
- change the signature of
CCHeap.{of_gen,of_seq,of_klist}
- change the API of
CCMixmap
- make type
CCHash.state
abstract (used to beint64
) - optional argument
~eq
toCCGraph.Dot.pp
- rename
CCFuture
intoCCPool
deprecations
- deprecate
containers.bigarray
- deprecate
CCHashtbl.{Counter,Default}
tables - deprecate
CCLinq
in favor of standaloneOLinq
(to be released)
bugfixes
- fix wrong signature of
CCHashtbl.Make.{keys,values}_list
- missing constraint in
CCSexpM.ID_MONAD
new features
- add a tutorial file
- add a printer into CCHeap
- add
{CCList,CCOpt}.Infix
modules - add
CCOpt.map_or
, deprecatingCCopt.maybe
- add
CCFormat.sprintf_no_color
- add
CCFormat.{h,v,hov,hv}box
printer combinators - add
CCFormat.{with_color, with_colorf}
- add
CCList.hd_tl
- add
CCResult.{map_or,get_or}
- add
CCGraph.make
and utils - add
CCHashtbl.add_list
- add counter function in
CCHashtbl
, to replaceCCHashtbl.Counter
- add
CCPair.make
- add
CCString.Split.{left,right}_exn
- add
CCIO.File.{read,write,append}
for quickly handling files - add
CCRandom.pick_{list,array}
- add
CCList.Assoc.update
- add
CCList.Assoc.mem
- add
{CCMap,CCHashtbl}.get_or
for lookup with default value - add
CCLock.{decr_then_get, get_then_{decr,set,clear}}
- rename
CCFuture
intoCCPool
, expose the thread pool - split
CCTimer
out ofCCFuture
, a standalone 1-thread timer - move
CCThread.Queue
intoCCBlockingQueue
- add
CCResult
, with dependency onresult
for retrocompat - add
CCThread.spawn{1,2}
- add many helpers in
CCUnix
(for sockets, files, and processes) - add
CCFun.finally{1,2}
, convenience aroundfinally
- add
CCLock.update_map
- add
CCLock.{incr_then_get,get_then_incr}
- add breaking space in
CCFormat.{pair,triple,quad}
- update
examples/id_sexp
so it can read on stdin - add
CCList.fold_map2
0.15
breaking changes
- remove deprecated
CCFloat.sign
- remove deprecated
CCSexpStream
other changes
- basic color handling in
CCFormat
, using tags and ANSI codes - add
CCVector.ro_vector
as a convenience alias - add
CCOrd.option
- add
CCMap.{keys,values}
- add wip
CCAllocCache
, an allocation cache for short-lived arrays - add
CCError.{join,both}
applicative functions for CCError - opam: depend on ecamlbuild
work on
CCRandom
by octachron:- add an uniformity test
- Make
split_list
uniform - Add sample_without_replacement
- bugfix: forgot to export
{Set.Map}.OrderedType
inContainers
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 intoCCVector.rev_in_place
- deprecate
CCVector.flat_map'
, renamedflat_map_seq
- add
CCMap.add_{list,seqe
- add
CCSet.add_{list,seq}
- fix small ugliness in
Map.print
andSet.print
- add
CCFormat.{ksprintf,string_quoted}
- add
CCArray.sort_generic
for sorting over array-like structures in place - add
CCHashtbl.add
mimicking the stdlibHashtbl.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 ofCCHashtbl
- 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}
andcardinal
- 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
ifsub=""
- 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
andParseError
inCCParse
- move
containers.misc
andcontainers.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, incontainers.data
. - add module
CCBloom
incontainers.data
, a bloom filter - new module
CCHashTrie
incontainers.data
, HAMT-like associative map - add module
CCBitField
incontainers.data
, a safe abstraction for bitfields of< 62 bits
- add module
CCHashSet
intocontainers.data
, a mutable set - add module
CCInt64
- move module
RAL
intocontainers.data
asCCRAL
- new module
CCThread
incontainers.thread
, utils for threading (+ blocking queue) - new module
CCSemaphore
incontainers.thread
, with simple semaphore - add
containers.top
, a small library that installs printers - add
CCParse.memo
for memoization (changesCCParse.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
, introduceCCList.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 inCCTrie.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 intoBytes.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
fromcontainers.io
tocontainers
, add dummy module incontainers.io
- add
CCIO.read_all_bytes
, reading a whole file into aBytes.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
incontainers.data
, a simple graph abstraction similar toLazyGraph
- add a lot of string functions in
CCString
- add
CCError.catch
, in prevision of the future standardResult.t
type - add
CCError.Infix
module - add
CCHashconsedSet
incontainers.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
andcontainers_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
, useUnix.environment
as the default environment - add
CCList.partition_map
RingBuffer.{of_array, to_array}
convenience functionscontainers.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
incontainers.string
, experimental applicative parser combinators - remove
containers.pervasives
, add the moduleContainers
to core - bugfix in
CCFormat.to_file
0.9
- add
Float
,Ref
,Set
,Format
toCCPervasives
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
andLwt_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 toCCMixtbl
- 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 developers (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 forCCList
andCCArray
- Added
CCBigstring.length
for more consistency with theCCString
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
andCCsequence
(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 split intoCCSexp
(manipulating expressions) andCCSexpStream
- add
CCSexpM
for a simpler, monadic parser of S-expressions (deprecatingCCSexpStream
)
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
, withCCBigstring
CCHashtbl.map_list
io
:CCIO.read_all
now with ?size parameter- use
Bytes.extend
(praise modernity!) - bugfix in
CCIO.read_all
andCCIO.read_chunks
- use
-no-alias-deps
0.6.1
- use subtree
gen/
forCCGen
(symlink) rather than a copy. - Add benchmarks for the function
iter
of iterators. CCKTree
: more printers (to files),Format
printerCCOpt.get_lazy
convenience function- introduce
CCFloat
, add float functions toCCRandom
(thanks to @struktured)
0.6
breaking changes
- new
CCIO
module, much simpler, but incompatible interface - renamed
CCIO
toadvanced.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
- moved from
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, seeAUTHORS.md
) andbytes
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 operationsCCList.(>|=)
map operatorCCOpt.filter
CCInt.neg
CCMap
wrapper to the standardMap
module- make some functions in
CCFun
andCCString
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
andCCat
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
toCCFlatHashtbl
; new moduleCCHashtbl
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 ofsequence
CCOpt.wrap{1,2}
CCList.findi
,CCArray.findi
andCCArray.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 manipulationsSeq
for streams
- explicit finalizer system, to use a
CCMultiMap
: functor for bidirectional mappingsCCMultiSet
: sequence- renamed threads/future to threads/CCFuture
- big upgrade of
RAL
(random access lists) CCList.Ref
to help use references on listsCCKList
:group,uniq,sort,sort_uniq,repeat
andcycle
, infix ops, applicative,productCCTrie.above/below
: ranges of items- more functions in
CCPair
CCCat
: funny (though useless) definitions inspired from HaskellCCList
: applicative instanceCCString.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 searchCCList.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 toCCString
(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
, addCCPrint.silent
- fix type mismatch
NOTE: git log --no-merges previous_version..HEAD --pretty=%s
sectionYPositions = computeSectionYPositions($el), 10)"
x-init="setTimeout(() => sectionYPositions = computeSectionYPositions($el), 10)"
>
On This Page
- 3.15
- 3.14
- 3.13.1
- 3.13
- 3.12
- 3.11
- 3.10
- 3.9
- 3.8
- 3.7
- 3.6.1
- 3.6
- 3.5.1
- 3.5
- 3.4
- 3.3
- 3.2
- 3.1
- 3.0.1
- 3.0
- 2.8.1
- 2.8
- 2.7
- 2.6.1
- 2.6
- 2.5
- 2.4.1
- 2.4
- 2.3
- 2.2
- 2.1
- 2.0
- 1.5.1, 1.5.2
- 1.5
- 1.4
- 1.3
- 1.2
- 1.1
- 1.0
- 0.22
- 0.21
- 0.20
- 0.19
- 0.18
- 0.17
- 0.16
- 0.15
- 0.14
- 0.13
- 0.12
- 0.11
- 0.10
- 0.9
- 0.8
- 0.7
- 0.6.1
- 0.6
- 0.5
- 0.4.1
- 0.4
- 0.3.4
- 0.3.3
- 0.3.2
- 0.3.1