📄 user_object.cpp
字号:
/* * =========================================================================== * PRODUCTION $Log: User_object.cpp,v $ * PRODUCTION Revision 1000.4 2004/06/01 19:32:32 gouriano * PRODUCTION PRODUCTION: UPGRADED [GCC34_MSVC7] Dev-tree R6.7 * PRODUCTION * =========================================================================== *//* $Id: User_object.cpp,v 1000.4 2004/06/01 19:32:32 gouriano Exp $ * =========================================================================== * * PUBLIC DOMAIN NOTICE * National Center for Biotechnology Information * * This software/database is a "United States Government Work" under the * terms of the United States Copyright Act. It was written as part of * the author's official duties as a United States Government employee and * thus cannot be copyrighted. This software/database is freely available * to the public for use. The National Library of Medicine and the U.S. * Government have not placed any restriction on its use or reproduction. * * Although all reasonable efforts have been taken to ensure the accuracy * and reliability of the software and data, the NLM and the U.S. * Government do not and cannot warrant the performance or results that * may be obtained by using this software or data. The NLM and the U.S. * Government disclaim all warranties, express or implied, including * warranties of performance, merchantability or fitness for any particular * purpose. * * Please cite the author in any work or product based on this material. * * =========================================================================== * * Author: ....... * * File Description: * ....... * * Remark: * This code was originally generated by application DATATOOL * using specifications from the ASN data definition file * 'general.asn'. */// standard includes// generated includes#include <ncbi_pch.hpp>#include <objects/general/User_object.hpp>#include <objects/general/User_field.hpp>#include <objects/general/Object_id.hpp>#include <corelib/ncbiexpt.hpp>// generated classesBEGIN_NCBI_SCOPEBEGIN_objects_SCOPE // namespace ncbi::objects::// destructorCUser_object::~CUser_object(void){}//// retrieve a named field. The named field can recurse, depending// on a set of user-defined delimiters//const CUser_field& CUser_object::GetField(const string& str, const string& delim) const{ list<string> toks; NStr::Split(str, delim, toks); CConstRef<CUser_object> obj_ref(this); CConstRef<CUser_field> field_ref; ITERATE(list<string>, iter, toks) { if (obj_ref) { ITERATE(TData, field_iter, obj_ref->GetData()) { const CUser_field& field = **field_iter; if (field.IsSetLabel() && field.GetLabel().IsStr() && field.GetLabel().GetStr() == *iter) { field_ref.Reset(&field); obj_ref.Reset(); break; } } } else if (field_ref) { switch (field_ref->GetData().Which()) { case CUser_field::TData::e_Object: break; case CUser_field::TData::e_Objects: break; case CUser_field::TData::e_Fields: break; default: NCBI_THROW(CException, eUnknown, "illegal recursion"); } } } if ( field_ref ) { return *field_ref; } NCBI_THROW(CException, eUnknown, "field not found");}bool CUser_object::HasField(const string& str, const string& delim) const{ list<string> toks; NStr::Split(str, delim, toks); CConstRef<CUser_object> obj_ref(this); CConstRef<CUser_field> field_ref; ITERATE(list<string>, iter, toks) { if (obj_ref) { ITERATE(TData, field_iter, obj_ref->GetData()) { const CUser_field& field = **field_iter; if (field.IsSetLabel() && field.GetLabel().IsStr() && field.GetLabel().GetStr() == *iter) { field_ref.Reset(&field); obj_ref.Reset(); break; } } } else if (field_ref) { switch (field_ref->GetData().Which()) { case CUser_field::TData::e_Object: break; case CUser_field::TData::e_Objects: break; case CUser_field::TData::e_Fields: break; default: return false; } } } if ( field_ref ) { return true; } return false;}//// retrieve a named field. The named field can recurse, depending// on a set of user-defined delimiters//CUser_field& CUser_object::SetField(const string& str, const string& delim){ list<string> toks; NStr::Split(str, delim, toks); CRef<CUser_object> obj_ref(this); CRef<CUser_field> field_ref; ITERATE(list<string>, iter, toks) { // recurse - make our field an object if (field_ref) { obj_ref.Reset(&field_ref->SetData().SetObject()); } // find the named field at this object's level NON_CONST_ITERATE(TData, field_iter, obj_ref->SetData()) { CUser_field& field = **field_iter; if (field.IsSetLabel() && field.GetLabel().IsStr() && field.GetLabel().GetStr() == *iter) { field_ref.Reset(&field); break; } } // if we didn't find it, add a new field if ( !field_ref ) { field_ref.Reset(new CUser_field()); field_ref->SetLabel().SetStr(*iter); obj_ref->SetData().push_back(field_ref); } } return *field_ref;}// add a data field to the user object that holds a given valueCUser_object& CUser_object::AddField(const string& label, const string& value){ CRef<CUser_field> field(new CUser_field()); field->SetLabel().SetStr(label); field->SetData().SetStr(value); SetData().push_back(field); return *this;}CUser_object& CUser_object::AddField(const string& label, int value){ CRef<CUser_field> field(new CUser_field()); field->SetLabel().SetStr(label); field->SetData().SetInt(value); SetData().push_back(field); return *this;}CUser_object& CUser_object::AddField(const string& label, double value){ CRef<CUser_field> field(new CUser_field()); field->SetLabel().SetStr(label); field->SetData().SetReal(value); SetData().push_back(field); return *this;}CUser_object& CUser_object::AddField(const string& label, bool value){ CRef<CUser_field> field(new CUser_field()); field->SetLabel().SetStr(label); field->SetData().SetBool(value); SetData().push_back(field); return *this;}CUser_object& CUser_object::AddField(const string& label, CUser_object& object){ CRef<CUser_field> field(new CUser_field()); field->SetLabel().SetStr(label); field->SetData().SetObject(object); SetData().push_back(field); return *this;}CUser_object& CUser_object::AddField(const string& label, const vector<string>& value){ CRef<CUser_field> field(new CUser_field()); field->SetLabel().SetStr(label); field->SetNum(value.size()); ITERATE (vector<string>, iter, value) { field->SetData().SetStrs().push_back(*iter); } SetData().push_back(field); return *this;}CUser_object& CUser_object::AddField(const string& label, const vector<int>& value){ CRef<CUser_field> field(new CUser_field()); field->SetLabel().SetStr(label); field->SetNum(value.size()); ITERATE (vector<int>, iter, value) { field->SetData().SetInts().push_back(*iter); } SetData().push_back(field); return *this;}CUser_object& CUser_object::AddField(const string& label, const vector<double>& value){ CRef<CUser_field> field(new CUser_field()); field->SetLabel().SetStr(label); field->SetNum(value.size()); ITERATE (vector<double>, iter, value) { field->SetData().SetReals().push_back(*iter); } SetData().push_back(field); return *this;}CUser_object& CUser_object::AddField(const string& label, const list< CRef<CUser_object> >& objects){ CRef<CUser_field> field(new CUser_field()); field->SetLabel().SetStr(label); field->SetNum(objects.size());
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -