core/indigo-core/molecule/idt_alias.h (118 lines of code) (raw):

#ifndef __idt_alias__ #define __idt_alias__ #ifdef _MSC_VER #pragma warning(push) #pragma warning(disable : 4251) #endif #include "base_cpp/exception.h" #include <string> namespace indigo { enum class IdtModification { FIVE_PRIME_END, INTERNAL, THREE_PRIME_END }; class DLLEXPORT IdtAlias { public: DECL_ERROR; IdtAlias(){}; IdtAlias(const std::string& base) : _base(base), _has_modifications(false) { if (_base.size() > 0) { _five_prime_end = "5" + base; _internal = "i" + base; _three_prime_end = "3" + base; } }; IdtAlias(const std::string& base, const std::string& five_prime_end, const std::string& internal, const std::string& three_prime_end) : _base(base), _five_prime_end(five_prime_end), _internal(internal), _three_prime_end(three_prime_end), _has_modifications(true){}; inline void setModifications(const std::string& five_prime_end, const std::string& internal, const std::string& three_prime_end) { _five_prime_end = five_prime_end; _internal = internal; _three_prime_end = three_prime_end; _has_modifications = true; }; inline void setModification(IdtModification modification, const std::string& alias) { switch (modification) { case IdtModification::FIVE_PRIME_END: _five_prime_end = alias; break; case IdtModification::INTERNAL: _internal = alias; break; case IdtModification::THREE_PRIME_END: _three_prime_end = alias; break; }; _has_modifications = true; }; inline bool hasModification(IdtModification modification) const { switch (modification) { case IdtModification::FIVE_PRIME_END: return hasFivePrimeEnd(); case IdtModification::INTERNAL: return hasInternal(); case IdtModification::THREE_PRIME_END: return hasThreePrimeEnd(); }; return false; } inline bool hasFivePrimeEnd() const { return _five_prime_end.size() != 0; } inline bool hasInternal() const { return _internal.size() != 0; } inline bool hasThreePrimeEnd() const { return _three_prime_end.size() != 0; } const std::string& getModification(IdtModification modification) const; const std::string& getFivePrimeEnd() const; const std::string& getInternal() const; const std::string& getThreePrimeEnd() const; const std::string& getBase() const { return _base; }; inline static std::string IdtModificationToString(IdtModification mod) { switch (mod) { case IdtModification::FIVE_PRIME_END: return "five-prime end"; case IdtModification::INTERNAL: return "internal"; case IdtModification::THREE_PRIME_END: return "three-prime end"; }; return "unknown modification"; }; static std::string getBaseForMod(const std::string& alias); inline bool hasModifications() { return _has_modifications; } private: std::string _base; std::string _five_prime_end; std::string _internal; std::string _three_prime_end; bool _has_modifications; }; } #ifdef _MSC_VER #pragma warning(pop) #endif #endif