- CL_ALLOCA_STACK;
- var cl_I* qv = (cl_I*) cl_alloca(N*sizeof(cl_I));
- var uintC* qsv = (uintC*) cl_alloca(N*sizeof(uintC));
- var uintC n;
- for (n = 0; n < N; n++) {
- init1(cl_I, qv[n]) (n==0 ? 1 : n);
- }
- var cl_q_series series;
- series.qv = qv;
- series.qsv = (len >= 1000 && len <= 10000 ? qsv : 0); // tiny speedup
- var cl_LF fsum = eval_rational_series(N,series,actuallen);
- for (n = 0; n < N; n++) {
- qv[n].~cl_I();
- }
+ struct rational_series_stream : cl_q_series_stream {
+ var uintC n;
+ static cl_q_series_term computenext (cl_q_series_stream& thisss)
+ {
+ var rational_series_stream& thiss = (rational_series_stream&)thisss;
+ var uintC n = thiss.n;
+ var cl_q_series_term result;
+ result.q = (n==0 ? 1 : n);
+ thiss.n = n+1;
+ return result;
+ }
+ rational_series_stream()
+ : cl_q_series_stream (rational_series_stream::computenext),
+ n(0) {}
+ } series;
+ var cl_LF fsum = eval_rational_series<false>(N,series,actuallen);