* refactor(formattedRead): add not is type validation to template argument 'fmt'
Signed-off-by: João Lourenço <jlourenco5691@gmail.com>
* feat(formattedRead): add overloads to return a tuple with the read values
Signed-off-by: João Lourenço <jlourenco5691@gmail.com>
* test(formattedRead): add unnittests for the tuple return type overloads
Signed-off-by: João Lourenço <jlourenco5691@gmail.com>
* chore(changelog): add a changelog formattedRead entry
Signed-off-by: João Lourenço <jlourenco5691@gmail.com>
---------
Signed-off-by: João Lourenço <jlourenco5691@gmail.com>
In many cases, even when using Unqualified makes sense (as opposed to
Unconst or Unshared), using is(immutable T == immutable U) works just as
well and avoids instantiating any additional templates. This seems to
becoming more known in the D community over time, but it seems
appropriate to mention it in Unqualified's documentation so that more
people will be made aware.
Also, I changed it so that Unqualified is always a wrapper template
instead of directly being an alias of Unqual in core.internal.traits.
This is because the names don't match, and the alias will show up in any
error messages. Long term, we would ideally rename the symbol in
core.internal (potentially turning the std.traits versions into a
wrapper templates instead of an alias). However, since the functionality
is effectively the same, and the std.traits one is the one currently
being used by code in general, it seems better to let the std.traits one
be the alias for now. The same applies to a few traits which are
implemented in core.internal.traits and imported in std.traits or
phobos.sys.traits.
These are the Phobos v3 equivalents of std.traits' hasElaborateAssign,
hasElaborateCopyConstructor, and hasElaborateDestructor. After some
discussion with Adam Wilson, I went with "Complex" rather than
"Elaborate" with the idea that it would be easier to understand for
non-native English speakers. It's also shorter, which is a plus. I also
tried to make the names more consistent (and avoided having
"CopyConstructor" in the name, because it also deals with the postblit
constructor).
For the moment, I have not created hasComplexMoving to check for move
constructors, since that situation has yet to be finalized in the
language. I was surprised to find out that hasElaborateMove was even a
thing, since it was my understanding that opPostMove had never actually
been implemented, so I don't know if we're going to have to worry about
that at all, but either way, it seemed best to leave the question of a
trait for moving until later given that that situation is still in limbo
(even if it does look like the new compiler implementation is well
along).
This makes it so that enums whose base type is an aggregate type are
also considered an aggregate type. It probably doesn't affect much code,
since isAggregateType isn't needed often, and it's fairly rare to
declare enums whose base type is an aggregate type, but in general, code
that cares whether a type is an aggregate type is going to care that an
enum's base type is an aggregate type.
The std.traits version does not take enums into account (and prior to
this commit, neither does the phobos.sys version), but upon reflection,
it seems like it's just likely to cause bugs if it doesn't take enums
into account. Granted, enums whose base type is an aggregate type don't
seem to be very common, but as a result of that, code that tests for
aggregate types likely won't take them into account in the vast majority
of cases, and I see no reason to not have the trait just deal with it
rather than hoping that the user of the trait realizes that it's a
potential issue, in which case, they would need to explicitly use
OriginalType themselves to make it work for enums.
In addition, this way, OriginalType doesn't even get instantiated unless
the type is actually an enum, whereas the correct solution that would
most likely be used otherwise would be to just always do
isAggregateType!(OriginalType!T) instead of isAggregateType!T.
I also put a ddoc comment on the unittest block, since I apparently
missed it previously.
Merge stable
Signed-off-by: Nicholas Wilson <thewilsonator@users.noreply.github.com>
Merged-on-behalf-of: Nicholas Wilson <thewilsonator@users.noreply.github.com>
The issue also mentions the Druntime bindings, which have been added a few years ago,
however this was missing from std.socket. This implementation provides SO_REUSEPORT on
Windows as well, despite it being equivalent to SO_REUSEADDR, to simplify client code.
Co-authored-by: Elias Batek <desisma@heidel.beer>
Squashed commit of the following:
commit af66b61a4ca4195c6b3a9de2a2eaaaa3786972c5
Author: Elias Batek
Date: Sun Nov 3 09:37:51 2024 +0100
Further cleanup
commit cb122cd54b14d253b29f99927b9f02cc4017dd05
Author: Elias Batek
Date: Sun Nov 3 09:31:42 2024 +0100
Add bloat because of questionable Circle CI failure
commit 1ad9e889bbe58ee9f0b5476f26b48aa7e51488d7
Author: Elias Batek
Date: Sun Nov 3 09:24:37 2024 +0100
Add cycle test
commit 913cfc771d694e785cae07157bccdf933fc8b969
Author: Elias Batek
Date: Sun Nov 3 09:13:47 2024 +0100
Split long lines
commit 4c062ccc07de668e75300ce3d20420b7dba51f15
Author: Elias Batek
Date: Sun Nov 3 09:11:38 2024 +0100
Do not leak implementation details in unittest
commit 66e64deecb2c3f9e4624204038ae0495a5d6f28a
Author: Elias Batek
Date: Sun Nov 3 09:09:17 2024 +0100
Improve unittests
commit 1b95777add501bd9ec21fcecf50be5de6fc182fb
Author: Elias Batek
Date: Sun Nov 3 09:00:16 2024 +0100
Fix style
commit b1e4c61440a11e4bc7481920a7ccf75065a5b5e9
Author: Elias Batek
Date: Sun Nov 3 08:56:02 2024 +0100
Improve unittests
commit c5aed51db374d6c4199f0ce9be1305d1b787248e
Author: Elias Batek
Date: Sun Nov 3 08:31:57 2024 +0100
Fix decoder regression
commit 89f4d9bf81bd4709b11e58f4caae782b5a63ff73
Author: Elias Batek
Date: Sun Nov 3 08:21:52 2024 +0100
Rename
commit c3a8c5263272770272e77fec30af3d2d833c41da
Author: Elias Batek
Date: Sun Nov 3 08:11:03 2024 +0100
Oops
commit aff5b0d8a38c33c94308618cf5aa7819a9427070
Author: Elias Batek
Date: Sun Nov 3 08:03:32 2024 +0100
Fix typo and wstring/dstring bug
commit dbe75e9a35b4d963ae7fc54dc69060ce0a59065a
Author: Elias Batek
Date: Sun Nov 3 08:03:23 2024 +0100
Improve docs
commit 9ff3ac3e43346e266e4fef51bd9d8e86f80dd48d
Author: Elias Batek
Date: Sun Nov 3 07:50:35 2024 +0100
Fix return type typo
commit 4b68416030f3c7782716964c276c9c99d1b08932
Author: Elias Batek
Date: Sun Nov 3 07:49:48 2024 +0100
Add validation
commit 3d2224478f4c20f252a409c37d755be05eb6f049
Author: Elias Batek
Date: Sun Nov 3 07:34:21 2024 +0100
Remove no longer necessary cast
commit a8ac073a6437dc3c7f079a9a9aa199dd6bd4e57d
Author: Elias Batek
Date: Sun Nov 3 07:30:41 2024 +0100
Improve docs
commit 4efb47b9b92ece256485c2d4d34c2a82133a2da3
Author: Elias Batek
Date: Sun Nov 3 07:27:54 2024 +0100
Cleanup API
commit d1a3fd0b466480d4f1ddddbd9f4437088a667a4b
Author: Elias Batek
Date: Sun Nov 3 07:15:42 2024 +0100
Add constraints
commit 5fb9097c548e5be25dcc45cfdbb7f29010143955
Author: Elias Batek
Date: Sun Nov 3 07:05:17 2024 +0100
Improve docs
commit 100aa5f996b088d7962891f3fd60a6e23d6c887b
Author: Elias Batek
Date: Sun Nov 3 06:46:32 2024 +0100
Refactor
commit 13551c1de0e54c19ec72bc0294f6956a7c787790
Author: Elias Batek
Date: Sun Nov 3 06:37:33 2024 +0100
Fix out-of-bounds bug
commit cca538ffef43894b607847473e56ab3af476660c
Author: Elias Batek
Date: Sun Nov 3 06:32:52 2024 +0100
Fix accidental conversion of faulty hex digits
commit c4a367ddbe334928d6c2ec7953ecab6bdbb6080f
Author: Elias Batek
Date: Sun Nov 3 06:19:19 2024 +0100
Refactor
commit 538ea2380c54e0eea08dc422766ebc3bad0bbb29
Author: Elias Batek
Date: Sun Nov 3 06:15:21 2024 +0100
Add changelog
commit cb1b131743a3b1f377f8740e5721eef1eda70d2d
Author: Elias Batek
Date: Sun Nov 3 05:17:55 2024 +0100
Add fromHexString
Squashed commit of the following:
commit bc159e9b44c89e68b66dfb3c54bd781229dffa46
Author: Tynuk <bowsworddv@gmail.com>
Date: Sat Jan 27 12:14:52 2024 +0200
update style
commit 1fc719532fb83b764c95701973a5fddc98520a15
Author: Tynuk <bowsworddv@gmail.com>
Date: Sat Jan 27 11:52:19 2024 +0200
create ByteRange
commit 27ea722f04d9b0120aff2a405935530dd0174950
Author: Tynuk <43266276+Tynukua@users.noreply.github.com>
Date: Thu Aug 25 16:19:45 2022 +0300
rm spaces
commit 1fdf63ab4baafc1c4d6d9e957767fe64716365ef
Author: Tynuk <43266276+Tynukua@users.noreply.github.com>
Date: Thu Aug 25 15:55:40 2022 +0300
Rename
commit 4b37b8d40d1c251b35e3c14ec64e3b15a388e158
Author: Tynuk <43266276+Tynukua@users.noreply.github.com>
Date: Thu Aug 25 15:26:10 2022 +0300
Update std/digest/package.d
commit 712eb2504371c63bee582fb53b5d2bbae9e6f525
Author: Tynuk <43266276+Tynukua@users.noreply.github.com>
Date: Thu Aug 25 15:25:51 2022 +0300
Update std/digest/package.d
commit 4826317a5d9d1da7ef8cd4b6df87237d8d254bff
Author: Tynuk <43266276+Tynukua@users.noreply.github.com>
Date: Thu Aug 25 15:25:43 2022 +0300
Update std/digest/package.d
commit aedb66bd1ab8bdd1f5acc54f5f63f2c9d2b33b05
Author: tynuk <bowsworddv@gmail.com>
Date: Mon Aug 8 15:15:42 2022 +0300
add toDigest / hexToBytes
Co-authored-by: Elias Batek <desisma@heidel.beer>
[stable] Cherry-pick 2 master fixes
Signed-off-by: Jonathan M Davis <jmdavis@users.noreply.github.com>
Merged-on-behalf-of: Martin Kinkelin <kinke@users.noreply.github.com>
Uses a regular initialized temporary array when sorting elements with an elaborate assignment to avoid undefined behavior when destructors, postblits or copy constructors are invoked during the array assignment.
* Simplify endian conversion functions in std.bitmanip.
They're overly complex (e.g. testing for the native endianness of the
machine when that's actually completely unnecessary), and they use
unions in a manner that is undefined behavior in C/C++ (since they write
to one field and then read from another). I don't see any mention of
whether that behavior is defined in D in D's spec, but it's probably
undefined in D given that it's undefined in C/C++. Either way, it's an
overly complex solution.
This solution gets rid of all of the endian version checks in
std.bitmanip, and it allows the implementations of the endian conversion
functions to be the same between CTFE and runtime.
* Add additional tests for nativeToLittleEndian.
Rebindable2 did not handle types with opAssign correctly, which affected
both minElement and maxElement. Namely, Rebindable2 assigned to memory
which was not properly initialized when the correct solution in such a
situation is to use copyEmplace. Assignment works when assignment is
just a memcpy, but in the general case, opAssign needs to have a
properly initialized object in order to work correctly. copyEmplace
instead copies the object and then places the copy into the unitialized
memory, so it avoids assigning to uninitialized memory.
This commit also adds additional tests for types with destructors (which
do get opAssign automatically) and types with postblit constructors or
copy constructors to try to ensure that the code is doing the correct
thing in those cases with regards to copying, assignment, and
destruction.
https://issues.dlang.org/show_bug.cgi?id=24829 was found in the process,
and this does not fix that. Namely, types which cannot be assigned to
and which also have a postblit constructor or copy constructor do not
get copied correctly. So, among the tests added here are commented out
tests for that case, since they're an altered version of some of the
enabled tests. However, fixing that issue would be involved enough that
I'm not attempting to fix it at this time.