The Fortran module datastructs-fortran
provides a comprehensive collection of common data structures and utility functions. It includes implementations for dynamic lists (dynamical_list_t
), fixed-size lists (fixed_list_t
), and max heaps (maxheap_t
). Additionally, it offers various random sampler algorithms (through sampler_base_t
and choose_sampler
) for weighted selection, and a hashing function (djb2
).
The samplers depend on the rndgen-fortran
random number generator.
To integrate datastructs-fortran
into your project, add it as a dependency using the Fortran Package Manager (Fpm). Include the following lines in your fpm.toml
file:
[dependencies]
datastructs-fortran.git = "https://github.com/wcota/datastructs-fortran"
After adding the dependency, you can import the module or specific components into your Fortran source files. For example, use use datastructs_fortran
to import the entire module, or use datastructs_fortran, only: [component_name]
to import specific types or functions.
Main derived types and routines:
-
Dynamical List (
dynamical_list_t
): Create and manipulate a list that can grow or shrink dynamically. Examples at example/dynamical_list.f90 and example/dynamical_list2.f90 -
Fixed List (
fixed_list_t
): Define a fixed-size list, which can be linked to others. Examples at example/fixed_list.f90 -
Max Heap (
maxheap_t
): Implement a max heap structure, where the parent node is always greater than or equal to its children. Examples at example/maxheap.f90 -
Hash Function (
djb2
): Calculate a hash value for an array of integers using the djb2 algorithm. Examples at example/hash.f90 -
Sampler Algorithms (
sampler_base_t
,choose_sampler
): Randomly get indexes proportionally to their weights. Examples at example/sampler.f90 -
Logger: Provides logging with configurable verbosity and levels (
LOG_ERROR
,LOG_WARNING
,LOG_INFO
,LOG_DEBUG
); global controls (LOGGER_VERBOSE
,LOGGER_LEVEL
,LOGGER_OUTPUT_UNIT
,LOGGER_ERROR_UNIT
); main routines for configuring and writing logs:set_verbose
,set_level
,set_output_unit
,set_error_unit
,set_unit_defaults
,log_unit
,log_write
. Examples at example/logger.f90
Use fpm run --example name
, in which name
is the name of the example.