typedef struct SO2DPlot_Triangle_Val { double P; double Q; double R; } SO2DPlot_Triangle_Val; typedef struct SO2DPlot_Triangle { double P[PDIM]; double Q[PDIM]; double R[PDIM]; } SO2DPlot_Triangle; typedef struct SO2DPlot_Triangle_vec { nat nel; SO2DPlot_Triangle*el; } SO2DPlot_Triangle_vec; /* Vectors of Triangle */ SO2DPlot_Triangle_vec SO2DPlot_Triangle_vec_new(nat nel); #define SO2DPlot_Triangle_vec_expand(nv,index) \ vec_expand(vec_cast_ref(nv), index, sizeof(SO2DPlot_Triangle)) #define SO2DPlot_Triangle_vec_trim(nv,nel) \ vec_trim(vec_cast_ref(nv), nel, sizeof(SO2DPlot_Triangle)) /* Arrays of {SO2DPlot_Triangle}: */ SO2DPlot_Triangle_vec SO2DPlot_Triangle_vec_new(nat nel) { /* This is not a macro only because gcc does not allow cast of struct: */ vec_t v = vec_new(nel, sizeof(SO2DPlot_Triangle)); SO2DPlot_Triangle_vec r; r.nel = v.nel; r.el = (SO2DPlot_Triangle*)v.el; return r; }