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 {
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
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
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
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
00127 myReferenceContigs = newInfo.myReferenceContigs;
00128 myReferenceHash = newInfo.myReferenceHash;
00129 myReferenceLengths = newInfo.myReferenceLengths;
00130 return(*this);
00131 }