Changes in / [05f8761:5b95e67]


Ignore:
Files:
6 edited

Legend:

Unmodified
Added
Removed
  • libcfa/src/collections/array.hfa

    r05f8761 r5b95e67  
    156156//      other two.  This solution offers ?{}() that needs only ?{}(), and similar for ^?{}.
    157157
    158 // skip initializing elements
    159 //   array(float, 5) x = { delay_init };
    160 struct delay_init_t {} delay_init;
    161 forall( [N], S & | sized(S), Timmed &, Tbase & )
    162 static inline void ?{}( arpk( N, S, Timmed, Tbase ) & this, delay_init_t ) {
     158forall( [N], S & | sized(S), Timmed &, Tbase & | { void ?{}( Timmed & ); } )
     159static inline void ?{}( arpk( N, S, Timmed, Tbase ) & this ) { 
    163160        void ?{}( S (&)[N] ) {}
    164161        ?{}(this.strides);
    165 }
    166 
    167 // call default ctor on elements
    168 //   array(float, 5) x;
    169 forall( [N], S & | sized(S), Timmed &, Tbase & | { void ?{}( Timmed & ); } )
    170 static inline void ?{}( arpk( N, S, Timmed, Tbase ) & this ) { 
    171         ?{}( this, delay_init );
     162
    172163        for (i; N) ?{}( (Timmed &)this.strides[i] );
    173164}
     
    182173        }
    183174}
    184 
    185175
    186176//
  • tests/array-collections/.expect/array-raii-c.txt

    r05f8761 r5b95e67  
    7070dtor 1
    7171dtor 0
    72 === uninit ( uNoCtor[] )
     72=== uninit
    7373 [1]
    7474before ctors
  • tests/array-collections/.expect/array-raii-cfa.txt

    r05f8761 r5b95e67  
    7070dtor 1
    7171dtor 0
    72 === uninit ( uNoCtor[] )
     72=== uninit
    7373 [1]
    7474before ctors
     
    108108dtor 101
    109109dtor 100
    110 === uninit alt ( uArray )
    111  [1]
    112 before ctors
    113 ctor 0
    114 ctor 999
    115 ctor 888
    116 ctor 3
    117 ctor 4
    118 func 0
    119 func 999
    120 func 888
    121 func 3
    122 func 4
    123 dtor 4
    124 dtor 3
    125 dtor 888
    126 dtor 999
    127 dtor 0
    128  [2]
    129 before ctors
    130 ctor 100
    131 ctor 101
    132 ctor 102
    133 ctor 110
    134 ctor 999
    135 ctor 888
    136 func 100 at (0, 0)
    137 func 101 at (0, 1)
    138 func 102 at (0, 2)
    139 func 110 at (1, 0)
    140 func 999 at (1, 1)
    141 func 888 at (1, 2)
    142 dtor 888
    143 dtor 999
    144 dtor 110
    145 dtor 102
    146 dtor 101
    147 dtor 100
    148 === uC++ cheat sheet
    149 ctor 0
    150 ctor 1
    151 ctor 2
    152 ctor 3
    153 ctor 4
    154 0
    155 1
    156 2
    157 3
    158 4
    159 dtor 4
    160 dtor 3
    161 dtor 2
    162 dtor 1
    163 dtor 0
  • tests/array-collections/array-raii-c.cfa

    r05f8761 r5b95e67  
    2020
    2121#include "array-raii.hfa"
    22 
    23 void test_extras() {}
  • tests/array-collections/array-raii-cfa.cfa

    r05f8761 r5b95e67  
    1616// CFA array means like `array(float, 17) x;`
    1717
    18 
    19 #include <fstream.hfa>
    2018#include <collections/array.hfa>
    2119
     
    2422
    2523#include "array-raii.hfa"
    26 
    27 void test_uninit_alt() {
    28     printf(" [1]\n");
    29     {
    30         array(thing, 5) a = { delay_init };
    31         printf("before ctors\n");
    32         for(i; 5) {
    33             if (i == 1)
    34                 (a[i]){};  // no need for `emplace` bc no-arg ctor call means elem's real ctor
    35             else if (i == 2)
    36                 (a[i]){888};
    37             else
    38                 (a[i]){i};
    39         }
    40         for(i; 5) printf("func %d\n", a[i].mem);
    41     }
    42     printf(" [2]\n");
    43     {
    44         array(thing, 2, 3) a = { delay_init };
    45         printf("before ctors\n");
    46         for(i; 2) for(j; 3) {
    47             if (i == 1 && j == 1)
    48                 (a[i][j]){};
    49             else if (i == 1 && j == 2)
    50                 (a[i][j]){888};
    51             else
    52                 (a[i][j]){100 + 10 * i + j};
    53         }
    54         for(i; 2) for(j; 3) {
    55             printf("func %d at (%d, %d)\n", a[i][j].mem, i, j);
    56         }
    57     }
    58 }
    59 
    60 void test_uCxxCheatSheet() {
    61     struct S {
    62         int i;
    63     };
    64     void ?{}( S & s, int i ) { s.i = i; sout | "ctor" | s.i; }
    65     void ^?{}( S & s ) { sout | "dtor" | s.i; }
    66 //  int main() {
    67         enum { N = 5 };
    68         array(S, N) s = { delay_init };   // no constructor calls
    69         for ( i; N ) s[i]{ i };
    70         for ( i; N ) sout | s[i].i;
    71 //  }
    72 }
    73 
    74 void test_extras() {
    75 
    76     printf("=== uninit alt ( uArray )\n");
    77     test_uninit_alt();
    78 
    79     printf("=== uC++ cheat sheet\n");
    80     test_uCxxCheatSheet();
    81 }
  • tests/array-collections/array-raii.hfa

    r05f8761 r5b95e67  
    118118}
    119119
    120 struct thing { int mem; };
    121 void ?{}( thing & this, int i ) {
    122     (this.mem){ i };
    123     printf("ctor %d\n", this.mem);
    124 }
    125 void ?{}( thing & this ) {
    126     (this){ 999 };
    127 }
    128 void ^?{}( thing & this ) {
    129     printf("dtor %d\n", this.mem);
    130 }
    131 
    132120// Array of uninits sees explicit ctor calls (only), and implied dtor calls
    133121void test_uninit() {
     122    struct thing { int mem; };
     123    void ?{}( thing & this, int i ) {
     124        (this.mem){ i };
     125        printf("ctor %d\n", this.mem);
     126    }
     127    void ?{}( thing & this ) {
     128        (this){ 999 };
     129    }
     130    void ^?{}( thing & this ) {
     131        printf("dtor %d\n", this.mem);
     132    }
    134133    printf(" [1]\n");
    135134    {
     
    164163}
    165164
    166 void test_extras();
    167 
    168165int main() {
    169166    printf("=== builtins\n");
     
    173170    test_custom();
    174171
    175     printf("=== uninit ( uNoCtor[] )\n");
     172    printf("=== uninit\n");
    176173    test_uninit();
    177 
    178     test_extras();
    179174}
Note: See TracChangeset for help on using the changeset viewer.