From e0b8818d20e81b39a6dd510b51f97d673b14fe06 Mon Sep 17 00:00:00 2001 From: Marco Biasini <marco.biasini@unibas.ch> Date: Tue, 19 Oct 2010 18:04:26 +0200 Subject: [PATCH] move method definitions of ResNum into header and make it smaller --- modules/mol/base/src/CMakeLists.txt | 1 - modules/mol/base/src/residue_prop.cc | 95 ---------------------- modules/mol/base/src/residue_prop.hh | 114 +++++++++++++++++++++------ 3 files changed, 89 insertions(+), 121 deletions(-) delete mode 100644 modules/mol/base/src/residue_prop.cc diff --git a/modules/mol/base/src/CMakeLists.txt b/modules/mol/base/src/CMakeLists.txt index 6b2967cc0..b83c69420 100644 --- a/modules/mol/base/src/CMakeLists.txt +++ b/modules/mol/base/src/CMakeLists.txt @@ -26,7 +26,6 @@ query_error.cc query_state.cc residue_base.cc residue_handle.cc -residue_prop.cc residue_view.cc surface_builder.cc surface_handle.cc diff --git a/modules/mol/base/src/residue_prop.cc b/modules/mol/base/src/residue_prop.cc deleted file mode 100644 index 3712bfe0b..000000000 --- a/modules/mol/base/src/residue_prop.cc +++ /dev/null @@ -1,95 +0,0 @@ -//------------------------------------------------------------------------------ -// This file is part of the OpenStructure project <www.openstructure.org> -// -// Copyright (C) 2008-2010 by the OpenStructure authors -// -// This library is free software; you can redistribute it and/or modify it under -// the terms of the GNU Lesser General Public License as published by the Free -// Software Foundation; either version 3.0 of the License, or (at your option) -// any later version. -// This library is distributed in the hope that it will be useful, but WITHOUT -// ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS -// FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more -// details. -// -// You should have received a copy of the GNU Lesser General Public License -// along with this library; if not, write to the Free Software Foundation, Inc., -// 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA -//------------------------------------------------------------------------------ -#include "residue_prop.hh" -#include <boost/format.hpp> - -namespace ost { namespace mol { - -ResNum::ResNum(int n): - num_(n), alt_('\0') -{} - -ResNum::ResNum(int n, char a): - num_(n), alt_(a) -{} - -bool ResNum::operator==(const ResNum& r) const -{ - return num_==r.num_ && alt_==r.alt_; -} - -bool ResNum::operator<(const ResNum& r) const -{ - return num_==r.num_ ? alt_<r.alt_ : num_<r.num_; -} - -int ResNum::operator+=(int i) -{ - num_+=i; - return num_; -} - -int ResNum::operator-=(int i) -{ - num_-=i; - return num_; -} - -int ResNum::operator+=(const ResNum& r) -{ - num_+=r.num_; - return num_; -} - -int ResNum::operator-=(const ResNum& r) -{ - num_-=r.num_; - return num_; -} - -ResNum& ResNum::operator++() -{ - ++num_; - return *this; -} - -ResNum& ResNum::operator--() -{ - --num_; - return *this; -} - -ResNum ResNum::NextInsertionCode() const -{ - char alt= alt_=='\0' ? 'a' : alt_+1; - ResNum nrvo(num_,alt); - return nrvo; -} - -String ResNum::AsString() const { - return str(boost::format("%d%s") % num_ % (alt_==0 ? "" : String(1, alt_))); -} - -std::ostream& operator<<(std::ostream& os, const ResNum& n) -{ - return os << n.AsString(); -} - - -}} // ns diff --git a/modules/mol/base/src/residue_prop.hh b/modules/mol/base/src/residue_prop.hh index 2bb92b3da..001660fa0 100644 --- a/modules/mol/base/src/residue_prop.hh +++ b/modules/mol/base/src/residue_prop.hh @@ -25,48 +25,112 @@ namespace ost { namespace mol { -/* - -*/ -class DLLEXPORT_OST_MOL ResNum: private + +class DLLEXPORT ResNum: private boost::additive<ResNum, int, boost::totally_ordered<ResNum, boost::totally_ordered<ResNum, int, boost::unit_steppable<ResNum> > > > { public: - ResNum(int num); // no explicit on purpose - ResNum(int num, char alt); - - bool operator==(const ResNum&) const; - bool operator<(const ResNum&) const; - int operator+=(int); - int operator-=(int); - int operator+=(const ResNum&); - int operator-=(const ResNum&); - ResNum& operator++(); - ResNum& operator--(); - - ResNum NextInsertionCode() const; - - int GetNum() const {return num_;} - char GetInsCode() const {return alt_;} + ResNum(int n): + num_(n), alt_('\0') + { } + + ResNum(int n, char a): + num_(n), alt_(a) + {} + + bool operator==(const ResNum& r) const + { + return num_==r.num_ && alt_==r.alt_; + } + + bool operator<(const ResNum& r) const + { + return num_==r.num_ ? alt_<r.alt_ : num_<r.num_; + } + + int operator+=(int i) + { + num_+=i; + return num_; + } + + int operator-=(int i) + { + num_-=i; + return num_; + } + + int operator+=(const ResNum& r) + { + num_+=r.num_; + return num_; + } + + int operator-=(const ResNum& r) + { + num_-=r.num_; + return num_; + } + + ResNum& operator++() + { + ++num_; + return *this; + } + + ResNum& operator--() + { + --num_; + return *this; + } + + ResNum NextInsertionCode() const + { + char alt= alt_=='\0' ? 'a' : alt_+1; + ResNum nrvo(num_,alt); + return nrvo; + } /// \brief get residue number as String /// /// The returned String consists of both the numeric residue sequence number /// and the insertion code. If the insertion code is not defined, i.e. is /// equal to the null character, only the residue sequence number is returned. - String AsString() const; + inline String AsString() const; + + int GetNum() const { return num_; } + + void SetNum(int num) { num_=num; } + + void SetInsCode(char ins_code) { alt_=ins_code; } + + char GetInsCode() const { return alt_; } + private: - int num_; - char alt_; + int num_ : 24; + int alt_ : 8; }; -DLLEXPORT_OST_MOL std::ostream& operator<<(std::ostream& os, const ResNum& n); - typedef String ResidueKey; +inline std::ostream& operator<<(std::ostream& os, const ResNum& n) +{ + return os << n.GetNum(); + if (n.GetInsCode()!='\0') + os << n.GetInsCode(); + return os; +} + +inline String ResNum::AsString() const +{ + std::stringstream ss; + ss << *this; + return ss.str(); +} + }} // ns -- GitLab