{"id":21044355,"url":"https://github.com/trixi-framework/ftobjectlibrary","last_synced_at":"2026-04-10T05:02:43.270Z","repository":{"id":43010073,"uuid":"373958169","full_name":"trixi-framework/FTObjectLibrary","owner":"trixi-framework","description":"A Fortran library for reference counted object and container classes.","archived":false,"fork":false,"pushed_at":"2025-03-13T09:45:35.000Z","size":10655,"stargazers_count":1,"open_issues_count":4,"forks_count":1,"subscribers_count":5,"default_branch":"main","last_synced_at":"2025-03-13T10:34:45.214Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"https://trixi-framework.github.io/FTObjectLibrary","language":"Fortran","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"other","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/trixi-framework.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE.md","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":"SECURITY.md","support":null,"governance":null,"roadmap":null,"authors":"AUTHORS.md","dei":null,"publiccode":null,"codemeta":null}},"created_at":"2021-06-04T20:59:00.000Z","updated_at":"2025-03-13T09:44:50.000Z","dependencies_parsed_at":"2022-09-13T08:12:01.448Z","dependency_job_id":"781609e2-1419-4d50-92f9-b09ec6ae0743","html_url":"https://github.com/trixi-framework/FTObjectLibrary","commit_stats":{"total_commits":165,"total_committers":7,"mean_commits":"23.571428571428573","dds":0.5212121212121212,"last_synced_commit":"7c82d7a6fbbf53ef4340804e8d9e404e83c5153e"},"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/trixi-framework%2FFTObjectLibrary","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/trixi-framework%2FFTObjectLibrary/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/trixi-framework%2FFTObjectLibrary/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/trixi-framework%2FFTObjectLibrary/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/trixi-framework","download_url":"https://codeload.github.com/trixi-framework/FTObjectLibrary/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":243489898,"owners_count":20299001,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2024-11-19T14:16:30.174Z","updated_at":"2025-12-30T05:49:24.239Z","avatar_url":"https://github.com/trixi-framework.png","language":"Fortran","funding_links":[],"categories":[],"sub_categories":[],"readme":"# FTObjectLibrary\n\n[![Build Status](https://github.com/trixi-framework/FTObjectLibrary/workflows/CI/badge.svg)](https://github.com/trixi-framework/FTObjectLibrary/actions?query=workflow%3ACI)\n[![Coveralls](https://coveralls.io/repos/github/trixi-framework/FTObjectLibrary/badge.svg?branch=main)](https://coveralls.io/github/trixi-framework/FTObjectLibrary?branch=main)\n[![Codecov](https://codecov.io/gh/trixi-framework/FTObjectLibrary/branch/main/graph/badge.svg)](https://codecov.io/gh/trixi-framework/FTObjectLibrary)\n[![License: MIT](https://img.shields.io/badge/License-MIT-success.svg)](https://opensource.org/licenses/MIT)\n\nFTObjectLibrary provides a collection of reference counted Fortran 2003 classes\nto facilitate writing generic object oriented Fortran programs. Reference\ncounting is implemented to assist with memory management so that the lifespans\nof objects are properly maintained and are so that objects are deleted only\nwhen no other references are made to them.\n \nThe library includes three categories of classes:\n\n* Value classes\n* Container classes\n* Error reporting and testing classes\n\nValue classes include the base class, FTObject and at the current time, a subclass, FTValue.\n\n- FTObject is the base class that implements the reference counting mechanism and other functions that should be overridden in subclasses. It the base class for all classes in the FTObjectLibrary library. You will usually not allocate objects of this class. Instead you will create your own subclasses of it that have data and procedures as needed.\n- FTValue is a wrapper class that allows storage of real, integer, character and logical values, which can then be stored in containers.\n\nContainer classes let you store any subclass of the base class FTObject in them. This makes it easy to store, for instance, a linked list of linked lists, or an array of dictionaries.\n\nIncluded in the library are the following standard container classes:\n\n- FTStack is a subclass of FTLinkedList that adds the usual push, pop, and peek routines.\n- FTSparseMatrix associates a double index (i,j) to an FTObject. Basically this is a two dimensional sparse matrix of pointers to FTObjects.\n- FTMultiIndexTable associates an integer array keys(:) to an FTObject. Basically this is an m--dimensional sparse matrix of pointers to FTObjects.\n- FTDictionary is an ``associative container'', that associates a string to another FTObject. \n- FTValueDictionary is a subclass of FTDictionary that has additional methods to store and retrieve\nvalues.\n- FTMutableObjectArray is a mutable one-dimensional array class that can store any FTObject\n- FTStringSet is different as it encapsulates set operations like set membership, union, intersection, difference, but only for strings. Although other objects cannot be added to string sets, StringSets can be added to other containers\n\n The library also contains classes for testing (FTAssertions, TestSuiteManagerClass) and for reporting errors through the FTException class.\n\n## News\n\nNew about changes can be found [here](Docs/News.md).\n\n## Documentation\n\nDocumentation can be found in the [user's guide](Docs/UsersGuide.md).\n\n## Examples\n\nExamples can be found in the [Examples](Examples) directory and in the [Testing](Testing) directory. The examples include a simple reverse Polish calculator using a stack, and another showing the use of a linked list. The testing directory includes tests that can be run on the library, which themselves serve as examples of the use of all of the classes.\n\n## Building the Library\n\nThe library (.a) can be built with either CMake or default make.\n\n### Spack\nYou can install FTObjectLibrary using the [Spack package manager](https://spack.io). \nTo install the FTObjectLibrary with Spack,\n```\ngit clone https://github.com/spack/spack.git ~/spack\nsource ~/spack/share/spack/setup-env.sh\nspack install ftobjectlibrary@main\n```\nOnce installed, FTObjectLibrary can be added to your environment using\n```\nspack load ftobjectlibrary\n```\n\n\n### CMake\nTo install the FTObjectLibrary with CMake,\n```\nmkdir build \u0026\u0026 cd build\ncmake -DCMAKE_INSTALL_PREFIX=/path/to/install ../\nmake\nmake install\n```\n\n### make\n\ncd to the directory \"makeLibrary\" and type\n```\nmake\n```\n\nThat will create the necessary files in that directory, which can be moved to somewhere else as desired.\n\n### Updating Spack Packages\nWhen new releases of FTObjectLibrary are made, you can contribute the new release to the spack packages.\nBefore making an update to the Spack package, you should familiarize yourself with [the Spack packaging guide](https://spack.readthedocs.io/en/latest/packaging_guide.html)\n\n\nTo add a new FTObjectLibrary release to Spack,\n1. Fork the Spack repository on GitHub.\n\n2. Install and initialize spack on your local system from your fork\n```\ngit clone https://github.com/YOUR GITHUB ACCOUNT/spack.git ~/spack\nsource ~/spack/share/spack/setup-env.sh\n```\n\n3. Open the FTObjectLibrary package for editing\n```\nspack edit ftobjectlibrary\n```\n\n4. Add a new `version` metadata item to the ftobjectlibrary package. The first argument is the version name as it will appear in the spack package manager. Use the `tag` argument to specify the name of the tag as it appears in the FTObjectLibrary repository. As an example, a new version line for `v1.0.1` is shown below.\n```\n    version('v1.0.1', tag='v1.0.1')\n```\n\n5. (Optional) If you would like to be noted as a maintainer, add your github handle to the maintainers list. Maintainers will be notified if Spack users experience issues installing FTObjectLibrary and when modifications are being made to the FTObjectLibrary package in Spack.\n```\n    maintainers = ['schoonovernumerics','your-github-handle']\n```\n\n6. When you are finished editing, save the package file. You can verify the new version is registered in your local repository by obtaining a `spec` for FTObjectLibrary at the new version you've added.\n```\nspack spec ftobjectlibrary@v1.0.1\n```\n\n7. Test to make sure the installation works\n```\nspack install ftobjectlibrary@v1.0.1\n```\n\n8. Run the `spack style` command to ensure that you are meeting Spack's style requirements.\n\n9. When ready, commit your changes and push them to your Github repository.\n\n10. Open a Pull Request against `github.com/spack/spack` to merge your changes with the `spack/spack/develop` branch.\n\n## Authors\nFTObjectLibrary was initiated by\n[David A. Kopriva](https://www.math.fsu.edu/~kopriva/), who is also the principal developer.\nThe full list of contributors can be found in [AUTHORS.md](AUTHORS.md).\n\n\n## License and contributing\nFTObjectLibrary is licensed under the MIT license (see [LICENSE.md](LICENSE.md)).\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ftrixi-framework%2Fftobjectlibrary","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Ftrixi-framework%2Fftobjectlibrary","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ftrixi-framework%2Fftobjectlibrary/lists"}