Find us on…
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.