The main API entry points are flexvec.core/catvec, performing vector
concatenation, and flexvec.core/subvec, which produces a new vector
containing the appropriate subrange of the input vector (in contrast
to clojure.core/subvec, which returns a view on the input vector).

flexvec's vectors can store objects or unboxed primitives. The
implementation allows for seamless interoperability with
clojure.lang.PersistentVector, clojure.core.Vec (more commonly
known as gvec) and clojure.lang.APersistentVector$SubVector
instances: flexvec.core/catvec and flexvec.core/subvec convert
their inputs to flexvec.rrbt.Vector instances whenever necessary
(this is a very fast constant time operation for PersistentVector and
gvec; for SubVector it is O(log n), where n is the size of the
underlying vector).

flexvec.core also exports its own versions of vector, vector-of
and vec which always produce flexvec.rrbt.Vector instances. Note
that vector-of accepts :object as one of the possible type
arguments, in addition to keywords naming primitive types.

Clojure(Script) code reuse

flexvec's vectors support the same basic functionality regular
Clojure's vectors do (with the omissions listed above). Where
possible, this is achieved by reusing code from Clojure's gvec and
ClojureScript's PersistentVector implementations. The Clojure(Script)
source files containing the relevant code carry the following
copyright notice:

Copyright (c) Rich Hickey. All rights reserved.
The use and distribution terms for this software are covered by the
Eclipse Public License 1.0 (http://opensource.org/licenses/eclipse-1.0.php)
which can be found in the file epl-v10.html at the root of this distribution.
By using this software in any fashion, you are agreeing to be bound by
the terms of this license.
You must not remove this notice, or any other, from this software.