void Function<Scalar>::set_quad_order(unsigned int order, int mask) { if (nodes->present(order)) { cur_node = nodes->get(order); // If the mask has changed. if ((cur_node->mask & mask) != mask) { precalculate(order, mask); nodes->add(cur_node, order); } } else { // The value had not existed. cur_node = nullptr; precalculate(order, mask); nodes->add(cur_node, order); } }
int main() { int n,i; pprime(); precalculate(); while(scanf("%d",&n) && n) { printf("%3d! =",n); for(i=0;num[n][i];i++) { if(i!=0 && i%15 == 0) printf("\n%9d",num[n][i]); else printf("%3d",num[n][i]); } puts(""); } return 0; }
int main(int argc, char** argv) { int c, i, rd, j; long bytes_read = 0; int samples_per_tick; div_t rest; rdfun input_read; char* input = "alsa:default"; while ( ( c = getopt(argc, argv, "vphN:o:g:k:r:c:lS:i:t:s") ) != -1) switch (c) { case 'v': debug++; break; case 'p': print_freqs = 1; break; case 'h': use_harm_comp = 1; break; case 'N': N = atoi(optarg); break; case 'g': gain = atof(optarg); break; case 'o': if (strcmp(optarg, "seq") == 0 ) use_sequencer = 1; else midi_filename =strdup(optarg); break; case 'k': hysteresis = atof(optarg); break; case 'r': ringsize = atoi(optarg); break; case 'c': midi_channel = atoi(optarg); break; case 'i': input = strdup(optarg); break; case 'S': SR = atoi(optarg); break; case 's': print_statistics = 1; break; case 't': threshold = atof(optarg); break; default: usage(); } if ( debug > 0 ) fprintf(stderr, "ringbuffersize: %d ringbuffermask:0x%08x\n" "gain: %f\n", RINGBUFFERSIZE, RINGBUFFERMASK, gain); print_prologoue(N, SR); input_read = input_open(input); // allocate buffers buffer_f = (real_t**)malloc ( RINGBUFFERSIZE * sizeof(real_t*) ); for ( j = 0; j < RINGBUFFERSIZE; j++ ) { buffer_f[j] = malloc ( N * sizeof(real_t) ); for ( i = 0; i < N ; i ++ ) buffer_f[j][i] = 0.0; } // prepare midi file if (midi_filename != NULL ) { midi_file = midi_write_open(midi_filename); midi_write_header(midi_timeDivision, 1, midi_file); midi_write_track_header(midi_file); } if ( use_sequencer ) midi_connect_sequencer(); // prebuffer everthing precalculate(); samples_per_tick = samples_per_midi_tick(SR, midi_bpm, midi_timeDivision); rest.rem = 0; // process data while ( (rd = input_read(buffer_f[current_buffer], N)) ) { bytes_read += rd; rest = div(rest.rem + N, samples_per_tick); if (midi_file != NULL ) midi_write_increase_difftime(rest.quot, midi_file); absolute_time += N; scan_freqs(); // advance buffer: current_buffer = (current_buffer+1) & RINGBUFFERMASK; } for ( j = lo_note; j < hi_note; j++ ) { if ( act_freq[j] ) note_off(j, 0); } // free stuff for ( j = 0; j < RINGBUFFERSIZE; j++ ) free(buffer_f[j]); free(buffer_f); for (i = 0; i< NTONES; i++ ) free(cos_precalc[i]); // fixup midi if (midi_file != NULL ) { midi_write_track_end(midi_file); midi_write_close(midi_file); } if ( print_statistics ) { // octave style output of powers over frequency // first row: frequencies // second row: power for that freq fprintf(stderr, "freqs = ["); for (j=lo_note;j<hi_note-1;j++) fprintf(stderr, "%.2f,", midi_note_to_hertz(j)); fprintf(stderr, "%.2f", midi_note_to_hertz(j)); fprintf(stderr, ";"); for (j=lo_note;j<hi_note-1;j++) fprintf(stderr, "%.2f,", max_powers[j]); fprintf(stderr, "%.2f", max_powers[j]); fprintf(stderr, "];\n"); fprintf(stderr, "\n\n note_ons:%ld bytes_read:%ld playtime:%ld:%ld\n", stats_note_ons, bytes_read, bytes_read/(SR*60), (bytes_read / SR)%60 ); } input_close(); print_epilogue(); return 0; }