SamReferenceInfo.cpp

00001 /*
00002  *  Copyright (C) 2010  Regents of the University of Michigan
00003  *
00004  *   This program is free software: you can redistribute it and/or modify
00005  *   it under the terms of the GNU General Public License as published by
00006  *   the Free Software Foundation, either version 3 of the License, or
00007  *   (at your option) any later version.
00008  *
00009  *   This program is distributed in the hope that it will be useful,
00010  *   but WITHOUT ANY WARRANTY; without even the implied warranty of
00011  *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
00012  *   GNU General Public License for more details.
00013  *
00014  *   You should have received a copy of the GNU General Public License
00015  *   along with this program.  If not, see <http://www.gnu.org/licenses/>.
00016  */
00017 
00018 #include "SamReferenceInfo.h"
00019 
00020 SamReferenceInfo::SamReferenceInfo()
00021     : myReferenceContigs(),
00022       myReferenceHash(),
00023       myReferenceLengths()
00024 {
00025     clear();
00026 }
00027 
00028 
00029 SamReferenceInfo::~SamReferenceInfo()
00030 {
00031     clear();
00032 }
00033 
00034 // Add reference sequence name and reference sequence length.
00035 void SamReferenceInfo::add(const char* referenceSequenceName, 
00036                            int32_t referenceSequenceLength)
00037 {
00038         myReferenceHash.Add(referenceSequenceName, 
00039                             myReferenceContigs.Length());
00040         myReferenceContigs.Push(referenceSequenceName);
00041         myReferenceLengths.Push(referenceSequenceLength);
00042 }
00043 
00044 
00045 int SamReferenceInfo::getReferenceID(const String & referenceName)
00046 {
00047     if (referenceName == "*")
00048         return -1;
00049     
00050     int id = myReferenceHash.Find(referenceName);
00051 
00052     if (id >= 0)
00053         return myReferenceHash.Integer(id);
00054 
00055     id = myReferenceContigs.Length();
00056     myReferenceContigs.Push(referenceName);
00057     myReferenceLengths.Push(0);
00058     myReferenceHash.Add(referenceName, id);
00059 
00060     return id;
00061 }
00062 
00063 
00064 int SamReferenceInfo::getReferenceID(const char* referenceName)
00065 {
00066     String referenceNameString = referenceName;
00067 
00068     return(getReferenceID(referenceNameString));
00069 }
00070 
00071 
00072 const String & SamReferenceInfo::getReferenceLabel(int id) const
00073 {
00074     static String noname("*");
00075 
00076     if ((id < 0) || (id >= myReferenceContigs.Length()))
00077     {
00078         return noname;
00079     }
00080 
00081     return myReferenceContigs[id];
00082 }
00083 
00084 
00085 int32_t SamReferenceInfo::getNumEntries() const
00086 {
00087     // The number of entries is the size of referenceLengths.
00088     return(myReferenceLengths.Length());
00089 }
00090 
00091 
00092 const char* SamReferenceInfo::getReferenceName(int index) const
00093 {
00094     if((index >= 0) && (index < getNumEntries()))
00095     {
00096         return(myReferenceContigs[index].c_str());
00097     }
00098     
00099     // Out of range, return blank
00100     return("");
00101 }
00102    
00103 
00104 int32_t SamReferenceInfo::getReferenceLength(int index) const
00105 {
00106     if((index >= 0) && (index < getNumEntries()))
00107     {
00108         return(myReferenceLengths[index]);
00109     }
00110     
00111     // Out of bounds, return 0
00112     return(0);
00113 }
00114 
00115 void SamReferenceInfo::clear()
00116 {
00117     myReferenceContigs.Clear();
00118     myReferenceHash.Clear();
00119     myReferenceLengths.Clear();
00120 }
00121 
00122 
00123 SamReferenceInfo& SamReferenceInfo::operator = (const SamReferenceInfo &newInfo)
00124 {
00125     clear();
00126     // Copy Reference contigs, hash, lengths.
00127     myReferenceContigs = newInfo.myReferenceContigs;
00128     myReferenceHash = newInfo.myReferenceHash;
00129     myReferenceLengths = newInfo.myReferenceLengths;
00130     return(*this);
00131 }
Generated on Wed Nov 17 15:38:27 2010 for StatGen Software by  doxygen 1.6.3