{"payload":{"feedbackUrl":"https://github.com/orgs/community/discussions/53140","repo":{"id":205925363,"defaultBranch":"master","name":"lu","ownerLogin":"zorael","currentUserCanPush":false,"isFork":false,"isEmpty":false,"createdAt":"2019-09-02T19:42:04.000Z","ownerAvatar":"https://avatars.githubusercontent.com/u/1975169?v=4","public":true,"private":false,"isOrgOwned":false},"refInfo":{"name":"","listCacheKey":"v0:1706365143.0","currentOid":""},"activityList":{"items":[{"before":"192dd1a0594ecec5d018be65e145ab1e7943666a","after":"4918f9e46f9735db5293445085bbe94ab1bc4d80","ref":"refs/heads/gh-pages","pushedAt":"2024-01-27T14:14:30.000Z","pushType":"force_push","commitsCount":0,"pusher":{"login":"github-actions[bot]","name":null,"path":"/apps/github-actions","primaryAvatarUrl":"https://avatars.githubusercontent.com/in/15368?s=80&v=4"},"commit":{"message":"Deploy to GitHub pages","shortMessageHtmlLink":"Deploy to GitHub pages"}},{"before":"e1af3dc34cdad0d8fac20f6b946526c90292624b","after":"ce2ae5af71f998355d35041b5c87a25a79d772f7","ref":"refs/heads/master","pushedAt":"2024-01-27T14:14:02.000Z","pushType":"push","commitsCount":1,"pusher":{"login":"zorael","name":"JR","path":"/zorael","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/1975169?s=80&v=4"},"commit":{"message":"v2.2.0\n\nThis release adds several new features, and as such bumps the minor version.\n\nAdded `lu.traits.udaIndexOf`, upstreamed from importing projects.\nIt functions the same as `std.traits.hasUDA` in that you can use it to\ntell whether a symbol is annotated with some attribute, but it incurs\nless template bloat and lowers compilation memory required. As the name\nimplies, unlike `hasUDA` it returns the index of the attribute, or `-1`\nif it doesn't exist, so it's not a direct drop-in replacement.\n\nAdded `lu.traits.stringOfTypeOf`, upstreamed from importing projects.\nA simple template that aliases itself to the string name of a passed type,\nor the string name of the type of a passed symbol.\n\nAdded `lu.array.zero`, upstreamed from importing projects. It allows for\nzeroing out the internal `.data` array of a `std.array.Appender`.\nThis can be useful if these contain indirections, such as an\n`Appender!(string[])` does, as a built-in call to `.clear()` would never\nnull the pointers, and the memory referenced would be considered live by\nthe garbage collector.\n\nAdded `lu.string.replaceFromAA`, upstreamed from importing projects.\nIt replaces all occurrences of `$tokens` in a string with values from an\nassociative array. The associative array must be keyed by the token\nstrings, and have values in the form of delegates (or functions) that in\nturn return replacement strings. This is useful if you want to replace\nmany tokens in a string at the same time, and when organising them into\nan associative array makes sense.\n\n`lu.container.RehashingAA` was fleshed out, and while it can't be called\nfully complete, it is now much more useful. Notably you can't `foreach`\nover one as the `opApply` function isn't implemented, but the `.byKey`,\n`.byValue` and `.byKeyValue` properties are in place and should in the\nmajority of cases be enough. If it isn't, you can always access the\nunderlying internal associative array directly via the `.aaOf` escape hatch.\n\n* Refactored `escapeControlCharacters` and `removeControlCharacters` to\n copy (chunks of) the input string by slice instead of\n character-by-character\n* Converted many template constraints into static asserts with\n descriptive messages\n* Miscellaneous code cleanup","shortMessageHtmlLink":"v2.2.0"}},{"before":"5688da620f0cf10bb040f337b14d1df916cd43bd","after":"192dd1a0594ecec5d018be65e145ab1e7943666a","ref":"refs/heads/gh-pages","pushedAt":"2024-01-27T13:05:22.000Z","pushType":"force_push","commitsCount":0,"pusher":{"login":"github-actions[bot]","name":null,"path":"/apps/github-actions","primaryAvatarUrl":"https://avatars.githubusercontent.com/in/15368?s=80&v=4"},"commit":{"message":"Deploy to GitHub pages","shortMessageHtmlLink":"Deploy to GitHub pages"}},{"before":"2e6c6f6309a12f58ca34b115d12243d09bb628f7","after":"e1af3dc34cdad0d8fac20f6b946526c90292624b","ref":"refs/heads/master","pushedAt":"2024-01-27T13:04:55.000Z","pushType":"push","commitsCount":15,"pusher":{"login":"zorael","name":"JR","path":"/zorael","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/1975169?s=80&v=4"},"commit":{"message":"Refactor {escape,remove}ControlCharacters\n\nUse the new approach where we avoid adding each character one by one.","shortMessageHtmlLink":"Refactor {escape,remove}ControlCharacters"}},{"before":"b8131953f3240de7c923fb518b5efd4e45646e4b","after":"5688da620f0cf10bb040f337b14d1df916cd43bd","ref":"refs/heads/gh-pages","pushedAt":"2024-01-04T23:57:57.000Z","pushType":"force_push","commitsCount":0,"pusher":{"login":"github-actions[bot]","name":null,"path":"/apps/github-actions","primaryAvatarUrl":"https://avatars.githubusercontent.com/in/15368?s=80&v=4"},"commit":{"message":"Deploy to GitHub pages","shortMessageHtmlLink":"Deploy to GitHub pages"}},{"before":"e4c8d1ae47b13cbd1fac7f5e1e124c1feef0855a","after":"2e6c6f6309a12f58ca34b115d12243d09bb628f7","ref":"refs/heads/master","pushedAt":"2024-01-04T23:57:27.000Z","pushType":"push","commitsCount":1,"pusher":{"login":"zorael","name":"JR","path":"/zorael","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/1975169?s=80&v=4"},"commit":{"message":"v2.1.0\n\nThis release adds several new features, and as such bumps the minor\nversion.\n\nAdded `lu.container.RehashingAA`; a templated wrapper around a built-in\nassociative array that rehashes itself when it reaches a configurable\nload factor. This is useful if you aim to keep a growing associative\narray around long-term that you ideally want to keep rehashed to avoid\nperformance degradation, without having to continuously rehash it manually.\n\nAdded `lu.container.MutexedAA`; a templated wrapper around a built-in\nassociative array that locks a mutex before performing any operations\non the array. This should make it safe to use in a multi-threaded\nenvironment, provided it is set up correctly (by calling\n`MutexedAA.setup()`) before passing it to other threads.\nNot all associative array operations are exposed, as some are\ninherently not thread-safe.\n\nAdded `lu.container.uniqueKey` which, given an associative array with\nan integral (numeric) key type, reserves a unique key (for which there\nexists on value) by assigning it a dummy value, and then returns the\nkey to the caller. This allows for a simple way to generate keys\nguaranteed to be unique without having to keep track of which keys are\nin use.\n\n`lu.container.CircularBuffer.front()` was changed to return `ref auto`,\nallowing for reference access to the element. This is technically a\nbreaking ABI change, but it is unlikely to affect any code in the wild.\n\n* Added `lu.conv.enumToString`, a simple wrapper around `lu.conv.Enum`\n that infers the type of the enum argument instead of requiring it to\n be explicitly passed\n* Removed `lu.semver` deprecated enum member aliases\n* `lu.string.splitInto` now accepts being passed no string symbols,\n placing all split tokens in the overflow array instead","shortMessageHtmlLink":"v2.1.0"}},{"before":"0db187e7aef746c7abd079110172508598d9b672","after":"b8131953f3240de7c923fb518b5efd4e45646e4b","ref":"refs/heads/gh-pages","pushedAt":"2024-01-04T13:38:12.000Z","pushType":"force_push","commitsCount":0,"pusher":{"login":"github-actions[bot]","name":null,"path":"/apps/github-actions","primaryAvatarUrl":"https://avatars.githubusercontent.com/in/15368?s=80&v=4"},"commit":{"message":"Deploy to GitHub pages","shortMessageHtmlLink":"Deploy to GitHub pages"}},{"before":"460235fbf35c89a5dc87248172641489cac87986","after":"e4c8d1ae47b13cbd1fac7f5e1e124c1feef0855a","ref":"refs/heads/master","pushedAt":"2024-01-04T13:37:42.000Z","pushType":"push","commitsCount":1,"pusher":{"login":"zorael","name":"JR","path":"/zorael","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/1975169?s=80&v=4"},"commit":{"message":"GitHub: update d.yml\n\n* Test ldc 1.18 on Mac too\n* Update to `actions/checkout@v3`\n* Set `continue-on-error: false`","shortMessageHtmlLink":"GitHub: update d.yml"}},{"before":"8a8794042eda45fdb78f94f85de466dc00dbb093","after":"0db187e7aef746c7abd079110172508598d9b672","ref":"refs/heads/gh-pages","pushedAt":"2024-01-04T13:20:31.000Z","pushType":"force_push","commitsCount":0,"pusher":{"login":"github-actions[bot]","name":null,"path":"/apps/github-actions","primaryAvatarUrl":"https://avatars.githubusercontent.com/in/15368?s=80&v=4"},"commit":{"message":"Deploy to GitHub pages","shortMessageHtmlLink":"Deploy to GitHub pages"}},{"before":"836c7d3e0000c5fdece566ee5f45c0d1fb1776ce","after":"460235fbf35c89a5dc87248172641489cac87986","ref":"refs/heads/master","pushedAt":"2024-01-04T13:20:00.000Z","pushType":"push","commitsCount":1,"pusher":{"login":"zorael","name":"JR","path":"/zorael","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/1975169?s=80&v=4"},"commit":{"message":"Container `const inout` methods","shortMessageHtmlLink":"Container const inout methods"}},{"before":"7364f562aa63bcee84b15a9cc50b157f4ee52234","after":"8a8794042eda45fdb78f94f85de466dc00dbb093","ref":"refs/heads/gh-pages","pushedAt":"2024-01-04T13:04:48.000Z","pushType":"force_push","commitsCount":0,"pusher":{"login":"github-actions[bot]","name":null,"path":"/apps/github-actions","primaryAvatarUrl":"https://avatars.githubusercontent.com/in/15368?s=80&v=4"},"commit":{"message":"Deploy to GitHub pages","shortMessageHtmlLink":"Deploy to GitHub pages"}},{"before":"049d442e2f1dd4035e2fc964dffa657a9b7389e7","after":"836c7d3e0000c5fdece566ee5f45c0d1fb1776ce","ref":"refs/heads/master","pushedAt":"2024-01-04T13:04:19.000Z","pushType":"push","commitsCount":1,"pusher":{"login":"zorael","name":"JR","path":"/zorael","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/1975169?s=80&v=4"},"commit":{"message":"Fix MutexedAA.uniqueKey not compiling\n\nApparently `cast(AA)aa` is not an lvalue, which lu.array.uniqueKey\nrequires for the parameter to be ref, and we have to dance around it\nby passing `*(cast(AA*)&aa)` instead.\n\nAdd tests to make sure it stays working.","shortMessageHtmlLink":"Fix MutexedAA.uniqueKey not compiling"}},{"before":"91b84fd1e7c1877fc9f536bd8e051eb4c2da6506","after":"7364f562aa63bcee84b15a9cc50b157f4ee52234","ref":"refs/heads/gh-pages","pushedAt":"2024-01-03T22:46:33.000Z","pushType":"force_push","commitsCount":0,"pusher":{"login":"github-actions[bot]","name":null,"path":"/apps/github-actions","primaryAvatarUrl":"https://avatars.githubusercontent.com/in/15368?s=80&v=4"},"commit":{"message":"Deploy to GitHub pages","shortMessageHtmlLink":"Deploy to GitHub pages"}},{"before":"305b93fff5c843be074ac6cfbcb6123462d43796","after":"049d442e2f1dd4035e2fc964dffa657a9b7389e7","ref":"refs/heads/master","pushedAt":"2024-01-03T22:46:03.000Z","pushType":"push","commitsCount":1,"pusher":{"login":"zorael","name":"JR","path":"/zorael","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/1975169?s=80&v=4"},"commit":{"message":"github: Raise minimum ldc version to 1.18.0","shortMessageHtmlLink":"github: Raise minimum ldc version to 1.18.0"}},{"before":"da2dec2dcc6fe7608fb998ed0485980f96ea29b8","after":"91b84fd1e7c1877fc9f536bd8e051eb4c2da6506","ref":"refs/heads/gh-pages","pushedAt":"2024-01-03T22:43:48.000Z","pushType":"force_push","commitsCount":0,"pusher":{"login":"github-actions[bot]","name":null,"path":"/apps/github-actions","primaryAvatarUrl":"https://avatars.githubusercontent.com/in/15368?s=80&v=4"},"commit":{"message":"Deploy to GitHub pages","shortMessageHtmlLink":"Deploy to GitHub pages"}},{"before":"b4128a94ac7890df7aba775df12d407bdfa864ae","after":"305b93fff5c843be074ac6cfbcb6123462d43796","ref":"refs/heads/master","pushedAt":"2024-01-03T22:43:19.000Z","pushType":"push","commitsCount":13,"pusher":{"login":"zorael","name":"JR","path":"/zorael","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/1975169?s=80&v=4"},"commit":{"message":"Update README.md\n\n* Add CircularBuffer, RehashingAA and MutexedAA examples\n* Wording","shortMessageHtmlLink":"Update README.md"}},{"before":"d3ce187e43ddf3384039568faf3d4bb59b9f4c50","after":"da2dec2dcc6fe7608fb998ed0485980f96ea29b8","ref":"refs/heads/gh-pages","pushedAt":"2023-08-17T18:13:09.000Z","pushType":"force_push","commitsCount":0,"pusher":{"login":"github-actions[bot]","name":null,"path":"/apps/github-actions","primaryAvatarUrl":"https://avatars.githubusercontent.com/in/15368?s=80&v=4"},"commit":{"message":"Deploy to GitHub pages","shortMessageHtmlLink":"Deploy to GitHub pages"}},{"before":"996f4dc09f9b7b42fbf9fd0a2eb6d8c3bd0856ae","after":"b4128a94ac7890df7aba775df12d407bdfa864ae","ref":"refs/heads/master","pushedAt":"2023-08-17T18:12:29.000Z","pushType":"push","commitsCount":1,"pusher":{"login":"zorael","name":"JR","path":"/zorael","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/1975169?s=80&v=4"},"commit":{"message":"v2.0.0\n\nThis release includes some breaking changes and bumps the major version,\ntrue to semver.\n\n* `lu.string.contains` was removed and is now a deprecated compatibility\n alias to Phobos' `std.algorithm.searching.canFind`. It performed the\n same function, but was worse at it. This is a breaking change in that\n the Phobos' equivalent is not `@nogc nothrow`. It may be removed in a\n future release.\n* `lu.string.beginsWith` was removed and is now a deprecated\n compatibility alias to Phobos' `std.algorithm.searching.startsWith`.\n As with `contains`, it was just worse at what it did. It may be removed\n in a future release.\n* `lu.strings.nom` was renamed to `.advancePast`, but the old name is\n still available as a non-deprecated compatibility alias. It may become\n deprecated and ultimately be removed in a future release.\n* `lu.strings.nom!(Flag!\"inherit\")` was also renamed to `advancePast`,\n and in addition to this the `inherit` flag is now a runtime parameter.\n The template-parameter overload remains, however it is deprecated and\n may be removed in a future release.\n* `lu.strings.beginsWithOneOf` is now deprecated, and reverse use of\n `std.algorithm.searching.canFind` or `std.string.indexOf` is suggested.\n It may be removed in a future release.\n\nLastly, this library now successfully compiles with `-dip1000`.","shortMessageHtmlLink":"v2.0.0"}},{"before":"ed003a338ea0c2c5c6d65848d23561f45bfd9d7d","after":"d3ce187e43ddf3384039568faf3d4bb59b9f4c50","ref":"refs/heads/gh-pages","pushedAt":"2023-08-16T22:13:10.000Z","pushType":"force_push","commitsCount":0,"pusher":{"login":"github-actions[bot]","name":null,"path":"/apps/github-actions","primaryAvatarUrl":"https://avatars.githubusercontent.com/in/15368?s=80&v=4"},"commit":{"message":"Deploy to GitHub pages","shortMessageHtmlLink":"Deploy to GitHub pages"}},{"before":"6ecbbed0dc91c83247bdb7a92abfef8d0d45d52e","after":"996f4dc09f9b7b42fbf9fd0a2eb6d8c3bd0856ae","ref":"refs/heads/master","pushedAt":"2023-08-16T22:12:33.000Z","pushType":"push","commitsCount":1,"pusher":{"login":"zorael","name":"JR","path":"/zorael","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/1975169?s=80&v=4"},"commit":{"message":"Update README.md\n\nEscape \"\\\\o/\" in the string.d section.","shortMessageHtmlLink":"Update README.md"}},{"before":"66ce09a0a2f68b8981b3ccd5e8c15e5f25b178c7","after":"ed003a338ea0c2c5c6d65848d23561f45bfd9d7d","ref":"refs/heads/gh-pages","pushedAt":"2023-08-16T18:28:58.000Z","pushType":"force_push","commitsCount":0,"pusher":{"login":"github-actions[bot]","name":null,"path":"/apps/github-actions","primaryAvatarUrl":"https://avatars.githubusercontent.com/in/15368?s=80&v=4"},"commit":{"message":"Deploy to GitHub pages","shortMessageHtmlLink":"Deploy to GitHub pages"}},{"before":"ee74c57f65b25b63e424cca223f6ea4a995a45c8","after":"6ecbbed0dc91c83247bdb7a92abfef8d0d45d52e","ref":"refs/heads/master","pushedAt":"2023-08-16T18:28:23.000Z","pushType":"push","commitsCount":2,"pusher":{"login":"zorael","name":"JR","path":"/zorael","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/1975169?s=80&v=4"},"commit":{"message":"Update README.md\n\nUpdate string.d section to reflect recent refactoring.","shortMessageHtmlLink":"Update README.md"}},{"before":"2651a7ca3466f8d14b150411879958e3b6c4e2d2","after":"66ce09a0a2f68b8981b3ccd5e8c15e5f25b178c7","ref":"refs/heads/gh-pages","pushedAt":"2023-08-16T18:20:58.000Z","pushType":"force_push","commitsCount":0,"pusher":{"login":"github-actions[bot]","name":null,"path":"/apps/github-actions","primaryAvatarUrl":"https://avatars.githubusercontent.com/in/15368?s=80&v=4"},"commit":{"message":"Deploy to GitHub pages","shortMessageHtmlLink":"Deploy to GitHub pages"}},{"before":"af6e5224e2a29bcf706def2d34e8aea35af48afd","after":"ee74c57f65b25b63e424cca223f6ea4a995a45c8","ref":"refs/heads/master","pushedAt":"2023-08-16T18:20:07.000Z","pushType":"push","commitsCount":2,"pusher":{"login":"zorael","name":"JR","path":"/zorael","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/1975169?s=80&v=4"},"commit":{"message":"Update dub.sdl\n\nEnable the -dip1000 compilation flag for scoped pointers.","shortMessageHtmlLink":"Update dub.sdl"}},{"before":"edf2f9678a04ae4629943e96f4e70176535b8bff","after":"2651a7ca3466f8d14b150411879958e3b6c4e2d2","ref":"refs/heads/gh-pages","pushedAt":"2023-08-04T14:44:44.000Z","pushType":"force_push","commitsCount":0,"pusher":{"login":"github-actions[bot]","name":null,"path":"/apps/github-actions","primaryAvatarUrl":"https://avatars.githubusercontent.com/in/15368?s=80&v=4"},"commit":{"message":"Deploy to GitHub pages","shortMessageHtmlLink":"Deploy to GitHub pages"}},{"before":"c7dd82e253fa9babaad1d9ee9d90974a701c6864","after":"af6e5224e2a29bcf706def2d34e8aea35af48afd","ref":"refs/heads/master","pushedAt":"2023-08-04T14:44:09.000Z","pushType":"push","commitsCount":2,"pusher":{"login":"zorael","name":"JR","path":"/zorael","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/1975169?s=80&v=4"},"commit":{"message":"Add support for associative arrays to UnderscoreOpDispatcher\n\nIt will meld the passed AA into the underscored one.","shortMessageHtmlLink":"Add support for associative arrays to UnderscoreOpDispatcher"}},{"before":"fd059d7594458862a4d1ffa579a5bf3df2d94b79","after":"edf2f9678a04ae4629943e96f4e70176535b8bff","ref":"refs/heads/gh-pages","pushedAt":"2023-08-04T14:32:57.000Z","pushType":"force_push","commitsCount":0,"pusher":{"login":"github-actions[bot]","name":null,"path":"/apps/github-actions","primaryAvatarUrl":"https://avatars.githubusercontent.com/in/15368?s=80&v=4"},"commit":{"message":"Deploy to GitHub pages","shortMessageHtmlLink":"Deploy to GitHub pages"}},{"before":"bed990dd091046a180a51236fbffdb81e004c1da","after":"c7dd82e253fa9babaad1d9ee9d90974a701c6864","ref":"refs/heads/master","pushedAt":"2023-08-04T14:32:19.000Z","pushType":"push","commitsCount":2,"pusher":{"login":"zorael","name":"JR","path":"/zorael","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/1975169?s=80&v=4"},"commit":{"message":"Update README.md\n\n* Describe UnderscoreOpDispatcher more\n* Whitespace\n* Spelling","shortMessageHtmlLink":"Update README.md"}},{"before":"e1a0d20db93f7cb22568ff01c5b2fc85dce81daa","after":"fd059d7594458862a4d1ffa579a5bf3df2d94b79","ref":"refs/heads/gh-pages","pushedAt":"2023-08-04T14:21:00.000Z","pushType":"force_push","commitsCount":0,"pusher":{"login":"github-actions[bot]","name":null,"path":"/apps/github-actions","primaryAvatarUrl":"https://avatars.githubusercontent.com/in/15368?s=80&v=4"},"commit":{"message":"Deploy to GitHub pages","shortMessageHtmlLink":"Deploy to GitHub pages"}},{"before":"18c709a075c1a35afac06ade660aa40463107f1c","after":"bed990dd091046a180a51236fbffdb81e004c1da","ref":"refs/heads/master","pushedAt":"2023-08-04T14:20:19.000Z","pushType":"push","commitsCount":2,"pusher":{"login":"zorael","name":"JR","path":"/zorael","primaryAvatarUrl":"https://avatars.githubusercontent.com/u/1975169?s=80&v=4"},"commit":{"message":"LuSemVer {major,minor,patch}Version -> {major,minor,patch}\n\nThe previous member names are still defined as aliases to the new ones,\nbut will be deprecated in a future release.","shortMessageHtmlLink":"LuSemVer {major,minor,patch}Version -> {major,minor,patch}"}}],"hasNextPage":true,"hasPreviousPage":false,"activityType":"all","actor":null,"timePeriod":"all","sort":"DESC","perPage":30,"cursor":"djE6ks8AAAAD6plTxwA","startCursor":null,"endCursor":null}},"title":"Activity ยท zorael/lu"}