SamReferenceInfo.cpp
00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
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
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 bool addID)
00047 {
00048 if (referenceName == "*")
00049 return -1;
00050
00051 int id = myReferenceHash.Find(referenceName);
00052
00053 if (id >= 0)
00054 return myReferenceHash.Integer(id);
00055
00056 if(!addID)
00057 {
00058
00059 return(NO_REF_ID);
00060 }
00061
00062 id = myReferenceContigs.Length();
00063 myReferenceContigs.Push(referenceName);
00064 myReferenceLengths.Push(0);
00065 myReferenceHash.Add(referenceName, id);
00066
00067 return id;
00068 }
00069
00070
00071 int SamReferenceInfo::getReferenceID(const char* referenceName,
00072 bool addID)
00073 {
00074 String referenceNameString = referenceName;
00075
00076 return(getReferenceID(referenceNameString, addID));
00077 }
00078
00079
00080 const String & SamReferenceInfo::getReferenceLabel(int id) const
00081 {
00082 static String noname("*");
00083
00084 if ((id < 0) || (id >= myReferenceContigs.Length()))
00085 {
00086 return noname;
00087 }
00088
00089 return myReferenceContigs[id];
00090 }
00091
00092
00093 int32_t SamReferenceInfo::getNumEntries() const
00094 {
00095
00096 return(myReferenceLengths.Length());
00097 }
00098
00099
00100 const char* SamReferenceInfo::getReferenceName(int index) const
00101 {
00102 if((index >= 0) && (index < getNumEntries()))
00103 {
00104 return(myReferenceContigs[index].c_str());
00105 }
00106
00107
00108 return("");
00109 }
00110
00111
00112 int32_t SamReferenceInfo::getReferenceLength(int index) const
00113 {
00114 if((index >= 0) && (index < getNumEntries()))
00115 {
00116 return(myReferenceLengths[index]);
00117 }
00118
00119
00120 return(0);
00121 }
00122
00123 void SamReferenceInfo::clear()
00124 {
00125 myReferenceContigs.Clear();
00126 myReferenceHash.Clear();
00127 myReferenceLengths.Clear();
00128 }
00129
00130
00131 SamReferenceInfo& SamReferenceInfo::operator = (const SamReferenceInfo &newInfo)
00132 {
00133 clear();
00134
00135 myReferenceContigs = newInfo.myReferenceContigs;
00136 myReferenceHash = newInfo.myReferenceHash;
00137 myReferenceLengths = newInfo.myReferenceLengths;
00138 return(*this);
00139 }