 |
Changeset 2838
- Timestamp:
- 11/09/07 23:42:40
(1 year ago)
- Author:
- schveiguy
- Message:
Array had issues with arrays of delegates being casted to const
Variant is updated to use const
-
Files:
-
Legend:
- Unmodified
- Added
- Removed
- Modified
- Copied
- Moved
| r2836 |
r2838 |
|
| 53 | 53 | alias typeof(T[0]) ElemTypeOf; |
|---|
| 54 | 54 | } |
|---|
| | 55 | |
|---|
| | 56 | // |
|---|
| | 57 | // this was added to fix issue with delegates. A delegate is the one type |
|---|
| | 58 | // which cannot be converted to a const delegate, because the signatures |
|---|
| | 59 | // are different. |
|---|
| | 60 | // |
|---|
| | 61 | template ConstArrayOf( T ) |
|---|
| | 62 | { |
|---|
| | 63 | static if( is( T == delegate ) ) |
|---|
| | 64 | alias T[] ConstArrayOf; |
|---|
| | 65 | else |
|---|
| | 66 | alias const(T)[] ConstArrayOf; |
|---|
| | 67 | } |
|---|
| 55 | 68 | } |
|---|
| 56 | 69 | |
|---|
| … | … | |
| 107 | 120 | static assert( isCallableType!(Pred) ); |
|---|
| 108 | 121 | |
|---|
| 109 | | |
|---|
| 110 | | size_t fn( const(Elem)[] buf, Elem pat, Pred pred = Pred.init ) |
|---|
| | 122 | alias ConstArrayOf!(Elem) EA; |
|---|
| | 123 | |
|---|
| | 124 | |
|---|
| | 125 | size_t fn( EA buf, Elem pat, Pred pred = Pred.init ) |
|---|
| 111 | 126 | { |
|---|
| 112 | 127 | foreach( size_t pos, Elem cur; buf ) |
|---|
| … | … | |
| 119 | 134 | |
|---|
| 120 | 135 | |
|---|
| 121 | | size_t fn( const(Elem)[] buf, const(Elem)[] pat, Pred pred = Pred.init ) |
|---|
| | 136 | size_t fn( EA buf, EA pat, Pred pred = Pred.init ) |
|---|
| 122 | 137 | { |
|---|
| 123 | 138 | if( buf.length == 0 || |
|---|
| … | … | |
| 256 | 271 | static assert( isCallableType!(Pred) ); |
|---|
| 257 | 272 | |
|---|
| 258 | | |
|---|
| 259 | | size_t fn( const(Elem)[] buf, Elem pat, Pred pred = Pred.init ) |
|---|
| | 273 | alias ConstArrayOf!(Elem) EA; |
|---|
| | 274 | |
|---|
| | 275 | size_t fn( EA buf, Elem pat, Pred pred = Pred.init ) |
|---|
| 260 | 276 | { |
|---|
| 261 | 277 | if( buf.length == 0 ) |
|---|
| … | … | |
| 273 | 289 | |
|---|
| 274 | 290 | |
|---|
| 275 | | size_t fn( const(Elem)[] buf, const(Elem)[] pat, Pred pred = Pred.init ) |
|---|
| | 291 | size_t fn( EA buf, EA pat, Pred pred = Pred.init ) |
|---|
| 276 | 292 | { |
|---|
| 277 | 293 | if( buf.length == 0 || |
|---|
| … | … | |
| 420 | 436 | static assert( isCallableType!(Pred) ); |
|---|
| 421 | 437 | |
|---|
| 422 | | |
|---|
| 423 | | size_t fn( const(Elem)[] buf, Elem pat, Pred pred = Pred.init ) |
|---|
| | 438 | alias ConstArrayOf!(Elem) EA; |
|---|
| | 439 | |
|---|
| | 440 | size_t fn( EA buf, Elem pat, Pred pred = Pred.init ) |
|---|
| 424 | 441 | { |
|---|
| 425 | 442 | foreach( size_t pos, Elem cur; buf ) |
|---|
| … | … | |
| 432 | 449 | |
|---|
| 433 | 450 | |
|---|
| 434 | | size_t fn( const(Elem)[] buf, const(Elem)[] pat, Pred pred = Pred.init ) |
|---|
| | 451 | size_t fn( EA buf, EA pat, Pred pred = Pred.init ) |
|---|
| 435 | 452 | { |
|---|
| 436 | 453 | if( buf.length == 0 || |
|---|
| … | … | |
| 602 | 619 | static assert( isCallableType!(Pred) ); |
|---|
| 603 | 620 | |
|---|
| 604 | | |
|---|
| 605 | | size_t fn( const(Elem)[] buf, Elem pat, Pred pred = Pred.init ) |
|---|
| | 621 | alias ConstArrayOf!(Elem) EA; |
|---|
| | 622 | |
|---|
| | 623 | size_t fn( EA buf, Elem pat, Pred pred = Pred.init ) |
|---|
| 606 | 624 | { |
|---|
| 607 | 625 | if( buf.length == 0 ) |
|---|
| … | … | |
| 619 | 637 | |
|---|
| 620 | 638 | |
|---|
| 621 | | size_t fn( const(Elem)[] buf, const(Elem)[] pat, Pred pred = Pred.init ) |
|---|
| | 639 | size_t fn( EA buf, EA pat, Pred pred = Pred.init ) |
|---|
| 622 | 640 | { |
|---|
| 623 | 641 | if( buf.length == 0 || |
|---|
| … | … | |
| 760 | 778 | static assert( isCallableType!(Pred) ); |
|---|
| 761 | 779 | |
|---|
| 762 | | |
|---|
| 763 | | size_t fn( const(Elem)[] buf, Pred pred ) |
|---|
| | 780 | alias ConstArrayOf!(Elem) EA; |
|---|
| | 781 | |
|---|
| | 782 | size_t fn( EA buf, Pred pred ) |
|---|
| 764 | 783 | { |
|---|
| 765 | 784 | foreach( size_t pos, Elem cur; buf ) |
|---|
| … | … | |
| 825 | 844 | static assert( isCallableType!(Pred) ); |
|---|
| 826 | 845 | |
|---|
| 827 | | |
|---|
| 828 | | size_t fn( const(Elem)[] buf, Pred pred ) |
|---|
| | 846 | alias ConstArrayOf!(Elem) EA; |
|---|
| | 847 | |
|---|
| | 848 | size_t fn( EA buf, Pred pred ) |
|---|
| 829 | 849 | { |
|---|
| 830 | 850 | if( buf.length == 0 ) |
|---|
| … | … | |
| 898 | 918 | static assert( isCallableType!(Pred) ); |
|---|
| 899 | 919 | |
|---|
| 900 | | |
|---|
| 901 | | size_t fn( const(Elem)[] buf, Pred pred = Pred.init ) |
|---|
| | 920 | alias ConstArrayOf!(Elem) EA; |
|---|
| | 921 | |
|---|
| | 922 | size_t fn( EA buf, Pred pred = Pred.init ) |
|---|
| 902 | 923 | { |
|---|
| 903 | 924 | if( buf.length < 2 ) |
|---|
| … | … | |
| 1081 | 1102 | static assert( isCallableType!(Pred) ); |
|---|
| 1082 | 1103 | |
|---|
| 1083 | | |
|---|
| 1084 | | size_t fn( const(Elem)[] bufA, const(Elem)[] bufB, Pred pred = Pred.init ) |
|---|
| | 1104 | alias ConstArrayOf!(Elem) EA; |
|---|
| | 1105 | |
|---|
| | 1106 | size_t fn( EA bufA, EA bufB, Pred pred = Pred.init ) |
|---|
| 1085 | 1107 | { |
|---|
| 1086 | 1108 | size_t posA = 0, |
|---|
| … | … | |
| 1169 | 1191 | static assert( isCallableType!(Pred) ); |
|---|
| 1170 | 1192 | |
|---|
| 1171 | | |
|---|
| 1172 | | size_t fn( const(Elem)[] buf, Elem pat, Pred pred = Pred.init ) |
|---|
| | 1193 | alias ConstArrayOf!(Elem) EA; |
|---|
| | 1194 | |
|---|
| | 1195 | size_t fn( EA buf, Elem pat, Pred pred = Pred.init ) |
|---|
| 1173 | 1196 | { |
|---|
| 1174 | 1197 | size_t cnt = 0; |
|---|
| … | … | |
| 1245 | 1268 | static assert( isCallableType!(Pred) ); |
|---|
| 1246 | 1269 | |
|---|
| 1247 | | |
|---|
| 1248 | | size_t fn( const(Elem)[] buf, Pred pred ) |
|---|
| | 1270 | alias ConstArrayOf!(Elem) EA; |
|---|
| | 1271 | |
|---|
| | 1272 | size_t fn( EA buf, Pred pred ) |
|---|
| 1249 | 1273 | { |
|---|
| 1250 | 1274 | size_t cnt = 0; |
|---|
| … | … | |
| 1315 | 1339 | static assert( isCallableType!(Pred) ); |
|---|
| 1316 | 1340 | |
|---|
| 1317 | | |
|---|
| 1318 | | size_t fn( const(Elem)[] buf, Elem pat, Elem val, Pred pred = Pred.init ) |
|---|
| | 1341 | alias ConstArrayOf!(Elem) EA; |
|---|
| | 1342 | |
|---|
| | 1343 | size_t fn( EA buf, Elem pat, Elem val, Pred pred = Pred.init ) |
|---|
| 1319 | 1344 | { |
|---|
| 1320 | 1345 | size_t cnt = 0; |
|---|
| … | … | |
| 1395 | 1420 | static assert( isCallableType!(Pred) ); |
|---|
| 1396 | 1421 | |
|---|
| 1397 | | |
|---|
| 1398 | | size_t fn( const(Elem)[] buf, Elem val, Pred pred ) |
|---|
| | 1422 | alias ConstArrayOf!(Elem) EA; |
|---|
| | 1423 | |
|---|
| | 1424 | size_t fn( EA buf, Elem val, Pred pred ) |
|---|
| 1399 | 1425 | { |
|---|
| 1400 | 1426 | size_t cnt = 0; |
|---|
| … | … | |
| 1463 | 1489 | * The number of elements that do not match pat. |
|---|
| 1464 | 1490 | */ |
|---|
| 1465 | | size_t remove( const(Elem)[] buf, Elem pat, Pred2E pred = Pred2E.init ); |
|---|
| | 1491 | size_t remove( Elem[] buf, Elem pat, Pred2E pred = Pred2E.init ); |
|---|
| 1466 | 1492 | } |
|---|
| 1467 | 1493 | else |
|---|
| … | … | |
| 1563 | 1589 | * The number of elements that do not satisfy pred. |
|---|
| 1564 | 1590 | */ |
|---|
| 1565 | | size_t removeIf( const(Elem)[] buf, Pred1E pred ); |
|---|
| | 1591 | size_t removeIf( Elem[] buf, Pred1E pred ); |
|---|
| 1566 | 1592 | } |
|---|
| 1567 | 1593 | else |
|---|
| … | … | |
| 1570 | 1596 | { |
|---|
| 1571 | 1597 | static assert( isCallableType!(Pred) ); |
|---|
| 1572 | | |
|---|
| 1573 | 1598 | |
|---|
| 1574 | 1599 | size_t fn( Elem[] buf, Pred pred ) |
|---|
| … | … | |
| 1656 | 1681 | * The number of unique elements in buf. |
|---|
| 1657 | 1682 | */ |
|---|
| 1658 | | size_t unique( const(Elem)[] buf, Pred2E pred = Pred2E.init ); |
|---|
| | 1683 | size_t unique( Elem[] buf, Pred2E pred = Pred2E.init ); |
|---|
| 1659 | 1684 | } |
|---|
| 1660 | 1685 | else |
|---|
| … | … | |
| 1763 | 1788 | * The number of elements that satisfy pred. |
|---|
| 1764 | 1789 | */ |
|---|
| 1765 | | size_t partition( const(Elem)[] buf, Pred1E pred ); |
|---|
| | 1790 | size_t partition( Elem[] buf, Pred1E pred ); |
|---|
| 1766 | 1791 | } |
|---|
| 1767 | 1792 | else |
|---|
| … | … | |
| 1874 | 1899 | * buf.length. |
|---|
| 1875 | 1900 | */ |
|---|
| 1876 | | size_t select( const(Elem)[] buf, Num num, Pred2E pred = Pred2E.init ); |
|---|
| | 1901 | size_t select( Elem[] buf, Num num, Pred2E pred = Pred2E.init ); |
|---|
| 1877 | 1902 | } |
|---|
| 1878 | 1903 | else |
|---|
| … | … | |
| 1988 | 2013 | * callable type. |
|---|
| 1989 | 2014 | */ |
|---|
| 1990 | | void sort( const(Elem)[] buf, Pred2E pred = Pred2E.init ); |
|---|
| | 2015 | void sort( Elem[] buf, Pred2E pred = Pred2E.init ); |
|---|
| 1991 | 2016 | } |
|---|
| 1992 | 2017 | else |
|---|
| … | … | |
| 2158 | 2183 | static assert( isCallableType!(Pred) ); |
|---|
| 2159 | 2184 | |
|---|
| 2160 | | |
|---|
| 2161 | | size_t fn( const(Elem)[] buf, Elem pat, Pred pred = Pred.init ) |
|---|
| | 2185 | alias ConstArrayOf!(Elem) EA; |
|---|
| | 2186 | |
|---|
| | 2187 | size_t fn( EA buf, Elem pat, Pred pred = Pred.init ) |
|---|
| 2162 | 2188 | { |
|---|
| 2163 | 2189 | size_t beg = 0, |
|---|
| … | … | |
| 2242 | 2268 | static assert( isCallableType!(Pred) ); |
|---|
| 2243 | 2269 | |
|---|
| 2244 | | |
|---|
| 2245 | | size_t fn( const(Elem)[] buf, Elem pat, Pred pred = Pred.init ) |
|---|
| | 2270 | alias ConstArrayOf!(Elem) EA; |
|---|
| | 2271 | |
|---|
| | 2272 | size_t fn( EA buf, Elem pat, Pred pred = Pred.init ) |
|---|
| 2246 | 2273 | { |
|---|
| 2247 | 2274 | size_t beg = 0, |
|---|
| … | … | |
| 2323 | 2350 | static assert( isCallableType!(Pred) ); |
|---|
| 2324 | 2351 | |
|---|
| 2325 | | |
|---|
| 2326 | | bool fn( const(Elem)[] buf, Elem pat, Pred pred = Pred.init ) |
|---|
| | 2352 | alias ConstArrayOf!(Elem) EA; |
|---|
| | 2353 | |
|---|
| | 2354 | bool fn( EA buf, Elem pat, Pred pred = Pred.init ) |
|---|
| 2327 | 2355 | { |
|---|
| 2328 | 2356 | size_t pos = lbound( buf, pat, pred ); |
|---|
| … | … | |
| 2400 | 2428 | static assert( isCallableType!(Pred ) ); |
|---|
| 2401 | 2429 | |
|---|
| 2402 | | |
|---|
| 2403 | | bool fn( const(Elem)[] setA, const(Elem)[] setB, Pred pred = Pred.init ) |
|---|
| | 2430 | alias ConstArrayOf!(Elem) EA; |
|---|
| | 2431 | |
|---|
| | 2432 | bool fn( EA setA, EA setB, Pred pred = Pred.init ) |
|---|
| 2404 | 2433 | { |
|---|
| 2405 | 2434 | size_t posA = 0, |
|---|
| … | … | |
| 2489 | 2518 | static assert( isCallableType!(Pred ) ); |
|---|
| 2490 | 2519 | |
|---|
| 2491 | | |
|---|
| 2492 | | Elem[] fn( const(Elem)[] setA, const(Elem)[] setB, Pred pred = Pred.init ) |
|---|
| | 2520 | alias ConstArrayOf!(Elem) EA; |
|---|
| | 2521 | |
|---|
| | 2522 | Elem[] fn( EA setA, EA setB, Pred pred = Pred.init ) |
|---|
| 2493 | 2523 | { |
|---|
| 2494 | 2524 | size_t posA = 0, |
|---|
| … | … | |
| 2575 | 2605 | static assert( isCallableType!(Pred ) ); |
|---|
| 2576 | 2606 | |
|---|
| 2577 | | |
|---|
| 2578 | | Elem[] fn( const(Elem)[] setA, const(Elem)[] setB, Pred pred = Pred.init ) |
|---|
| | 2607 | alias ConstArrayOf!(Elem) EA; |
|---|
| | 2608 | |
|---|
| | 2609 | Elem[] fn( EA setA, EA setB, Pred pred = Pred.init ) |
|---|
| 2579 | 2610 | { |
|---|
| 2580 | 2611 | size_t posA = 0, |
|---|
| … | … | |
| 2657 | 2688 | static assert( isCallableType!(Pred ) ); |
|---|
| 2658 | 2689 | |
|---|
| 2659 | | |
|---|
| 2660 | | Elem[] fn( const(Elem)[] setA, const(Elem)[] setB, Pred pred = Pred.init ) |
|---|
| | 2690 | alias ConstArrayOf!(Elem) EA; |
|---|
| | 2691 | |
|---|
| | 2692 | Elem[] fn( EA setA, EA setB, Pred pred = Pred.init ) |
|---|
| 2661 | 2693 | { |
|---|
| 2662 | 2694 | size_t posA = 0, |
|---|
| … | … | |
| 2744 | 2776 | static assert( isCallableType!(Pred ) ); |
|---|
| 2745 | 2777 | |
|---|
| 2746 | | |
|---|
| 2747 | | Elem[] fn( const(Elem)[] setA, const(Elem)[] setB, Pred pred = Pred.init ) |
|---|
| | 2778 | alias ConstArrayOf!(Elem) EA; |
|---|
| | 2779 | |
|---|
| | 2780 | Elem[] fn( EA setA, EA setB, Pred pred = Pred.init ) |
|---|
| 2748 | 2781 | { |
|---|
| 2749 | 2782 | size_t posA = 0, |
|---|
| … | … | |
| 2822 | 2855 | * callable type. |
|---|
| 2823 | 2856 | */ |
|---|
| 2824 | | void makeHeap( const(Elem)[] buf, Pred2E pred = Pred2E.init ); |
|---|
| | 2857 | void makeHeap( Elem[] buf, Pred2E pred = Pred2E.init ); |
|---|
| 2825 | 2858 | } |
|---|
| 2826 | 2859 | else |
|---|
| … | … | |
| 2951 | 2984 | * callable type. |
|---|
| 2952 | 2985 | */ |
|---|
| 2953 | | void pushHeap( ref const(Elem)[] buf, Elem val, Pred2E pred = Pred2E.init ); |
|---|
| | 2986 | void pushHeap( ref Elem[] buf, Elem val, Pred2E pred = Pred2E.init ); |
|---|
| 2954 | 2987 | } |
|---|
| 2955 | 2988 | else |
|---|
| … | … | |
| 3072 | 3105 | * callable type. |
|---|
| 3073 | 3106 | */ |
|---|
| 3074 | | void popHeap( ref const(Elem)[] buf, Pred2E pred = Pred2E.init ); |
|---|
| | 3107 | void popHeap( ref Elem[] buf, Pred2E pred = Pred2E.init ); |
|---|
| 3075 | 3108 | } |
|---|
| 3076 | 3109 | else |
|---|
| … | … | |
| 3197 | 3230 | * callable type. |
|---|
| 3198 | 3231 | */ |
|---|
| 3199 | | void sortHeap( const(Elem)[] buf, Pred2E pred = Pred2E.init ); |
|---|
| | 3232 | void sortHeap( Elem[] buf, Pred2E pred = Pred2E.init ); |
|---|
| 3200 | 3233 | } |
|---|
| 3201 | 3234 | else |
|---|
| r2810 |
r2838 |
|
| 135 | 135 | template isStaticArray( T ) |
|---|
| 136 | 136 | { |
|---|
| 137 | | static if( is( typeof(T.init)[(T).sizeof / typeof(T.init).sizeof] == T ) ) |
|---|
| | 137 | static if( __traits(isStaticArray, T) ) |
|---|
| 138 | 138 | const isStaticArray = true; |
|---|
| 139 | 139 | else |
|---|
| … | … | |
| 226 | 226 | |
|---|
| 227 | 227 | |
|---|
| | 228 | template isInvariant( T ) |
|---|
| | 229 | { |
|---|
| | 230 | static if( is(invariant(T) : T) ) |
|---|
| | 231 | const isInvariant = true; |
|---|
| | 232 | else |
|---|
| | 233 | const isInvariant = false; |
|---|
| | 234 | } |
|---|
| | 235 | |
|---|
| 228 | 236 | template storageT( T ) |
|---|
| 229 | 237 | { |
|---|
| 230 | 238 | static if( isStaticArray!(T) ) |
|---|
| | 239 | { |
|---|
| | 240 | static if( isInvariant!(T) ) |
|---|
| | 241 | alias typeof(T.idup) storageT; |
|---|
| | 242 | else |
|---|
| 231 | 243 | alias typeof(T.dup) storageT; |
|---|
| | 244 | } |
|---|
| 232 | 245 | else |
|---|
| 233 | 246 | alias T storageT; |
|---|
| … | … | |
| 411 | 424 | else static if( isArray!(T) ) |
|---|
| 412 | 425 | { |
|---|
| | 426 | static if( isInvariant!(T) ) |
|---|
| | 427 | return (cast(invariant(typeof(T[0])*))this.value.arr.ptr)[0 .. this.value.arr.length]; |
|---|
| | 428 | else |
|---|
| 413 | 429 | return (cast(typeof(T[0])*)this.value.arr.ptr)[0 .. this.value.arr.length]; |
|---|
| 414 | 430 | } |
|---|
Download in other formats:
|
 |