Skip to content
Snippets Groups Projects
Commit cf0bc6a1 authored by Studer Gabriel's avatar Studer Gabriel
Browse files

mmcif writer: resolve linking errors for certain usages of ChemClass

Assignment of ChemClass values happens inside the ChemClass definition
in the header file. Let's say you're using something like:
ChemClass::WATER. If this is resolved at compile time, you won't have
any problem. If not, the linker searches for it in the mol shared object
file. BUT ITS NOT THERE. The hope is that defining the types as an
enum inside the ChemClass definition helps.
parent d632863b
Branches
Tags
No related merge requests found
...@@ -26,68 +26,60 @@ namespace ost { namespace mol { ...@@ -26,68 +26,60 @@ namespace ost { namespace mol {
struct DLLEXPORT ChemClass { struct DLLEXPORT ChemClass {
static constexpr char PEPTIDE_LINKING ='P'; typedef enum {
static constexpr char D_PEPTIDE_LINKING ='D'; PEPTIDE_LINKING ='P',
static constexpr char L_PEPTIDE_LINKING ='L'; D_PEPTIDE_LINKING ='D',
static constexpr char RNA_LINKING ='R'; L_PEPTIDE_LINKING ='L',
static constexpr char DNA_LINKING ='S'; RNA_LINKING ='R',
static constexpr char NON_POLYMER ='N'; DNA_LINKING ='S',
static constexpr char L_SACCHARIDE ='X'; NON_POLYMER ='N',
static constexpr char D_SACCHARIDE ='Y'; L_SACCHARIDE ='X',
static constexpr char SACCHARIDE ='Z'; D_SACCHARIDE ='Y',
static constexpr char WATER ='W'; SACCHARIDE ='Z',
static constexpr char UNKNOWN ='U'; WATER ='W',
UNKNOWN ='U'
} Type;
// for backward compatibility to 1.1 and earlier explicit ChemClass(Type chem_class): chem_class_(chem_class) { }
static constexpr char PeptideLinking =PEPTIDE_LINKING;
static constexpr char DPeptideLinking =D_PEPTIDE_LINKING; explicit ChemClass(char type): chem_class_(Type(type)) { }
static constexpr char LPeptideLinking =L_PEPTIDE_LINKING;
static constexpr char RNALinking =RNA_LINKING; ChemClass(): chem_class_(UNKNOWN) { }
static constexpr char DNALinking =DNA_LINKING;
static constexpr char NonPolymer =NON_POLYMER;
static constexpr char LSaccharide =L_SACCHARIDE;
static constexpr char DSaccharide =D_SACCHARIDE;
static constexpr char Saccharide =SACCHARIDE;
static constexpr char Water =WATER;
static constexpr char Unknown =UNKNOWN;
explicit ChemClass(char chem_class)
: chem_class_(chem_class) {
}
ChemClass()
: chem_class_(UNKNOWN) {
}
bool operator==(const ChemClass& cc) const { bool operator==(const ChemClass& cc) const {
return cc.chem_class_==chem_class_; return cc.chem_class_ == chem_class_;
} }
bool operator!=(const ChemClass& cc) const { bool operator!=(const ChemClass& cc) const {
return !this->operator==(cc); return !this->operator == (cc);
} }
bool IsPeptideLinking() const { bool IsPeptideLinking() const {
return (chem_class_==ChemClass::PEPTIDE_LINKING || return (chem_class_ == PEPTIDE_LINKING ||
chem_class_==ChemClass::D_PEPTIDE_LINKING || chem_class_ == D_PEPTIDE_LINKING ||
chem_class_==ChemClass::L_PEPTIDE_LINKING); chem_class_ == L_PEPTIDE_LINKING);
} }
bool IsNucleotideLinking() const { bool IsNucleotideLinking() const {
return (chem_class_==ChemClass::DNA_LINKING || return (chem_class_ == DNA_LINKING ||
chem_class_==ChemClass::RNA_LINKING); chem_class_ == RNA_LINKING);
} }
bool IsWater() const { return chem_class_==ChemClass::WATER; } bool IsWater() const {
return chem_class_ == WATER;
}
operator char() const { operator char() const {
return chem_class_; return chem_class_;
} }
bool IsSaccharide() const { bool IsSaccharide() const {
return (chem_class_==ChemClass::SACCHARIDE || return (chem_class_ == SACCHARIDE ||
chem_class_==ChemClass::L_SACCHARIDE || chem_class_ == L_SACCHARIDE ||
chem_class_==ChemClass::D_SACCHARIDE); chem_class_ == D_SACCHARIDE);
} }
private: private:
char chem_class_; Type chem_class_;
}; };
}} // ns }} // ns
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment