yat/omic/DnaComplementer.cc

Code
Comments
Other
Rev Date Author Line
3475 08 Mar 16 peter 1 // $Id$
3475 08 Mar 16 peter 2
4346 24 Apr 23 peter 3 /*
4346 24 Apr 23 peter 4   Copyright (C) 2016, 2018, 2021, 2023 Peter Johansson
4346 24 Apr 23 peter 5
4346 24 Apr 23 peter 6   This file is part of the yat library, https://dev.thep.lu.se/yat
4346 24 Apr 23 peter 7
4346 24 Apr 23 peter 8   The yat library is free software; you can redistribute it and/or
4346 24 Apr 23 peter 9   modify it under the terms of the GNU General Public License as
4346 24 Apr 23 peter 10   published by the Free Software Foundation; either version 3 of the
4346 24 Apr 23 peter 11   License, or (at your option) any later version.
4346 24 Apr 23 peter 12
4346 24 Apr 23 peter 13   The yat library is distributed in the hope that it will be useful,
4346 24 Apr 23 peter 14   but WITHOUT ANY WARRANTY; without even the implied warranty of
4346 24 Apr 23 peter 15   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
4346 24 Apr 23 peter 16   General Public License for more details.
4346 24 Apr 23 peter 17
4346 24 Apr 23 peter 18   You should have received a copy of the GNU General Public License
4346 24 Apr 23 peter 19   along with yat. If not, see <https://www.gnu.org/licenses/>.
4346 24 Apr 23 peter 20 */
4346 24 Apr 23 peter 21
3475 08 Mar 16 peter 22 #include <config.h>
3475 08 Mar 16 peter 23
3475 08 Mar 16 peter 24 #include "DnaComplementer.h"
3475 08 Mar 16 peter 25 #include "DNA.h"
3475 08 Mar 16 peter 26
3475 08 Mar 16 peter 27 #include <cassert>
3475 08 Mar 16 peter 28 #include <cctype>
3475 08 Mar 16 peter 29 #include <sstream>
3475 08 Mar 16 peter 30 #include <stdexcept>
3475 08 Mar 16 peter 31 #include <string>
3475 08 Mar 16 peter 32
3475 08 Mar 16 peter 33 namespace theplu {
3475 08 Mar 16 peter 34 namespace yat {
3475 08 Mar 16 peter 35 namespace omic {
3475 08 Mar 16 peter 36
3475 08 Mar 16 peter 37   char DnaComplementer::operator()(char x) const
3475 08 Mar 16 peter 38   {
3475 08 Mar 16 peter 39     try {
3475 08 Mar 16 peter 40       if (std::isupper(x))
3475 08 Mar 16 peter 41         return yat::omic::DNA(x).complement().get();
3475 08 Mar 16 peter 42       return std::tolower(yat::omic::DNA(std::toupper(x)).complement().get());
3475 08 Mar 16 peter 43     }
3475 08 Mar 16 peter 44     catch (std::invalid_argument& e) {
3475 08 Mar 16 peter 45       std::stringstream ss;
3475 08 Mar 16 peter 46       ss << e.what() << "\nDnaComplementer: " << x;
4060 10 May 21 peter 47       std::throw_with_nested(std::invalid_argument(ss.str()));
3475 08 Mar 16 peter 48     }
3475 08 Mar 16 peter 49     assert(0 && "we should not end up here");
3475 08 Mar 16 peter 50     return 0;
3475 08 Mar 16 peter 51   }
3475 08 Mar 16 peter 52
3475 08 Mar 16 peter 53 }}} // of namespace theplu, yat, and omic