@@ -83,6 +83,11 @@ library TypeCaster {
83
83
array_[0 ] = from_;
84
84
}
85
85
86
+ function asSingletonArray (bool from_ ) internal pure returns (bool [] memory array_ ) {
87
+ array_ = new bool [](1 );
88
+ array_[0 ] = from_;
89
+ }
90
+
86
91
function asSingletonArray (string memory from_ ) internal pure returns (string [] memory array_ ) {
87
92
array_ = new string [](1 );
88
93
array_[0 ] = from_;
@@ -92,4 +97,355 @@ library TypeCaster {
92
97
array_ = new bytes32 [](1 );
93
98
array_[0 ] = from_;
94
99
}
100
+
101
+ /**
102
+ * @notice The function to convert static array to dynamic
103
+ * @param static_ the static array to convert
104
+ * @return dynamic_ the converted dynamic array
105
+ */
106
+ function asDynamic (
107
+ uint256 [1 ] memory static_
108
+ ) internal pure returns (uint256 [] memory dynamic_ ) {
109
+ return asSingletonArray (static_[0 ]);
110
+ }
111
+
112
+ function asDynamic (
113
+ uint256 [2 ] memory static_
114
+ ) internal pure returns (uint256 [] memory dynamic_ ) {
115
+ dynamic_ = new uint256 [](2 );
116
+
117
+ uint256 pointerS_;
118
+ uint256 pointerD_;
119
+
120
+ assembly {
121
+ pointerS_ := static_
122
+ pointerD_ := dynamic_
123
+ }
124
+
125
+ _copy (pointerS_, pointerD_, 2 );
126
+ }
127
+
128
+ function asDynamic (
129
+ uint256 [3 ] memory static_
130
+ ) internal pure returns (uint256 [] memory dynamic_ ) {
131
+ dynamic_ = new uint256 [](3 );
132
+
133
+ uint256 pointerS_;
134
+ uint256 pointerD_;
135
+
136
+ assembly {
137
+ pointerS_ := static_
138
+ pointerD_ := dynamic_
139
+ }
140
+
141
+ _copy (pointerS_, pointerD_, 3 );
142
+ }
143
+
144
+ function asDynamic (
145
+ uint256 [4 ] memory static_
146
+ ) internal pure returns (uint256 [] memory dynamic_ ) {
147
+ dynamic_ = new uint256 [](4 );
148
+
149
+ uint256 pointerS_;
150
+ uint256 pointerD_;
151
+
152
+ assembly {
153
+ pointerS_ := static_
154
+ pointerD_ := dynamic_
155
+ }
156
+
157
+ _copy (pointerS_, pointerD_, 4 );
158
+ }
159
+
160
+ function asDynamic (
161
+ uint256 [5 ] memory static_
162
+ ) internal pure returns (uint256 [] memory dynamic_ ) {
163
+ dynamic_ = new uint256 [](5 );
164
+
165
+ uint256 pointerS_;
166
+ uint256 pointerD_;
167
+
168
+ assembly {
169
+ pointerS_ := static_
170
+ pointerD_ := dynamic_
171
+ }
172
+
173
+ _copy (pointerS_, pointerD_, 5 );
174
+ }
175
+
176
+ function asDynamic (
177
+ address [1 ] memory static_
178
+ ) internal pure returns (address [] memory dynamic_ ) {
179
+ return asSingletonArray (static_[0 ]);
180
+ }
181
+
182
+ function asDynamic (
183
+ address [2 ] memory static_
184
+ ) internal pure returns (address [] memory dynamic_ ) {
185
+ dynamic_ = new address [](2 );
186
+
187
+ uint256 pointerS_;
188
+ uint256 pointerD_;
189
+
190
+ assembly {
191
+ pointerS_ := static_
192
+ pointerD_ := dynamic_
193
+ }
194
+
195
+ _copy (pointerS_, pointerD_, 2 );
196
+ }
197
+
198
+ function asDynamic (
199
+ address [3 ] memory static_
200
+ ) internal pure returns (address [] memory dynamic_ ) {
201
+ dynamic_ = new address [](3 );
202
+
203
+ uint256 pointerS_;
204
+ uint256 pointerD_;
205
+
206
+ assembly {
207
+ pointerS_ := static_
208
+ pointerD_ := dynamic_
209
+ }
210
+
211
+ _copy (pointerS_, pointerD_, 3 );
212
+ }
213
+
214
+ function asDynamic (
215
+ address [4 ] memory static_
216
+ ) internal pure returns (address [] memory dynamic_ ) {
217
+ dynamic_ = new address [](4 );
218
+
219
+ uint256 pointerS_;
220
+ uint256 pointerD_;
221
+
222
+ assembly {
223
+ pointerS_ := static_
224
+ pointerD_ := dynamic_
225
+ }
226
+
227
+ _copy (pointerS_, pointerD_, 4 );
228
+ }
229
+
230
+ function asDynamic (
231
+ address [5 ] memory static_
232
+ ) internal pure returns (address [] memory dynamic_ ) {
233
+ dynamic_ = new address [](5 );
234
+
235
+ uint256 pointerS_;
236
+ uint256 pointerD_;
237
+
238
+ assembly {
239
+ pointerS_ := static_
240
+ pointerD_ := dynamic_
241
+ }
242
+
243
+ _copy (pointerS_, pointerD_, 5 );
244
+ }
245
+
246
+ function asDynamic (bool [1 ] memory static_ ) internal pure returns (bool [] memory dynamic_ ) {
247
+ return asSingletonArray (static_[0 ]);
248
+ }
249
+
250
+ function asDynamic (bool [2 ] memory static_ ) internal pure returns (bool [] memory dynamic_ ) {
251
+ dynamic_ = new bool [](2 );
252
+
253
+ uint256 pointerS_;
254
+ uint256 pointerD_;
255
+
256
+ assembly {
257
+ pointerS_ := static_
258
+ pointerD_ := dynamic_
259
+ }
260
+
261
+ _copy (pointerS_, pointerD_, 2 );
262
+ }
263
+
264
+ function asDynamic (bool [3 ] memory static_ ) internal pure returns (bool [] memory dynamic_ ) {
265
+ dynamic_ = new bool [](3 );
266
+
267
+ uint256 pointerS_;
268
+ uint256 pointerD_;
269
+
270
+ assembly {
271
+ pointerS_ := static_
272
+ pointerD_ := dynamic_
273
+ }
274
+
275
+ _copy (pointerS_, pointerD_, 3 );
276
+ }
277
+
278
+ function asDynamic (bool [4 ] memory static_ ) internal pure returns (bool [] memory dynamic_ ) {
279
+ dynamic_ = new bool [](4 );
280
+
281
+ uint256 pointerS_;
282
+ uint256 pointerD_;
283
+
284
+ assembly {
285
+ pointerS_ := static_
286
+ pointerD_ := dynamic_
287
+ }
288
+
289
+ _copy (pointerS_, pointerD_, 4 );
290
+ }
291
+
292
+ function asDynamic (bool [5 ] memory static_ ) internal pure returns (bool [] memory dynamic_ ) {
293
+ dynamic_ = new bool [](5 );
294
+
295
+ uint256 pointerS_;
296
+ uint256 pointerD_;
297
+
298
+ assembly {
299
+ pointerS_ := static_
300
+ pointerD_ := dynamic_
301
+ }
302
+
303
+ _copy (pointerS_, pointerD_, 5 );
304
+ }
305
+
306
+ function asDynamic (string [1 ] memory static_ ) internal pure returns (string [] memory dynamic_ ) {
307
+ return asSingletonArray (static_[0 ]);
308
+ }
309
+
310
+ function asDynamic (string [2 ] memory static_ ) internal pure returns (string [] memory dynamic_ ) {
311
+ dynamic_ = new string [](2 );
312
+
313
+ uint256 pointerS_;
314
+ uint256 pointerD_;
315
+
316
+ assembly {
317
+ pointerS_ := static_
318
+ pointerD_ := dynamic_
319
+ }
320
+
321
+ _copy (pointerS_, pointerD_, 2 );
322
+ }
323
+
324
+ function asDynamic (string [3 ] memory static_ ) internal pure returns (string [] memory dynamic_ ) {
325
+ dynamic_ = new string [](3 );
326
+
327
+ uint256 pointerS_;
328
+ uint256 pointerD_;
329
+
330
+ assembly {
331
+ pointerS_ := static_
332
+ pointerD_ := dynamic_
333
+ }
334
+
335
+ _copy (pointerS_, pointerD_, 3 );
336
+ }
337
+
338
+ function asDynamic (string [4 ] memory static_ ) internal pure returns (string [] memory dynamic_ ) {
339
+ dynamic_ = new string [](4 );
340
+
341
+ uint256 pointerS_;
342
+ uint256 pointerD_;
343
+
344
+ assembly {
345
+ pointerS_ := static_
346
+ pointerD_ := dynamic_
347
+ }
348
+
349
+ _copy (pointerS_, pointerD_, 4 );
350
+ }
351
+
352
+ function asDynamic (string [5 ] memory static_ ) internal pure returns (string [] memory dynamic_ ) {
353
+ dynamic_ = new string [](5 );
354
+
355
+ uint256 pointerS_;
356
+ uint256 pointerD_;
357
+
358
+ assembly {
359
+ pointerS_ := static_
360
+ pointerD_ := dynamic_
361
+ }
362
+
363
+ _copy (pointerS_, pointerD_, 5 );
364
+ }
365
+
366
+ function asDynamic (
367
+ bytes32 [1 ] memory static_
368
+ ) internal pure returns (bytes32 [] memory dynamic_ ) {
369
+ return asSingletonArray (static_[0 ]);
370
+ }
371
+
372
+ function asDynamic (
373
+ bytes32 [2 ] memory static_
374
+ ) internal pure returns (bytes32 [] memory dynamic_ ) {
375
+ dynamic_ = new bytes32 [](2 );
376
+
377
+ uint256 pointerS_;
378
+ uint256 pointerD_;
379
+
380
+ assembly {
381
+ pointerS_ := static_
382
+ pointerD_ := dynamic_
383
+ }
384
+
385
+ _copy (pointerS_, pointerD_, 2 );
386
+ }
387
+
388
+ function asDynamic (
389
+ bytes32 [3 ] memory static_
390
+ ) internal pure returns (bytes32 [] memory dynamic_ ) {
391
+ dynamic_ = new bytes32 [](3 );
392
+
393
+ uint256 pointerS_;
394
+ uint256 pointerD_;
395
+
396
+ assembly {
397
+ pointerS_ := static_
398
+ pointerD_ := dynamic_
399
+ }
400
+
401
+ _copy (pointerS_, pointerD_, 3 );
402
+ }
403
+
404
+ function asDynamic (
405
+ bytes32 [4 ] memory static_
406
+ ) internal pure returns (bytes32 [] memory dynamic_ ) {
407
+ dynamic_ = new bytes32 [](4 );
408
+
409
+ uint256 pointerS_;
410
+ uint256 pointerD_;
411
+
412
+ assembly {
413
+ pointerS_ := static_
414
+ pointerD_ := dynamic_
415
+ }
416
+
417
+ _copy (pointerS_, pointerD_, 4 );
418
+ }
419
+
420
+ function asDynamic (
421
+ bytes32 [5 ] memory static_
422
+ ) internal pure returns (bytes32 [] memory dynamic_ ) {
423
+ dynamic_ = new bytes32 [](5 );
424
+
425
+ uint256 pointerS_;
426
+ uint256 pointerD_;
427
+
428
+ assembly {
429
+ pointerS_ := static_
430
+ pointerD_ := dynamic_
431
+ }
432
+
433
+ _copy (pointerS_, pointerD_, 5 );
434
+ }
435
+
436
+ function _copy (uint256 locationS_ , uint256 locationD_ , uint256 length_ ) private pure {
437
+ assembly {
438
+ for {
439
+ let i := 0
440
+ } lt (i, length_) {
441
+ i := add (i, 1 )
442
+ } {
443
+ locationD_ := add (locationD_, 0x20 )
444
+
445
+ mstore (locationD_, mload (locationS_))
446
+
447
+ locationS_ := add (locationS_, 0x20 )
448
+ }
449
+ }
450
+ }
95
451
}
0 commit comments