aboutsummaryrefslogtreecommitdiff
path: root/gcc/d/dmd/root/array.d
diff options
context:
space:
mode:
authorIain Buclaw <ibuclaw@gdcproject.org>2023-07-10 17:16:17 +0200
committerIain Buclaw <ibuclaw@gdcproject.org>2023-07-10 23:31:29 +0200
commite9251fea2debebfebe1f762a4a8d5b3b1d4c75ef (patch)
tree09b47f4d760019131aa27d19bfb8e5ee0f1ed31f /gcc/d/dmd/root/array.d
parent2d7c95e31431a297060c94697af84f498abf97a2 (diff)
downloadgcc-e9251fea2debebfebe1f762a4a8d5b3b1d4c75ef.zip
gcc-e9251fea2debebfebe1f762a4a8d5b3b1d4c75ef.tar.gz
gcc-e9251fea2debebfebe1f762a4a8d5b3b1d4c75ef.tar.bz2
d: Merge upstream dmd, druntime a88e1335f7, phobos 1921d29df.
D front-end changes: - Import dmd v2.104.1. - Deprecation phase ended for access to private method when overloaded with public method. D runtime changes: - Import druntime v2.104.1. - Linux input header translations were added to druntime. - Integration with the Valgrind `memcheck' tool has been added to the garbage collector. Phobos changes: - Import phobos v2.104.1. gcc/d/ChangeLog: * dmd/MERGE: Merge upstream dmd a88e1335f7. * dmd/VERSION: Bump version to v2.104.1. libphobos/ChangeLog: * libdruntime/MERGE: Merge upstream druntime a88e1335f7. * src/MERGE: Merge upstream phobos 1921d29df. * config.h.in: Regenerate. * configure: Regenerate. * configure.ac (libphobos-checking): Add valgrind flag. (DRUNTIME_LIBRARIES_VALGRIND): Call. * libdruntime/Makefile.am (DRUNTIME_CSOURCES): Add etc/valgrind/valgrind_.c. (DRUNTIME_DSOURCES): Add etc/valgrind/valgrind.d. (DRUNTIME_DSOURCES_LINUX): Add core/sys/linux/input.d, core/sys/linux/input_event_codes.d, core/sys/linux/uinput.d. * libdruntime/Makefile.in: Regenerate. * m4/druntime/libraries.m4 (DRUNTIME_LIBRARIES_VALGRIND): Define.
Diffstat (limited to 'gcc/d/dmd/root/array.d')
-rw-r--r--gcc/d/dmd/root/array.d18
1 files changed, 18 insertions, 0 deletions
diff --git a/gcc/d/dmd/root/array.d b/gcc/d/dmd/root/array.d
index d1c61be..f36ddb4 100644
--- a/gcc/d/dmd/root/array.d
+++ b/gcc/d/dmd/root/array.d
@@ -251,6 +251,18 @@ public:
length++;
}
+ /// Insert 'count' copies of 'value' at 'index' position
+ void insert(size_t index, size_t count, T value) pure nothrow
+ {
+ if (count == 0)
+ return;
+ reserve(count);
+ if (length != index)
+ memmove(data.ptr + index + count, data.ptr + index, (length - index) * T.sizeof);
+ data[index .. index + count] = value;
+ length += count;
+ }
+
void setDim(size_t newdim) pure nothrow
{
if (length < newdim)
@@ -458,6 +470,12 @@ unittest
arrayA.insert(0, [7, 8]);
arrayA.insert(arrayA.length, [0, 9]);
assert(arrayA[] == [7, 8, 5, 1, 2, 6, 0, 9]);
+ arrayA.insert(4, 3, 8);
+ assert(arrayA[] == [7, 8, 5, 1, 8, 8, 8, 2, 6, 0, 9]);
+ arrayA.insert(0, 3, 8);
+ assert(arrayA[] == [8, 8, 8, 7, 8, 5, 1, 8, 8, 8, 2, 6, 0, 9]);
+ arrayA.insert(arrayA.length, 3, 8);
+ assert(arrayA[] == [8, 8, 8, 7, 8, 5, 1, 8, 8, 8, 2, 6, 0, 9, 8, 8, 8]);
}
/**