-
Notifications
You must be signed in to change notification settings - Fork 10
Loyc.Essentials
qwertie edited this page Aug 10, 2014
·
1 revision
A set of low-level interfaces, structures, functions, and helper classes. Basically, this library contains the kinds of things that would be in the Microsoft BCL if I had been in charge. I started writing a blog series on it.
-
Math (Loyc.Math namespace):
- Misc. math (MathEx.cs)
- Two of my favorite methods: InRange and IsInRange
- Integer bit-fiddling (RoL, RoR, CountOnes, Log2Floor...)
- Floating-point bit-fiddling (NextHigher, NextLower, Int64BitsToDouble...)
- Generic math that works on both integers and floating point (Sqrt, Shift, Mod, Sign, MulDiv, Square)
- Generic pair operations (Swap, SortPair, Average, Min, Max)
- Helper code for doing math in .NET Generics (Interfaces.cs, Maths.tt);
- 128-bit arithmetic (Math128)
- Fixed-point types (FixedPoint.tt)
- Misc. math (MathEx.cs)
-
2D/3D Geometry (Loyc.Geometry namespace): types are parameterized on coordinate type
- Interfaces:
IRectangle<T>,IRectangle3<T>,IPoint<T>,IPoint3<T> - 2D implementations:
Point<T>,Vector<T>,LineSegment<T>,BoundingBox<T> - 3D implementations:
Point3<T>,Vector3<T>,LineSegment3<T>
- Interfaces:
-
Threading: helps implement the "Ambient Service Pattern" in a multithreaded environment
- ThreadEx: A thread that propagates thread-local variables from "parent" to "child" threads
-
ThreadLocalVariable<T>: an alternative to[ThreadStatic], compatible with ThreadEx -
PushedTLV<T>: helper struct for temporarily changing aThreadLocalVariable<T>
-
Misc:
- Symbol, GSymbol, SymbolPool, SymbolPool * Singleton strings based on Ruby, Lisp, etc.
- SimpleTimer, EzStopwatch * More convenient to use than BCL's Stopwatch
- GoInterface, GoInterface, GoInterface<Interface, T>
-
ITags<T>,HashTags<T>* a way of attaching properties to existing objects) - Localize.From() * a simple pluggable mechanism for internationalization)
-
ICloneable<T>* a Clone() method that returns T -
IMessageSink<T>etc. * a simple, generic mechanism to write logs & compiler warnings/errors - MiniTest.cs, RunTests.cs * stripped-down NUnit lookalike to remove need for separate test framework (note: I am currently still using NUnit)
- Pair<A,B> * A struct with A and B values (in contrast, Tuple<A,B> allocates on the heap)
-
WeakReference<T>* Strongly-typed weak reference, plusWeakNullReference<T>.Singletonfor null.
-
Compatibility with earlier .NET versions:
- Defines
IReadOnlyCollection<T>,IReadOnlyList<T>,IReadOnlyDictionary<T>before .NET 4.5 - Note: in the future I might use Theraot's Libraries for backward compatibility
- Defines
-
Collections:
- Collection interfaces:
- ICount,
IListSource<T>,INotifyListChanging<T>, IAutoCreatePool<K,V> - Ranges:
IFRange<T>,IMFRange<T>,IBRange<T>,IMBRange<T>,IRange<T>,IMRange<T>,IBRangeEx<T>,IBRangeEx<RangeT,T>,IRangeEx<T>,IRangeEx<RangeT,T> - Immutable sets:
ISetImm<T, SetT>,ISetTests<SetT>,ISetOperations<T, SetT> - Extended enumerators:
IBinumerator<T>,IMEnumerator<T>,IMBinumerator<T>,IBinumerable<T> - Queue interfaces:
IPush<T>,IPop<T>,IQueue<T>,IStack<T>,IDeque<T> - Read-write interfaces:
IArray<T>,IAddRange<T>,IListRangeMethods<T>,IAutoSizeArray<T>- Unifying interfaces:
ICollectionEx<T>,IListEx<T>
- Unifying interfaces:
- Sink interfaces:
IHasAdd<T>,ISinkCollection<T>,ISinkArray<T>,ISinkList<T> - Lists that are not zero-based:
INegListSource<T>,INegArray<T>,INegAutoSizeArray<T>,INegDeque<T>
- ICount,
- Collection implementations (only simple collections are defined in Loyc.Essentials):
-
DList<T>,InternalDList<T>,InternalList<T>,WeakKeyDictionary<K,V>,WeakValueDictionary<K,V>
-
- Helper classes:
- Slices:
ArraySlice<T>,ListSlice<T>,Slice_<T>,StringSlice,UString - Mutability adapters:
ListAsListSource<T>,ListSourceAsList<T>,CollectionAsSource<T>,SourceAsCollection<T> - Index-offset adapters:
NegList<T>,NegListSource<T> - Reverse-view adapters:
ReverseBinumerator<T>,ReversedList<T>,ReversedListSource<T> - Linq adapters:
SelectListSource<T,TResult> - Other adapters:
RangeEnumerator<T>,RangeEnumerator<R, T>,SelectNegLists<T>,SelectNegListSources<T> - Empty immutable collections:
EmptyList<T>,EmptyEnumerator<T> - Misc:
BufferedSequence<T>,NestedEnumerator<Frame,T> - Sequence generators: IntRange,
Repeated<T> - Dictionary helpers:
KeyCollection<K,V>,ValueCollection<K,V>
- Slices:
- Base classes:
BaseDictionary<K,V>,ListExBase<T>,ListSourceBase<T>,SourceBase<T> - Debugger display helper:
CollectionDebugView<T> - Extension methods
- Views: list.Slice(start, len), list.ReverseView(), list.NegView(zeroOffset)
- Adapters: ICollection.AsSource(), IReadOnlyCollection.AsCollection(), IList.AsListSource(), IListSource.AsList(), IEnumerable.Buffered()
- Queries (here, 'e' means
IEnumerable<T>, 'list' refers to one or more list types)- Upcasting:
list.UpCast<T,TResult>() - list.ForEach(lambda)
- list.Select(lambda) where list is
IListSource<T> - e.AdjacentPairs(), e.AdjacentPairsCircular(),
- e.Zip(other), e.ZipLeft(...), e.ZipLonger(...)
- list.WhereNotNull(),
- list.SelectArray()
- list.IndexWhere(lambda), list.LastIndexWhere(lambda), list.IndexOf(...)
- e.IndexOfMin(...), e.IndexOfMax(...)
- e.MaxOrDefault(...), e.MinOrDefault(...)
- e.Join(separator) * joins list items into a string
- list.CopyTo(T[], arrayIndex),
- list.Randomized()
- list.TryGet(index, defaultValue)
- Upcasting:
- Mutators:
- list.Reverse()
- list.Resize(newSize)
- list.AddRange(
IEnumerable<T>), list.RemoveRange(index, count) - list.RemoveAll(lambda)
- list.Randomize()
- list.Sort(...), list.StableSort(...), list.InsertionSort(...),
- list.Swap(i, j)
- For ranges:
- range.Skip(count), range.DropLast(count)
- range.PopFirst(), range.PopFirst(defaultValue)
- range.PopLast(), range.PopLast(defaultValue)
- range.Contains(IRangeEx), range.Overlaps(IRangeEx)
- Non-extension helper methods:
- ListExt.SortPair(list, i, j, comp)
- ListExt.RangeArray(count)
- Range.Single(value), Range.Repeat(value, count)
- Range.IntRange(start, count)
- Collection interfaces:
-
Non-collection extension methods
- Type.NameWithGenericArgs() * e.g.
typeof(List<int>).NameWithGenericArgs() == "List<Int32>" - Exception.ToDetailedString()
- string.SplitAt(char)
- string.Right(count), string.Left(count), string.TryGet(...), StringBuilder.TryGet(...), string.SafeSubstring(index, count), string.USlice(start, count), string.Find(...)...
- Type.NameWithGenericArgs() * e.g.