Davesoft.LinkedPages
1.0.0.4
dotnet add package Davesoft.LinkedPages --version 1.0.0.4
NuGet\Install-Package Davesoft.LinkedPages -Version 1.0.0.4
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="Davesoft.LinkedPages" Version="1.0.0.4" />
For projects that support PackageReference, copy this XML node into the project file to reference the package.
<PackageVersion Include="Davesoft.LinkedPages" Version="1.0.0.4" />
<PackageReference Include="Davesoft.LinkedPages" />
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 Davesoft.LinkedPages --version 1.0.0.4
The NuGet Team does not provide support for this client. Please contact its maintainers for support.
#r "nuget: Davesoft.LinkedPages, 1.0.0.4"
#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 Davesoft.LinkedPages@1.0.0.4
#: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=Davesoft.LinkedPages&version=1.0.0.4
#tool nuget:?package=Davesoft.LinkedPages&version=1.0.0.4
The NuGet Team does not provide support for this client. Please contact its maintainers for support.
Handy for dividing a list of T while storing a T2 between each page.
Behold what the thing does:
var book = new Davesoft.LinkedPages.Page<string, int>("A");
Assert.Same(book.Item, "A");
book.AddPageToEnd("BB");
book.LastPage().PreviousJoiner.Item = 1;
book.AddPageToEnd("CCC");
book.LastPage().PreviousJoiner.Item = 3;
var allpages = book.ListAllPages();
Assert.Equal(3, allpages.Count);
book.AddPageToEnd("DDDD");
book.LastPage().PreviousJoiner.Item = 6;
allpages = book.ListAllPages();
Assert.Equal(4, allpages.Count);
var sum = (from j in book.ListAllJoiners() select j.Item).Sum();
Assert.Equal(10, sum);
Assert.Equal(allpages.Count-1, book.ListAllJoiners().Count);
var victim1 = book.NextPage.NextPage; //make a ref to the page, or we'll lose it
victim1.Replace("<", -1, ">");
Assert.Equal(victim1.NextPage.PreviousPage.Item, victim1.PreviousPage.NextPage.PreviousPage.Item);
Assert.Equal(victim1.NextPage.PreviousPage.FirstPage().Item, victim1.PreviousPage.NextPage.FirstPage().Item);
Assert.Equal(book.Item, victim1.PreviousPage.NextPage.FirstPage().Item);
Assert.Equal(book.Item, victim1.NextPage.PreviousPage.FirstPage().Item);
Assert.NotEqual(victim1.Item, victim1.PreviousPage.NextPage.Item);
Assert.NotEqual(victim1.NextPage.PreviousPage.Item, victim1.Item);
WeakReference realTest = new WeakReference(victim1);
victim1 = null;
// ensure garbage collection
// why choose when you can do em all
System.GC.Collect();
System.GC.WaitForFullGCApproach();
System.GC.WaitForFullGCComplete();
Assert.False(realTest.IsAlive); // important
allpages = book.ListAllPages();
sum = (from j in book.ListAllJoiners() select j.Item).Sum();
Assert.Equal(9,sum);
Assert.Equal(allpages.Count - 1, book.ListAllJoiners().Count);
book.Replace("earst", 9, "2"); //replace the first page
sum = (from j in book.ListAllJoiners() select j.Item).Sum();
Assert.Equal(18, sum);
Assert.True(book.HasBeenReplaced);
Assert.Equal(book.PreviousPage,book.NextPage.FirstPage());
Assert.Equal(book.FirstPage(), book.NextPage.FirstPage());
realTest = new WeakReference(book);
book = book.PreviousPage;
// ensure garbage collection
System.GC.Collect();
System.GC.WaitForFullGCApproach();
System.GC.WaitForFullGCComplete();
Assert.False(realTest.IsAlive); // important
Also contains LinkedFaces, for linking faces of T together with binders of T2. Below is a simple D6 with named faces and worthless binder values.
var atk = new Davesoft.LinkedFaces.BindFace<string, int>("atk");
atk.AddBindFace("def", 0, "up", "down");
atk.AddBindFace("eva", 0, "down", "up");
var def = atk.Directions["up"].RouteMe(atk);
Assert.Equal("def", def.Item);
var acc= def.AddBindFace("acc", 0, "up", "down");
var eva = atk.Directions["down"].RouteMe(atk);
Assert.Equal("eva", eva.Item);
acc.AddBinderToFace(eva, 0, "up", "down");
var mgk = new Davesoft.LinkedFaces.BindFace<string, int>("mgk");
var peace = new Davesoft.LinkedFaces.BindFace<string, int>("peace");
var tmp = atk.Directions["up"].RouteMe(atk);
var moves = 0;
while (tmp.Item != atk.Item)
{
mgk.AddBinderToFace(tmp, 0, "mundaneward " + moves, "magicward");
peace.AddBinderToFace(tmp, 0, "war " + moves, "peace");
tmp = tmp.Directions["up"].RouteMe(tmp);
moves++;
}
mgk.AddBinderToFace(tmp, 0, "mundaneward " + moves+1, "magicward");
peace.AddBinderToFace(tmp, 0, "war " + moves+1, "peace");
Assert.True(moves > 2);
Assert.True(mgk.GetDirections().Count ==4);
Assert.True(peace.GetDirections().Count == 4);
Assert.True(atk.GetDirections().Count == 4);
Assert.True(def.GetDirections().Count == 4);
Assert.True(acc.GetDirections().Count == 4);
Assert.True(eva.GetDirections().Count == 4);
| Product | Versions 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 was computed. 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 was computed. 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 | netcoreapp2.0 was computed. netcoreapp2.1 was computed. netcoreapp2.2 was computed. netcoreapp3.0 was computed. netcoreapp3.1 was computed. |
| .NET Standard | netstandard2.0 is compatible. netstandard2.1 was computed. |
| .NET Framework | net461 was computed. net462 was computed. net463 was computed. net47 was computed. net471 was computed. net472 was computed. net48 was computed. net481 was computed. |
| MonoAndroid | monoandroid was computed. |
| MonoMac | monomac was computed. |
| MonoTouch | monotouch was computed. |
| Tizen | tizen40 was computed. 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.
-
.NETStandard 2.0
- No dependencies.
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 |
|---|---|---|
| 1.0.0.4 | 1,074 | 10/20/2018 |