void FE_Utils::create_uses_multiple_stuff (AST_Component *c, AST_Uses *u, const char *prefix) { ACE_CString struct_name (prefix); if (!struct_name.empty ()) { struct_name += '_'; } struct_name += u->local_name ()->get_string (); struct_name += "Connection"; Identifier struct_id (struct_name.c_str ()); UTL_ScopedName sn (&struct_id, 0); // In case this call comes from the backend. We // will pop the scope before returning. idl_global->scopes ().push (c); AST_Structure *connection = idl_global->gen ()->create_structure (&sn, 0, 0); struct_id.destroy (); /// If the field type is a param holder, we want /// to use the lookup to create a fresh one, /// since the field will own it and destroy it. UTL_ScopedName *fn = u->uses_type ()->name (); AST_Decl *d = idl_global->root ()->lookup_by_name (fn, true, false); AST_Type *ft = AST_Type::narrow_from_decl (d); Identifier object_id ("objref"); UTL_ScopedName object_name (&object_id, 0); AST_Field *object_field = idl_global->gen ()->create_field (ft, &object_name, AST_Field::vis_NA); (void) DeclAsScope (connection)->fe_add_field (object_field); object_id.destroy (); Identifier local_id ("Cookie"); UTL_ScopedName local_name (&local_id, 0); Identifier module_id ("Components"); UTL_ScopedName scoped_name (&module_id, &local_name); d = c->lookup_by_name (&scoped_name, true); local_id.destroy (); module_id.destroy (); if (d == 0) { // This would happen if we haven't included Components.idl. idl_global->err ()->lookup_error (&scoped_name); return; } AST_ValueType *cookie = AST_ValueType::narrow_from_decl (d); Identifier cookie_id ("ck"); UTL_ScopedName cookie_name (&cookie_id, 0); AST_Field *cookie_field = idl_global->gen ()->create_field (cookie, &cookie_name, AST_Field::vis_NA); (void) DeclAsScope (connection)->fe_add_field (cookie_field); cookie_id.destroy (); (void) c->fe_add_structure (connection); ACE_CDR::ULong bound = 0; AST_Expression *bound_expr = idl_global->gen ()->create_expr (bound, AST_Expression::EV_ulong); AST_Sequence *sequence = idl_global->gen ()->create_sequence (bound_expr, connection, 0, 0, 0); ACE_CString seq_string (struct_name); seq_string += 's'; Identifier seq_id (seq_string.c_str ()); UTL_ScopedName seq_name (&seq_id, 0); AST_Typedef *connections = idl_global->gen ()->create_typedef (sequence, &seq_name, 0, 0); seq_id.destroy (); (void) c->fe_add_typedef (connections); // In case this call comes from the backend. idl_global->scopes ().pop (); }
bool Spectrum::read_from_MGF_stream(const Config *_config, FILE *stream, int _charge, bool verbose) { config_ = _config; totalPeakIntensity_ = 0; char buff[1024]; peaks_ = new Peak[5000]; localAllocationSize_ = 5000; /* while (1) { if( ! fgets(buff, 1024, stream) ) return false; if (strlen(buff)<3) continue; if (strncmp(buff,"BEGIN IONS",10) ) continue; break; }*/ scanNumber_ =-1; retentionTime_ =-1; clusterSize_ =-1; charge_ =-1; mOverZ_ =-1; originalPmWith19_=-1; // read header info and first peak while (1) { if( ! fgets(buff, 1024, stream)) return false; if (strlen(buff)<3) continue; if (strncmp(buff,"BEGIN IONS",10) ) continue; if (! strncmp(buff,"END IONS",7)) return false; if (! strncmp(buff,"TITLE=",6) ) { buff[strlen(buff)-1]='\0'; title_ = static_cast<string>(buff+6); continue; } else if (! strncmp(buff,"SEQ=",4) ) { string seq_string(buff+4); peptide_.parseFromString(config_,seq_string); peptide_.calc_mass(config_); continue; } else if (! strncmp(buff,"SCAN=",5) ) { if (sscanf(buff+5,"%d",&scanNumber_) != 1) { cout << "Error: couldn't read scan number!" << endl; exit(1); } continue; } if (! strncmp(buff,"SCANS=",6) ) { if (sscanf(buff+6,"%d",&scanNumber_) != 1) { cout << "Error: couldn't read scan number!" << endl; exit(1); } continue; } else if (! strncmp(buff,"RT=",3) ) { if (sscanf(buff+3,"%f",&retentionTime_) != 1) { cout << "Error: couldn't read retention_time!" << endl; exit(1); } continue; } else if (! strncmp(buff,"CLUSTER_SIZE=",13) ) { if (sscanf(buff+13,"%d",&clusterSize_) != 1) { cout << "Error: couldn't read cluster size!" << endl; exit(1); } continue; } else if ( ! strncmp(buff,"CHARGE=",6)) { if (sscanf(buff,"CHARGE=%d",&charge_) != 1) { cout << "Error: couldn't read charge!" << endl; return false; } } else if (! strncmp(buff,"PEPMASS=",8)) { istringstream is(buff+8); is >> mOverZ_; if (mOverZ_ < 0) { cout << "Error: reading pepmass:" << mOverZ_ << endl; return false; } } else {