Candoumbe.Types.Numerics 0.4.1

There is a newer prerelease version of this package available.
See the version list below for details.
dotnet add package Candoumbe.Types.Numerics --version 0.4.1
                    
NuGet\Install-Package Candoumbe.Types.Numerics -Version 0.4.1
                    
This command is intended to be used within the Package Manager Console in Visual Studio, as it uses the NuGet module's version of Install-Package.
<PackageReference Include="Candoumbe.Types.Numerics" Version="0.4.1" />
                    
For projects that support PackageReference, copy this XML node into the project file to reference the package.
<PackageVersion Include="Candoumbe.Types.Numerics" Version="0.4.1" />
                    
Directory.Packages.props
<PackageReference Include="Candoumbe.Types.Numerics" />
                    
Project file
For projects that support Central Package Management (CPM), copy this XML node into the solution Directory.Packages.props file to version the package.
paket add Candoumbe.Types.Numerics --version 0.4.1
                    
#r "nuget: Candoumbe.Types.Numerics, 0.4.1"
                    
#r directive can be used in F# Interactive and Polyglot Notebooks. Copy this into the interactive tool or source code of the script to reference the package.
#:package Candoumbe.Types.Numerics@0.4.1
                    
#:package directive can be used in C# file-based apps starting in .NET 10 preview 4. Copy this into a .cs file before any lines of code to reference the package.
#addin nuget:?package=Candoumbe.Types.Numerics&version=0.4.1
                    
Install as a Cake Addin
#tool nuget:?package=Candoumbe.Types.Numerics&version=0.4.1
                    
Install as a Cake Tool

Types

GitHub Workflow Status (develop) GitHub Workflow Status (nightly) GitHub Workflow Status (main) codecov GitHub raw issues Nuget Nuget Nuget Nuget Mutation testing badge Mutation testing badge Mutation testing badge

Various custom types that can be useful when doing development.

Disclaimer

This project adheres to Semantic Versioning.

Major version zero (0.y.z) is for initial development. Anything MAY change at any time.

The public API SHOULD NOT be considered stable.

How it all started

This project was born out of frustration encountered while developing a matching algorithm in a professional context. The goal of that project was to enable the effective matching of one or more temporary workers based on :

  • the assignment dates
  • the declared availability of collaborators.
  • their qualification ...

With the team back then, it took several weeks to get this "planning matcher" to work properly and, at the time, I was not very happy with the result (specifically with the planning matching part of the algorithm).

That's how I started working on types from Candoumbe.Types.Calendar namespace.

Features

All following features depend on Candoumbe.Types.Core package.

Calendar

Calendar namespace contains various types related to calendar operations, such as:

  • DateTimeRange: a datetime range represents a interval between two DateTimes
  • DateOnlyRange: an interval between two DateOnlys
  • TimeOnlyRange: an interval between two TimeOnlys

Numerics

Numerics namespace contains various types useful when you want to work with very specific numeric values such as:

  • NonNegativeInteger: a type that can only hold non-negative integers
  • PositiveInteger: a type that can only hold integer values greater than zero.

Strings

Strings namespace contains various string-like data

StringSegmentLinkedList

A StringSegmentLinkedList is a special IEnumerable<char> implementation that can be used to perform highly performant "replace"

classDiagram
    direction RL

    namespace Strings {
        class StringSegmentNode {
            + ReadonlyMemory~char~ Value
        }

        class StringSegmentLinkedList {
            - StringSegmentNode head
            - StringSegmentNode tail
            + Append(ReadOnlySpan~char~) StringSegmentLinkedList
            + Append(StringSegmentLinkedList) StringSegmentLinkedList
            + Contains(ReadOnlySpan~char~) bool
            + Contains(Func~char,bool~) bool
            + Replace(Func~char,bool~ predicate, ReadOnlySpan~char~ newValue) StringSegmentLinkedList
            + Replace(Func~char,bool~ predicate, IReadOnlyDictionaryOfChar~ReadOnlyMemory~char~~ substitutions) StringSegmentLinkedList
            + Replace(char oldValue, char newValue) StringSegmentLinkedList
            + Replace(char oldValue, ReadOnlySpan<char> newValue) StringSegmentLinkedList
            + Replace(ReadOnlySpan~char~ oldValue, ReadOnlySpan<char> newValue) StringSegmentLinkedList
        }
    }

    IEnumerableOfReadOnlyMemory~char~ <|-- StringSegmentLinkedList
    StringSegmentLinkedList "1" --> "1" StringSegmentNode: head
    StringSegmentLinkedList "0" .. "1" StringSegmentNode: tail

Contributing

Contributions are welcome! Feel free to submit issues or pull requests to improve the project. License

This project is licensed under the MIT License. See the LICENSE file for more details.

Product Compatible and additional computed target framework versions.
.NET net5.0 was computed.  net5.0-windows was computed.  net6.0 was computed.  net6.0-android was computed.  net6.0-ios was computed.  net6.0-maccatalyst was computed.  net6.0-macos was computed.  net6.0-tvos was computed.  net6.0-windows was computed.  net7.0 was computed.  net7.0-android was computed.  net7.0-ios was computed.  net7.0-maccatalyst was computed.  net7.0-macos was computed.  net7.0-tvos was computed.  net7.0-windows was computed.  net8.0 is compatible.  net8.0-android was computed.  net8.0-browser was computed.  net8.0-ios was computed.  net8.0-maccatalyst was computed.  net8.0-macos was computed.  net8.0-tvos was computed.  net8.0-windows was computed.  net9.0 is compatible.  net9.0-android was computed.  net9.0-browser was computed.  net9.0-ios was computed.  net9.0-maccatalyst was computed.  net9.0-macos was computed.  net9.0-tvos was computed.  net9.0-windows was computed.  net10.0 was computed.  net10.0-android was computed.  net10.0-browser was computed.  net10.0-ios was computed.  net10.0-maccatalyst was computed.  net10.0-macos was computed.  net10.0-tvos was computed.  net10.0-windows was computed. 
.NET Core netcoreapp3.0 was computed.  netcoreapp3.1 was computed. 
.NET Standard netstandard2.1 is compatible. 
MonoAndroid monoandroid was computed. 
MonoMac monomac was computed. 
MonoTouch monotouch was computed. 
Tizen tizen60 was computed. 
Xamarin.iOS xamarinios was computed. 
Xamarin.Mac xamarinmac was computed. 
Xamarin.TVOS xamarintvos was computed. 
Xamarin.WatchOS xamarinwatchos was computed. 
Compatible target framework(s)
Included target framework(s) (in package)
Learn more about Target Frameworks and .NET Standard.

NuGet packages

This package is not used by any NuGet packages.

GitHub repositories

This package is not used by any popular GitHub repositories.

Version Downloads Last Updated
0.4.2-fix.1 525 8/26/2025
0.4.1 173 8/12/2025
0.4.1-beta.1 123 8/12/2025
0.4.0 239 8/7/2025
0.4.0-rc.133 72 8/1/2025
0.3.1 151 7/27/2025
0.3.1-fix.1 48 7/19/2025
0.3.0 167 7/13/2025
0.3.0-rc.380 126 6/25/2025
0.3.0-rc.375 125 6/22/2025
0.3.0-rc.103 124 7/13/2025
0.3.0-rc.101 117 7/13/2025

### 🐛 Fixes
• Revert usage of weak references to optimize StringSegmentLinkedList memory consumption.
### 🧹 Housekeeping
• Fix versioning for hotfix branches.

Full changelog at https://github.com/candoumbe/Candoumbe.Types/blob/main/CHANGELOG.md