{"payload":{"feedbackUrl":"https://github.com/orgs/community/discussions/53140","repo":{"id":197723235,"defaultBranch":"master","name":"Gstc.Collections.ObservableLists","ownerLogin":"gsonnenf","currentUserCanPush":false,"isFork":false,"isEmpty":false,"createdAt":"2019-07-19T07:22:30.000Z","ownerAvatar":"https://avatars.githubusercontent.com/u/686792?v=4","public":true,"private":false,"isOrgOwned":false},"refInfo":{"name":"","listCacheKey":"v0:1687215407.8872929","currentOid":""},"activityList":{"items":[{"before":"7e799371f10325d2e719f884145fa9416e8486a2","after":null,"ref":"refs/heads/dependabot/nuget/Gstc.Collections.ObservableLists/NuGet.CommandLine-6.0.5","pushedAt":"2023-06-19T22:56:47.887Z","pushType":"branch_deletion","commitsCount":0,"pusher":{"login":"dependabot[bot]","name":null,"path":"/apps/dependabot","primaryAvatarUrl":"https://avatars.githubusercontent.com/in/29110?s=80&v=4"}},{"before":null,"after":"a997764b9a048ff4a538c6f2cff48a15f3a866ce","ref":"refs/heads/dependabot/nuget/Gstc.Collections.ObservableLists/NuGet.CommandLine-5.11.5","pushedAt":"2023-06-19T22:56:43.786Z","pushType":"branch_creation","commitsCount":0,"pusher":{"login":"dependabot[bot]","name":null,"path":"/apps/dependabot","primaryAvatarUrl":"https://avatars.githubusercontent.com/in/29110?s=80&v=4"},"commit":{"message":"Bump NuGet.CommandLine in /Gstc.Collections.ObservableLists\n\nBumps [NuGet.CommandLine](https://github.com/NuGet/NuGet.Client) from 4.9.6 to 5.11.5.\n- [Release notes](https://github.com/NuGet/NuGet.Client/releases)\n- [Commits](https://github.com/NuGet/NuGet.Client/commits)\n\n---\nupdated-dependencies:\n- dependency-name: NuGet.CommandLine\n dependency-type: direct:development\n...\n\nSigned-off-by: dependabot[bot] ","shortMessageHtmlLink":"Bump NuGet.CommandLine in /Gstc.Collections.ObservableLists"}},{"before":null,"after":"7e799371f10325d2e719f884145fa9416e8486a2","ref":"refs/heads/dependabot/nuget/Gstc.Collections.ObservableLists/NuGet.CommandLine-6.0.5","pushedAt":"2023-06-14T16:46:40.830Z","pushType":"branch_creation","commitsCount":0,"pusher":{"login":"dependabot[bot]","name":null,"path":"/apps/dependabot","primaryAvatarUrl":"https://avatars.githubusercontent.com/in/29110?s=80&v=4"},"commit":{"message":"Bump NuGet.CommandLine in /Gstc.Collections.ObservableLists\n\nBumps [NuGet.CommandLine](https://github.com/NuGet/NuGet.Client) from 4.9.6 to 6.0.5.\n- [Release notes](https://github.com/NuGet/NuGet.Client/releases)\n- [Commits](https://github.com/NuGet/NuGet.Client/commits)\n\n---\nupdated-dependencies:\n- dependency-name: NuGet.CommandLine\n dependency-type: direct:development\n...\n\nSigned-off-by: dependabot[bot] ","shortMessageHtmlLink":"Bump NuGet.CommandLine in /Gstc.Collections.ObservableLists"}},{"before":"7466d429a3d3fc7ac11a5e6a749ca357e6901367","after":"63fbd68ec3f99fd33fde6941fe91585ff991ebb6","ref":"refs/heads/master","pushedAt":"2023-03-18T07:11:02.027Z","pushType":"push","commitsCount":1,"pusher":{"login":"gsonnenf","name":"Greg Sonnenfeld","path":"/gsonnenf","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/686792?s=80&v=4"},"commit":{"message":"Update README.md","shortMessageHtmlLink":"Update README.md"}},{"before":"a553a866eb094166c0ae1009cbfb16c9f4b60df5","after":"7466d429a3d3fc7ac11a5e6a749ca357e6901367","ref":"refs/heads/master","pushedAt":"2023-03-18T06:54:52.261Z","pushType":"pr_merge","commitsCount":1,"pusher":{"login":"gsonnenf","name":"Greg Sonnenfeld","path":"/gsonnenf","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/686792?s=80&v=4"},"commit":{"message":"Dev2.0.1 (#8)\n\n* Added Feature: Added IReadOnlyList interface to AbstractUpcastList, AbstractUpcastLockingList and IObservableList\r\n\r\nFix: Changed file name of AbstractUpcastList to match the class name.\r\n\r\nFix: (Low impact breaking change): Changed name of AbstractUpcastLockingIList to AbstractListUpcastLocking to fit pattern.\r\n\r\nUnit Test:\r\n* Added a test for IReadOnlyList In ObservableListUpcastTest.\r\n* Fixed grammar error in test name.\r\n\r\n* Minor breaking changes:\r\n* AbstractListUpcast and AbstractListUpcastLocking have been renamed to ListUpcastAbstract and ListUpcastLockingAbstract, and both moved to namespace Base.\r\n\r\n* IObservableIListLocking has been moved to the root namespace, and Multithread namespace removed. Multithread namespace removed in all files.\r\n\r\n* Invalid reentrancy now throws ReentrancyException (that inherits from NotSupportedException) instead of NotSupportedException. Unit test updated to reflect this.\r\n\r\nMajor Fixes:\r\n*IList support added back to AbstractListUpcastLocking.\r\n\r\n* AbstractListUpcast and AbstractListUpcastLocking now have proper type checking on IList arguments that behave the same as List when cast to Ilist.\r\n\r\n* In AbstractListUpcast, `int IList.Add(object)` now has a call to a virtual method int `IList_AddCustom(TItem)` that allows the user to specify their own functionality for when the return index value is not the last item in the list. (A benchmark test was added and demonstrated the virtual call had minimal overhead).\r\n\r\n* In AbstractListUpcastLocking, `int IList.Add(object)` now has a call to abstract method `int IList_AddCustom(TItem)` that requires the user to specify their own functionality (for thread locking and/or custom return index).\r\n\r\n*Unit tests added and modified to reflect these changes.\r\n\r\nMajor Refactor:\r\n* Protected class SimpleMonitor was moved out of ObservableList/ObservableIList, refactored into a new Utils namespace as a public class name ReentrancyMonitorSimple. The micro-optimizations from having it in the same namespace was negligible compared to the unneeded complexity and reuse potenial in other libraries (e.g. ObservableDictionary).\r\n\r\n* Protected class MultithreadMonitor was moved out of ObservableIListLocking, refactored into a new Utils namespace as a public class name ReentrancyMonitorMultithread.\r\n\r\n*Protected class RwLockWrapper, WriteLock and ReadLock was moved out of ListUpcastLockingAbstract, and into the Utlis namesapce as a public class. These were renamed RwLockScope, ReadLockScope, and WriteLockScope.\r\n\r\nMisc/Nuance:\r\nScopedStopWatch utility added to ExampleTest.Tools.\r\nBenchmark tests of abstract/virtual/adapter method overrides for list add operations added.\r\nWhite space adjusted in several files.\r\nMinor readme update.\r\nChange in readme.\r\n\r\n* Minor Breaking changes:\r\n* AbstractPropertyBinder renamed to PropertyBinderAbstract.\r\n\r\n* In ListUpcastLockingAbstract the names of locking mechanisms have been changed. (e.g. RwLockScope to LockRwScope).\r\n\r\n* For binding classes, NotSupportedException has been replaced by OneWayBindingException (which inherits from NotSupportedException), and is thrown when attempting to modify a target collection, but bidirectional is false.\r\n\r\nBug fix:\r\nIn ObservableListBind and ObservableListBindProperty the InProgress flags for syncing were not exception safe. This has beenf fixed.\r\n\r\n* The SyncingFlagScope class, a utility that sets the scope of a flag `using` statement (`using` creates an implicit try-finally statement), has been introduced.\r\n\r\n* All inProgess blocks are now wrapped by `using ( syncingFlagScope.begin() ) {...}` providing exception safety.\r\n\r\n* Unit test for flag exception safety created in `ObservableListBindTest`.\r\n\r\n* AssemblyInfo introduced to allow sharing of internals between `ObservableLists` and `Test`.\r\n\r\nminor Bugfix:\r\nWhen setting parameters in generics classes, the classes now use `default` instead of `null`.\r\n\r\nUnit Test Changes:\r\n* In Test.Tools, AssertEvent.NumberOfEvents_NotifyCollection now has functionality to support events inherited from a base class.\r\n\r\n* In Test.Fake, default ctor parameters added to ItemA and ItemB.\r\n\r\n* In binding unit tets, OneWayBindingException replaces NotSupportedException/InvalidOperationException.\r\n\r\nNuance:\r\n* Typo fix in name Example project ( ButtonHander_ to ButtonClick_)\r\n\r\n* Exception method name changed in ListUpcastAbstract/ListUpcastLockingAbstract to match convention. Changed to Protected.\r\n\r\n* Added additonal benchmarks and commented out test code.\r\n\r\nAdded draft of documentation code.\r\n\r\n* Major Internal Refactor of ObservableList:\r\n\r\nObservableList is now a generic version of ObservableIList> instead of its own implementation.\r\n\r\nThese two classes used to have significant differences (e.g. AddRange was not initially in ObservableIList) the code base converged and they are now almost the same. They were benchmarked at the same speed.\r\n\r\nThe only instrinsic difference is that AddRange(...) is now calls a virtual method AddRangeInternal(...) that is overridden in the List version. The extra jump to an override is neglible compared to the time of the Event calls.\r\n\r\nChanges To ObservableIList:\r\nThe internal `_list` method has also been set to protected instead of private.\r\n\r\nAddRangeInternal, AddMoveInternal are now used in AddRange(...) and AddMove(...). They call an internal overridable implementation of these operations.\r\n\r\nNuance:\r\nfixed spacing/order/comments in IObservableList\r\n\r\n* Changes to Nuspec documentation","shortMessageHtmlLink":"Dev2.0.1 (#8)"}},{"before":"4f749086c05ad5f09209e1e0ac57c1d75a5e4006","after":"634077efd80838e1333557409816f859fb006978","ref":"refs/heads/Dev2.0.1","pushedAt":"2023-03-18T06:49:06.650Z","pushType":"push","commitsCount":1,"pusher":{"login":"gsonnenf","name":"Greg Sonnenfeld","path":"/gsonnenf","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/686792?s=80&v=4"},"commit":{"message":"Changes to Nuspec documentation","shortMessageHtmlLink":"Changes to Nuspec documentation"}}],"hasNextPage":false,"hasPreviousPage":false,"activityType":"all","actor":null,"timePeriod":"all","sort":"DESC","perPage":30,"cursor":"djE6ks8AAAADRMQ5SwA","startCursor":null,"endCursor":null}},"title":"Activity ยท gsonnenf/Gstc.Collections.ObservableLists"}