//==================================================== StatusCode InputStreamParser::extractStream(const std::string & input) { // parses a string containing multiple tag='value', // such as: DATAFILE='LFN:/grid/lhcb/data/file.dst' TYP='POOL_ROOTTREE' OPT='READ' StatusCode sc = StatusCode::SUCCESS; MsgStream log(msgSvc(), name()); boost::smatch matches; boost::match_flag_type flags = boost::match_default; // find the file descriptor m_regex.assign (c_SREDATA, boost::regex_constants::icase); if(boost::regex_search(input.begin(),input.end(), matches, m_regex, flags)) { std::string match_descriptor(matches[3].first, matches[3].second); m_inCollection->push_back(match_descriptor); log << MSG::DEBUG << match_descriptor << endmsg ; } else { log <<MSG::ERROR << "File descriptor not present in: "<< input <<endmsg; return StatusCode::FAILURE; } // check if it is a collection: m_regex.assign(c_SRECOLLECTION, boost::regex_constants::icase); if(boost::regex_search(input.begin(),input.end(), matches, m_regex, flags)) { // m_isCollection = true; std::string ETC(m_inCollection->back()); m_inCollection->pop_back(); sc = extractFileReferences(ETC); } return sc; }
void descriptors_descriptors_rt(t_descriptors *x, t_symbol *msg, short argc, t_atom *argv) { long descriptor_type; long descriptor_num_params = 0; long num_pf_descriptors = 0; long num_params = 0; long output_pos = 0; long num_to_output; double *pf_params = x->pf_params; while (argc) { // Get descriptor type descriptor_type = match_descriptor(argv++, 1); argc--; // Bail if no descriptor matched if (descriptor_type == DESCRIPTOR_PF_NONE) { error ("descriptors(rt)~: unknown descriptor / incorrectly formatted descriptors - bailing with %ld valid descriptors", num_pf_descriptors); break; } // Bail if the descriptor is only for non-realtime use (ie is a per block descriptor) if (descriptor_type < 0) { error ("descriptors(rt)~: descriptor available for non real-time only - bailing with %ld valid descriptors", num_pf_descriptors); break; } // Parse the descriptor arguments (and store into params) descriptor_num_params = descriptors_descriptors_pf((enum PFDescriptorType) descriptor_type, pf_params, &argv, &argc, num_params, num_pf_descriptors, &num_to_output, 1); if (descriptor_num_params) { // Update variables and pointers pf_params += descriptor_num_params; num_params += descriptor_num_params; output_pos += num_to_output; // Bail if we will have too long an output if (output_pos > MAX_OUTPUT) { error ("descriptors(rt)~: too many output values - bailing with %ld valid descriptors", num_pf_descriptors); break; } num_pf_descriptors++; } else { break; } } // Store variables x->num_pf_descriptors = num_pf_descriptors; x->output_length = output_pos; if (x->descriptor_feedback) post ("descriptors(rt)~: set %ld descriptors", num_pf_descriptors); }
void descriptors_descriptors_non_rt (t_descriptors *x, t_symbol *msg, short argc, t_atom *argv) { long descriptor_type; long num_pf_descriptors = 0; long num_pb_descriptors = 0; long num_pf_params = 0; long num_pb_params = 0; long descriptor_num_params = 0; long output_pos = 0; long num_to_output; long stats_num_params; long output_params_left = MAX_PF_OUTPUT_PARAMS; double *pf_params = x->pf_params; double *pb_params = x->pb_params; double *pf_calc_params = x->pf_calc_params; long *pf_output_params = x->pf_output_params; long *pb_pos = x->pb_pos; x->do_sum_amps = 0; while (argc) { // Get descriptor type descriptor_type = match_descriptor(argv++, 0); argc--; // Bail if no descriptor is matched if (descriptor_type == DESCRIPTOR_PF_NONE) { error ("descriptors(rt)~: unknown descriptor / incorrectly formatted descriptors - bailing with %ld valid descriptors", num_pf_descriptors + num_pb_descriptors); break; } if (descriptor_type < 0) { // Per block descriptors // Parse the descriptor arguments (and store into params) descriptor_num_params = descriptors_descriptors_pb((enum PBDescriptorType)-descriptor_type, pb_params, &argv, &argc, num_pb_params, num_pb_descriptors, &num_to_output); if (descriptor_num_params) { // Update variables and pointers pb_params += descriptor_num_params; num_pb_params += descriptor_num_params; pb_pos[num_pb_descriptors] = output_pos; output_pos += num_to_output; // Bail if we will have too long an output if (output_pos > MAX_OUTPUT) { error ("descriptors(rt)~: too many output values - bailing with %ld valid descriptors", num_pf_descriptors + num_pb_descriptors); break; } if (-descriptor_type == DESCRIPTOR_PB_SPECTRAL_PEAKS) x ->do_sum_amps = 1; num_pb_descriptors++; } else break; } else { // Per frame descriptors // Parse the descriptor arguments (and store into params) descriptor_num_params = descriptors_descriptors_pf((enum PFDescriptorType) descriptor_type, pf_params, &argv, &argc, num_pf_params, num_pf_descriptors, &num_to_output, 0); // Note We Ignore the num_to_output return here if (descriptor_num_params) { // Update variables and pointers pf_params += descriptor_num_params; num_pf_params += descriptor_num_params; // Parse statistical arguments stats_num_params = descriptors_descriptors_statistics(pf_output_params, pf_calc_params, &argv, &argc, output_params_left, num_pf_descriptors + num_pb_descriptors, output_pos, &num_to_output); // Update variables and pointers output_params_left -= stats_num_params; pf_output_params += stats_num_params; output_pos += num_to_output; pf_calc_params += 12; // Bail if we will have too long an output if (output_pos > MAX_OUTPUT) { error ("descriptors(rt)~: too many output values - bailing with %ld valid descriptors", num_pf_descriptors + num_pb_descriptors); break; } num_pf_descriptors++; } else break; } } // Store variables x->num_pb_descriptors = num_pb_descriptors; x->num_pf_descriptors = num_pf_descriptors; x->output_length = output_pos; if (x->descriptor_feedback) post ("descriptors(rt)~: set %ld descriptors", num_pf_descriptors + num_pb_descriptors); }