Container library for Fortran programming language
Clone or download
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Permalink
Type Name Latest commit message Commit time
Failed to load latest commit information.
containers
docs
internal
qcontainers_f
tests
utilities
wrap_util_c
.gitattributes
.gitignore
CMakeLists.txt
INSTALL.md
LICENSE.txt
README.md

README.md

About

qContainers is a container library for Fortran language. It enables to store any internal Fortran data type and any derived data type to the container. The library wraps a subset of containers from qLibc library for C language and one container (set) from c-algorithms library.

Following containers are implemented currently:

  • Containers for Key/Value pairs
    • Tree Table (qtreetbl) --- in binary tree (left-leaning red-black tree) data structure.
    • Hash Table (qhashtbl) --- in hash-based data structure.
  • Containers for Objects
    • List (qlist) --- doubly linked list.
    • Vector (qvector) --- growable array of elements.
    • Set (qset) --- collection of unique values.

The library uses some features of Fortran 2003 and TS-29113, therefore a relatively new compiler version is required. Assumed-type dummy arguments or compiler directives in the case the compiler doesn't support assumed-type variables are used to enable store of any type to the containers. The containers were tested with Gfortran, Intel, PGI and Oracle Fortran compilers.

License

qContainers is published under 2-clause BSD license known as Simplified BSD License. Please refer the LICENSE.txt document included in the repository for more details.

API

All container APIs have a consistent look and feel. Type-bound procedures are used to make the use of the containers more convenient.

An example below illustrates how it looks like.

    subroutine colors()
        use qtreetbl_m
        implicit none

        type(qtreetbl_t) :: col
        integer :: val(3)
        integer :: ret_val(3)
        integer :: ns
        logical :: found

        ! Determine the size in bytes we need to save
        ! ns is a number of bytes for 3 integers
        ns = storage_size(val) / 8 * size(val)

        ! Create a new tree-table
        call col%new(ns)
        
        ! Put some values
        val = [255, 0, 0]
        call col%put("red", val(1)) ! ns bytes from val is copied
        val = [0, 255, 0]
        call col%put("green", val(1))
        !.........

        ! Retrieve value
        call col%get("red", ret_val(1), found)
        print *, "red color = ", ret_val
    end subroutine

Installation

Read INSTALL.md file.

Documentation

An introduction tutorial can be found in docs folder. Also, the library has rather extensive test-cases from which users can learn how to use the library.

Contribution

You can contribute to this project by reporting bugs, suggesting new features, implementing new features/containers, writing documentation/tutorial or simply by spreading the word about it.