org.cicirello.core
Overview
The Java module org.cicirello.core
provides some of the core utilities and data structures used in several of our other
libraries and projects, including but not limited to Chips-n-Salsa
and JavaPermutationTools, as well as various
applications that use those libraries. Among the data structures included in this library are various priority queue
implementations, such as binary heaps and Fibonacci heaps. The priority queues within org.cicirello.core
support
operations that the Java API's built-in PriorityQueue class does not, such as changing priority values, merging
priority queues, among others. The org.cicirello.core
library defines a common interface for its priority queue implementations,
enabling easily switching between a binary heap or a Fibonacci heap. Other data structures and
utilities contained in org.cicirello.core
include: disjoint set forests, sorting networks, partially-filled arrays
of ints and doubles (e.g., the equivalent of Java's ArrayList class, but for primitive int and double values), among
others.
The source code repository is hosted on GitHub; and is licensed under the GNU General Public License Version 3 (GPLv3). The API documentation is found on this site. The module is regularly published to Maven Central, from which it is easily imported into software projects using Maven and other commonly used build tools.
The org.cicirello.core
module originated as part of the research
of Vincent
A. Cicirello.
Dependent Libraries
The following libraries depend upon org.cicirello.core
.
- Chips-n-Salsa: The Chips-n-Salsa Java library is a library for evolutionary computation, stochastic search, and related metaheuristics.
- JavaPermutationTools: The JavaPermutationTools (JPT) library focuses on permutations and other ordered data types, like strings and arrays, along with computation (e.g., calculating various distance metrics) on permutations and other sequential data types.
- ρμ: The ρμ library provides efficient implementations of various random sampling algorithms, as well as various enhancements over the randomization functionality provided in the Java API itself.
Importing from Maven Central
To import org.cicirello.core
from the Maven Central repository (if your build tool is
Maven), add the following to the dependencies section of
your “pom.xml” (for other build tools, see your build
tool's documentation for the equivalent):
<dependency>
<groupId>org.cicirello</groupId>
<artifactId>core</artifactId>
<version>x.y.z</version>
</dependency>
Just replace x.y.z
with your desired version of the library.
Java Modules
To use the org.cicirello.core
module in your project, add the
following to your module-info.java:
module your.module.name.here {
requires org.cicirello.core;
}
Semantic Versioning
We use Semantic Versioning with version numbers of the form: MAJOR.MINOR.PATCH, where differences in MAJOR correspond to incompatible API changes, differences in MINOR correspond to introduction of backwards compatible new functionality, and PATCH corresponds to backwards compatible bug fixes.
Development Process
To maintain a high quality library, our development process utilizes the following:- Test Coverage: We require unit tests for all functionality. We generate JaCoCo test coverage reports on all push and pull-request events to the source code repository. Although we don't have a strict minimum coverage for acceptance, coverage is quite often at or near 100%. Current coverage is reported in the readme of the GitHub repository (updated automatically).
- Regression Testing: All new and existing tests are executed as part of all pull requests, and all must pass for acceptance.
- Static Analysis: We use multiple static analysis tools to scan for potential vulnerabilities, error prone code, and other potential code improvements. At the present time, this includes running: