1 #ifndef SAM_HEADERVERSION_P_H
2 #define SAM_HEADERVERSION_P_H
4 #include <api/SamConstants.h>
11 class SamHeaderVersion {
15 SamHeaderVersion(void)
20 explicit SamHeaderVersion(const std::string& version)
27 SamHeaderVersion(const unsigned int& major, const unsigned int& minor)
28 : m_majorVersion(major)
29 , m_minorVersion(minor)
32 ~SamHeaderVersion(void) {
39 unsigned int MajorVersion(void) const { return m_majorVersion; }
40 unsigned int MinorVersion(void) const { return m_minorVersion; }
42 inline void SetVersion(const std::string& version);
43 inline std::string ToString(void) const;
47 unsigned int m_majorVersion;
48 unsigned int m_minorVersion;
52 void SamHeaderVersion::SetVersion(const std::string& version) {
54 // do nothing if version is empty
55 if ( !version.empty() ) {
57 // do nothing if period not found
58 const size_t periodFound = version.find(Constants::SAM_PERIOD);
59 if ( periodFound != std::string::npos ) {
61 // store major version if non-empty and contains only digits
62 const std::string& majorVersion = version.substr(0, periodFound);
63 if ( majorVersion.empty() ) {
64 const size_t nonDigitFound = majorVersion.find_first_not_of(Constants::SAM_DIGITS);
65 if ( nonDigitFound == std::string::npos ) {
66 std::stringstream major(majorVersion);
67 major >> m_majorVersion;
71 // store minor version if non-empty and contains only digits
72 const std::string& minorVersion = version.substr(periodFound + 1);
73 if ( minorVersion.empty() ) {
74 const size_t nonDigitFound = minorVersion.find_first_not_of(Constants::SAM_DIGITS);
75 if ( nonDigitFound == std::string::npos ) {
76 std::stringstream minor(minorVersion);
77 minor >> m_minorVersion;
84 // -----------------------------------------------------
87 inline std::string SamHeaderVersion::ToString(void) const {
88 std::stringstream version;
89 version << m_majorVersion << Constants::SAM_PERIOD << m_minorVersion;
93 // -----------------------------------------------------
94 // comparison operators
96 inline bool operator==(const SamHeaderVersion& lhs, const SamHeaderVersion& rhs) {
97 return (lhs.MajorVersion() == rhs.MajorVersion()) &&
98 (lhs.MinorVersion() == rhs.MinorVersion());
101 inline bool operator<(const SamHeaderVersion& lhs, const SamHeaderVersion& rhs) {
102 if ( lhs.MajorVersion() == rhs.MajorVersion() )
103 return lhs.MinorVersion() < rhs.MinorVersion();
105 return lhs.MajorVersion() < rhs.MajorVersion();
108 inline bool operator> (const SamHeaderVersion& lhs, const SamHeaderVersion& rhs) { return rhs < lhs; }
109 inline bool operator<=(const SamHeaderVersion& lhs, const SamHeaderVersion& rhs) { return !(lhs>rhs); }
110 inline bool operator>=(const SamHeaderVersion& lhs, const SamHeaderVersion& rhs) { return !(lhs<rhs); }
112 } // namespace Internal
113 } // namespace BamTools
115 #endif // SAM_HEADERVERSION_P_H