Releases: WAN-Solutions/wan24-Core
Releases · WAN-Solutions/wan24-Core
Version 2.45.0
Changes
ChunkStream.FromExisting(Async)
parameterchunkSize
is now the max. chunk size when reading the streams chunk size from the header- Added
ChunkStream.DiscardChunkBuffer
- Added
CountEvent
- Added
AsyncConcurrentDictionary
- Added
*PoolStream.LastBufferIndex|ReturnUnusedBuffers
*PoolStream
which was initialized with an array or memory (in case of(Frozen)MemoryPoolStream
) and used the newreturnData
parameter withfalse
may use off-pool initial data which won't be copied (but may be overwritten)- Added
ReflectionExtensions.(Is|MayBe)Disposable
(Freezable)(Array|Memory)PoolStream
performance improvements- Updated references
Full Changelog: v2.44.0...v2.45.0
Version 2.44.0
Changes
Additions
- Added
Fallback
- Added
(I)(Parallel)Concurrent(Item)QueueWorker(Base)
- Added
ConcurrentLockDictionary
- Added
ConcurrentChangeTokenLockDictionary
- Added
CancellationTokenExtensions.CombineWith
Fixed bugs
- Fixed
ConcurrentChangeTokenDictionary
returned the wrong object for theSyncRoot
property which could cause a dead-lock and other unexpected behavior - Fixed
PriorityQueueWorker
worker thread exception when the queue was empty
Full Changelog: v2.43.0...v2.44.0
Version 2.43.0
Changes
Breaking changes
- Changed method parameter names which where
field
to be compatible with C# 13 FieldInfoExt.Field
isFieldInfoExt.FieldInfo
nowXmlFieldDocComments.Field
isXmlFieldDocComments.FieldInfo
nowPipelineBase.HandleExceptionAsync
parameterex
removed (the exception can be accessed from PipelineContextBase.LastException` now)
Additions
- Added
PipelineContextBase.DisposeData
- Added
PipelineContextBase.LastException
- Added
PipelineBase.FinalizeProcessingAsync
(I)AsyncEvent.(Async)EventHandlers
usesConcurrentHashSet
now
- Added
ChunkStream(EventArgs)
- Added
ChunkTypes
- Added
ChunkStreamEventArgs
- Added
ConstructorAttribute
Fixed bugs
- Fixed
AsyncEnumerableExtensions.ContainsAt(Least|Most)Async
methods missed theAsync
name postfix - Fixed
Anonymizer.AnonymizeEmailAddress
returned an invalid value for email addresses with an alias that is longer than 2 characters - Fixed
DiHelperExtensions.GetDiObjects(Async)
null
parameter handling - Fixed
DiHelperExtensions.GetDiObjects(Async)
parameter and value type examination
Full Changelog: v2.42.0...v2.43.0
Version 2.42.0
Changes
Additions
- Added
ICoreEnumerable<T>.Process
- Added
EnumerableBase<T>.Process
- Added
EnumerableBase<T>.ToArray
- Added
AsyncEnumerableExtensions.ProcessAsync
- Added
QueueEventWorkerBase<T>
- Added
IQueueEventWorker
- Added
QueueEventWorkerTable
- Added
Pipeline(Context)(Base)
- Added
IPipeline
- Added
PipelineTable
- Added
MacAddress
Removals
- Removed
ICoreEnumerable<T>.FirstOrDefault(Async)
overloads withoutdefaultValue
parameter (the parameter usesdefault
as default value now) - Removed
ArrayExtensions.Contains(All|Any)
(fallback toEnumerableExtensions.Contains(All|Any)
)
Fixed bugs
- Fixed
EnumerableAdapter.FirstOrDefault(Async)
nullability
Full Changelog: v2.41.0...v2.42.0
wan24-Core-Validation version 1.5.0
Version 2.41.0
Changes
Additions
- Added
AppConfigLoader<T>
AppConfigBase.Applied
setter is public now
Fixed bugs
- Fixed wrong nullability in
ICoreEnumerable<T>.FirstOrDefault(Async)
andEnumerableBase<T>.FirstOrDefault(Async)
Full Changelog: v2.40.0...v2.41.0
Version 2.40.0
Changes
Breaking changes
- Almost all methods from
EnumerableExtensions
use classes from the newwan24.Core.Enumerables
namespace now - Refactored synchronous and asynchronous enumerable extensions to match a common functionality scheme
Additions
- Added
ReflectionExstensions.InvokeStaticInterfaceMethod((Nullable)<T>)
- Added
ReflectionExtensions.GetStaticInterfaceMethodImplementation
- Added
IStorable(<T>)
- Added
StorableHelper
- Added
StorableExtensions
- Added
ReflectionExtensions.CommonBaseTypes
- Added
TypeInfoExt.(Get)Interfaces
- Added
TypeInfoExt.InterfaceCount
- Added
IPluginExt
- Added
wan24.Core.Enumerables
namespace - Added
GenericHelper.AreEqual
method with object hash code parameters - Added
PooledTempStreamMemoryLimit(Table)
- Added
PooledTempStream
constructor parameterslimit
,limitContext
andisDynamicSharedLimit
- Added
MemorySequenceStream
- Added
ICustomAttributeProviderHost
Removals
- Removed
EnumerableExtensions.Enumerate(Async)
methods with a filter parameter (useWhere(Async)
instead) - Removed
TypeCache
due to a hash code collision risk, which can't be taken in even a lesser security-sensitive environment (no replacement available)
Fixed bugs
- Fixed
PipelineElementBase.ProcessableTypes
incomplete type list - Fixed using object hash code as unique identifier (now using the object instance reference instead)
Full Changelog: v2.39.0...v2.40.0
Version 2.39.0
Changes
Breaking changes
EnumerableExtensions.ExecuteForAll(Async)
handler needs to return if to yield the result- Moved some extension methods for
IAsyncEnumerable<T>
fromEnumerableExtensions
toAsyncEnumerableExtensions
ReadOnlyCollection<T>
usages are replaced byImmutableArray<T>
nowEnumerationBase
properties returnFrozen(Set|Dictionary)
now- Some
DelegateExtensions.InvokeAll
extension methods return an array now (beforeIEnumerable<>
) JsonExtensions
works with dictionary interfaces now- Added
HumanReadableUnits.FormatBytes
parametersunitFactor
andunitSeparator
HumanReadableUnits
methodsunits
parameter is anImmutableArray<string>
now- Moved
TryDispose(Async)
fromAsyncHelper
to(Async)DisposableExtensions
IDisposableObject
implementsIBasicDisposableObject
now- Many types which previously extended
Disposable(Record)Base
do now extend any of(Basic|Simple)(All|Async)Disposable(Record)Base
, which may have changed the disposing logic, the available base disposable features (events, etc.) and their interfaces Cancellations
andCombinedCancellationTokenSource
are obsolete now (useCancellationTokenSource.CreateLinkedTokenSource
instead)MemoryPoolStream
uses aMemoryPool<byte>
now (beforeArrayPool<byte>
)- Using
MemoryPool<T>
andRentedMemory(Ref)<T>
where possible (many places) MemoryPoolStream
length is now limited toint.MaxValue - 1
Additions
- Added
OptionValue<t1..t8>
- Added
EitherValue<t1..t8>
- Added
PipelineStream
- Added
IPipelineResult(Buffer|Stream)
- Added
PipelineElementBase
- Added
PipelineResultBase
- Added
PipelineResult((Rented)Buffer|Stream)
StreamBase.Ensure(Seek|Writ|Read)able
are virtual now- Added
PipelineResultReadOnlyBuffer
- Added
PipelineElementDynamic
- Added
PipelineElementStream
- Added
IPipelineElementObject(<T>)
- Added
IPipelineResultObject(<T>)
- Added
PipelineElement(Generic)ObjectBase
- Added
PipelineResultObject<T>
- Added
NullValueException
- Added
EnumerableExtensions.Distinct(By)Async
- Added
EnumerableExtensions.ExecuteResult<T>
- Added
PipelineStreamTable
- Added
EnumerableExtensions.(Where|Skip|Take|Select|Distinct(By)|First(OrDefault))
forImmutableArray<T>
andFrozenSet<T>
- Added
AsyncEnumerableExtensions.(Where|Skip|Take|Select|Distinct(By)|First(OrDefault))Async
forIAsyncEnumerable<T>
,ImmutableArray<T>
andFrozenSet<T>
- Added
DisposableExtensions.DisposeAll
forIDisposable[]
,(I)List<IDisposable>
,ImmutableArray<IDisposable>
andFrozenSet<IDisposable>
- Added
AsyncDisposableExtensions.DisposeAll
forIAsyncDisposable[]
,(I)List<IAsyncDisposable>
,ImmutableArray<IAsyncDisposable>
andFrozenSet<IAsyncDisposable>
- Added
ArrayExtensions.Contains(All|Any)
for(I)List<T>
,ImmutableArray<T>
andFrozenSet<T>
- Added
BytesExtensions.ToHexString
forSpan<byte>
,(ReadOnly)Memory<byte>
andbyte[]
- Added
ChangeCallbackExtensions.Invoke
for(I)List<ChangeCallback>
,ImmutableArray<ChangeCallback>
andFrozenSet<ChangeCallback>
- Added
DelegateExtensions.InvokeAll
for(I)List<T>
,ImmutableArray<T>
andFrozenSet<T>
- Added
ObjectMappingExtensions.MapObjectsToAsync
for(I)List<object>
,ImmutableArray<object>
andFrozenSet<object>
- Added
ObjectMappingExtensions.MapToAsync
for(I)List<T>
,ImmutableArray<T>
andFrozenSet<T>
- Added
ObjectMappingExtensions.MapObjectsTo
for(I)List<object>
,ImmutableArray<object>
andFrozenSet<object>
- Added
ObjectMappingExtensions.MapTo
for(I)List<T>
,ImmutableArray<T>
andFrozenSet<T>
- Added
OptInOutExtensions.FilterOpt(In(Only)|Out)
for(I)List<T>
,ImmutableArray<T>
andFrozenSet<T>
- Added
VersioningExtensions.FilterByVersion
for(I)List<T>
,ImmutableArray<T>
andFrozenSet<T>
- Added
AsyncEnumerableExtensions.(All|Any)Async
- Added
EnumerableExtensions.(All|Any)
forImmutableArray<T>
andFrozenSet<T>
- Added
HumanReadableUnits.ProgressTimeSpanUnits
- Added
HumanReadableUnits.POWERS_OF_(TWO|TEN)
- Added
HumanReadableUnits.ByteUnits2
- Added
HumanReadableUnits.FormatBytesFull
- Added
HumanReadableUnits.ByteUnitsShort
StringExtensions.Parse
allows anyIDictionary<string, string>
asdata
parameter nowStringParserContext.(Data|Parsed)
isIDictionary<string, string>
now- Added
DisposableHelper.TryDisposeAll
for(I)List<object>
,ImmutableArray<object>
andFrozenSet<object>
- Added
AsyncDisposableHelper.TryDisposeAll
for(I)List<object>
,ImmutableArray<object>
andFrozenSet<object>
- Added
ParallelExtensions
- Added
IBasicDisposableObject
- Added
Basic(All|Async)Disposable(Record)Base
(which isn't anIDisposableObject
!) - Added
ENV.ClrPlatformTarget
- Added
MemoryPoolExtensions
- Added
RentedMemory(Ref)<T>
- Added
MemoryOwner<T>
which implementsIMemoryOwner<T>
and can wrap any existingMemory<T>
MemoryPoolStream
can now be initialized with a copy-free memory from a memory pool (IMemoryOwner<T>
) or by wrapping any existingMemory<byte>
withMemoryOwner<byte>
MemoryPoolStream
can now be read-only with thebyte[]
orIMemoryOwner<byte>
constructor parameter, ifwritable
was set tofalse
- The
MemoryPoolStream
constructor with an existingbyte[]
parameter won't copy the given array if read-only - Added
MemoryPoolStream
constructor overloads forReadOnly(Span|Memory)<byte>
- Added parameters
offset
andlength
for manyEnumerableExtensions
methods - Added
Settings.ClearBuffers
- Added
AppConfig.ClearBuffers
Rented(Array|Memory)*.Clear
usesSettings.ClearBuffers
per default now- Added
ArrayPoolStream
- Added
Freezable(Array|Memory)PoolStream
- Added
FreezableList.RemoveRange
MemoryPoolStream
now usesSettings.ClearBuffers
for the defaultCleanReturned
property value of an instance- Added
MemorySequenceSegment<T>
- Added
MemoryPoolStream.ToReadOnlySequence
Removals
- Removed
EnumerableExtensions
for(ReadOnly)Memory<T>
because of bad performance when having to accessSpan
while iterating - Removed
(Async)DisposableExtensions
for(ReadOnly)Memory<T>
because of bad performance when having to accessSpan
while iterating
Fixed bugs
- Fixed
OptInOutExtensions.FilterOptOut
filtered opt-in elements - Fixed
HumanReadableUnits.FormatBytes
wrong formatting for values greater than ExaByte - Fixed
SimpleDisposable(Record)Base
destructor locked for disposing and missing creation stack information - Fixed
XmlDocComments
descriptions are trimmed now
Full Changelog: v2.38.0...v2.39.0
Version 2.38.0
Changes
wan24-Core-Validation
- Release version 1.4.0
- Added
EndPointAttribute.UseCache
- Added
HostEndPointAttribute.UseCache
wan24-Core
Additions
SynchronizedStream
supports more overriding now- Added
PreBufferingStream
- Added
MapAttribute.HasMappingCondition
- Added
MapAttribute.MappingCondition
- Added
ObjectMapping.Condition_Delegate<tSource, tTarget>
- Added
ObjectMapping
mapping condition support to allAdd*
methods - Added
(Async)CachedEnumerablePagination
- Added
PaginationMetaData
- Added
(Async)EnumerablePagination.LastException
- Added
IPlugin
- Added
PluginInfo
- Added
PluginLoadContext
- Added
Plugin
- Added
TypeHelper.Remove(Assembly|LoadContext)
- Added
DistributedReadWriteLockBase
- Added
RegularExpressions.(RX_)WHITESPACE
- Added
Anonymizer.AnonymizeBankAccountNumber
- Added
Anonymizer.AnonymizeIban
- Added
ObjectExtensions.CombineHashCodes
extension methods forT[]
,IEnumerable<T>
,(ReadOnly)Span<T>
and(ReadOnly)Memory<T>
- Added
MathExt
Fixed bugs
- Fixed
(Async)EnumerablePagination
page increasing - Fixed
ReflectionExtensions.CreateMethodInvoker
created a double lambda for an object instance method
Full Changelog: v2.37.0...v2.38.0
Version 2.37.0
Changes
Breaking changes
- Added
ICache<T>.RemoveBy(Async)
- Added
ICacheEntryOptions.Size
Additions
- Added
ICacheEntry<T>.OnEntryRemoved
- Added
ICacheENtry<T>.OnRemoved
- Added
ObjectUpdateManager<T>
ChangeToken
implementsINotifyPropertyChanging
now- Added
DummyDisposable
- Added
MethodInfoExt.GetGenericMethodDefinition
- Added
TypeInfoExt.GetGenericTypeDefinition
- Added
ReflectionExtensions.GetParameterCountCached
- Added
ReflectionExtensions.GetGenericArgumentCountCached
- Added
Freezable((Ordered)Dictionary|List|Set)
- Added
FreezableExtensions
- Added
EquatableImmutableArray
- Added
EnumerableExtensions.Enumerate
forImmutableArray<T>
- Added
EnumerableExtensions.ExecuteForAll(Async)
forT[]
,(ReadOnly)Memory<T>
,I(Async)Enumerable<T>
,ImmutableArray<T>
and(I)List<T>
- Added
AutoDisposer<T>.OnlyExclusiveObjectUsage
- Added
AutoDisposer<T>.UseObjectExclusive
- Added
InMemoryCache<T>.ReduceBy(Async)
overloads which accept a filter parameter - Added
CacheSwitch(Options)<T>
- A compiled
ObjectMapping
won't allow to add more mappings anymore - Added
((Async)Enumerable|Queryable)Pagination<T>
- Added
(Queryable|Enumerable)Builder(Extensions)(<T>)
- Added
EnumerableExtensions.CreateBuilder
forIEnumerable<T>
andIQueryable<T>
- Added
SyncEnumerator<T>
- Added
ConvertStringValueAttribute
ChangeToken
performance optimizations(Concurrent)ChangeToken(Collection|Dictionary)
forwards thePropertyChanging
event fromChangeToken
nowReflectionExtensions.CanCreate(Constructor|Method)Invoker
istrue
for by-ref parameters nowReflectionExtensions.GetRealType
skips pointers nowReflectionExtensions.CanCreateConstructorInvoker
skips declaring by-ref-like types now
Removals
- Removed
ChangeToken<T>.DummySubscription
Full Changelog: v2.36.0...v2.37.0