Main Page   Namespace List   Class Hierarchy   Alphabetical List   Compound List   File List   Compound Members   File Members  

Monomer.hh

Go to the documentation of this file.
00001 #ifndef MONOMER_HEADER
00002 #define MONOMER_HEADER
00003 
00004 // ==== HEADER Monomer.hh ====
00005 
00011 // 6-Aug-1999. Andras Aszodi
00012 
00013 // ==== STANDARD HEADERS ====
00014 
00015 #include <string.h>
00016 
00017 #ifdef _STANDARD_C_PLUS_PLUS
00018 #include <vector>
00019 using namespace std;
00020 #else
00021 #include <vector.h>
00022 #endif
00023 
00024 // ==== CLASSES ====
00025 
00026 namespace RazorBack {
00027 
00033 class Monomer_
00034 {
00035     // subclass
00036     // even more hidden methods
00037     public:
00038             
00043     class Abbrev_
00044     {
00045         friend class Monomer_;
00046         
00047         private:
00048                 
00049         char Code1; 
00050         char Code3[4];  
00051         
00052         // methods
00053         public:
00054                 
00059         explicit Abbrev_(char C='X', const char* Ccc="Xxx")
00060         {
00061             set_codes(C, Ccc);
00062         }
00063         
00065         char code_1() const { return Code1; }
00066         const char* code_3() const { return Code3; }
00067         
00068         // hidden methods
00069         protected:
00070                 
00075         void set_codes(char C, const char* Ccc)
00076         {
00077             Code1=C;
00078             memset(Code3, 0, 4);    // paranoid...
00079             strncpy(Code3, Ccc, 3); // only first 3 chars from Ccc
00080         }
00081     };
00082     // END OF SUBCLASS Abbrev_
00083     
00084     // typedefs
00085     public:
00086             
00100     enum Type_ { UNKNOWN=0, USER=1, PROT=2, DNA=4, RNA=8, NUCL=12 };
00101     
00102     private:
00103             
00104     vector<Abbrev_> Alphabet;   
00105     Type_ Mtype;        
00106     
00107     // data
00108     public:
00109             
00111     typedef vector<Abbrev_>::const_iterator Aciter_;
00112     
00113         // ctors
00114     
00119     explicit Monomer_(int Mt=PROT)
00120     {
00121         if (Mt==UNKNOWN || Mt==USER)    // Mt was illegal
00122             Mt=PROT;
00123         set_alphabet(Mt);
00124     }
00125     
00130     explicit Monomer_(const char* Codes)
00131     {
00132         set_alphabet(Codes);
00133     }
00134     
00136     
00142     void set_alphabet(int Mt);
00143     
00153     void set_alphabet(const char* Codes);
00154     
00156     const vector<Abbrev_>& alphabet() const { return Alphabet; }
00157     
00159     Type_ type() const { return Mtype; }
00160     
00167     bool operator==(const Monomer_& M) const;
00168     bool operator!=(const Monomer_& M) const { return !(*this==M); }
00169     
00175     bool contains(const Monomer_& M, bool Nocase) const;
00176     
00185     Aciter_ find(char C, bool Nocase=false) const;
00186     Aciter_ find(const char* Ccc, bool Nocase=false) const;
00187     
00193     bool is_legal(char C, bool Nocase=false) const
00194     {
00195         return (Alphabet.end()!=find(C, Nocase));
00196     }
00197     bool is_legal(const char* Ccc, bool Nocase=false) const
00198     {
00199         return (Alphabet.end()!=find(Ccc, Nocase));
00200     }
00201     
00208     const char* one_2_three(char C, bool Nocase=false) const
00209     {
00210         Aciter_ Ai=find(C, Nocase);
00211         return (Ai!=Alphabet.end())? Ai->code_3(): NULL;
00212     }
00213     
00219     char three_2_one(const char* Ccc, bool Nocase=false) const
00220     {
00221         Aciter_ Ai=find(Ccc, Nocase);
00222         return (Ai!=Alphabet.end())? Ai->code_1(): '\0';
00223     }
00224     
00225 };
00226 // END OF CLASS Monomer_
00227 
00228 } // RazorBack
00229 
00230 // ==== END OF HEADER Monomer.hh ====
00231 
00232 #endif      // MONOMER_HEADER

Generated at Wed Aug 21 09:33:42 2002 for The Razorback C++ Library: Bioinformatics by doxygen1.2.6 written by Dimitri van Heesch, © 1997-2001