1 // ***************************************************************************
2 // SamProgramChain.h (c) 2011 Derek Barnett
3 // Marth Lab, Department of Biology, Boston College
4 // ---------------------------------------------------------------------------
5 // Last modified: 10 October 2011 (DB)
6 // ---------------------------------------------------------------------------
7 // Provides methods for operating on a SamProgram record "chain"
8 // ***************************************************************************
10 #ifndef SAM_PROGRAMCHAIN_H
11 #define SAM_PROGRAMCHAIN_H
13 #include "api/api_global.h"
14 #include "api/SamProgram.h"
20 // chain is *NOT* sorted in any order
21 // use First()/Last() to retrieve oldest/newest programs, respectively
22 typedef std::vector<SamProgram> SamProgramContainer;
23 typedef SamProgramContainer::iterator SamProgramIterator;
24 typedef SamProgramContainer::const_iterator SamProgramConstIterator;
26 class API_EXPORT SamProgramChain {
30 SamProgramChain(void);
31 SamProgramChain(const SamProgramChain& other);
32 ~SamProgramChain(void);
34 // query/modify program data
36 // appends a program record to the chain
37 void Add(SamProgram& program);
38 void Add(std::vector<SamProgram>& programs);
40 // clears all read group entries
43 // returns true if chain contains this program record (matches on ID)
44 bool Contains(const SamProgram& program) const;
45 bool Contains(const std::string& programId) const;
47 // returns the first (oldest) program in the chain
48 SamProgram& First(void);
49 const SamProgram& First(void) const;
51 // returns true if chain is empty
52 bool IsEmpty(void) const;
54 // returns last (most recent) program in the chain
55 SamProgram& Last(void);
56 const SamProgram& Last(void) const;
58 // returns number of program records in the chain
61 // retrieves a modifiable reference to the SamProgram object associated with this ID
62 SamProgram& operator[](const std::string& programId);
64 // retrieve STL-compatible iterators
66 SamProgramIterator Begin(void); // returns iterator to begin()
67 SamProgramConstIterator Begin(void) const; // returns const_iterator to begin()
68 SamProgramConstIterator ConstBegin(void) const; // returns const_iterator to begin()
69 SamProgramIterator End(void); // returns iterator to end()
70 SamProgramConstIterator End(void) const; // returns const_iterator to end()
71 SamProgramConstIterator ConstEnd(void) const; // returns const_iterator to end()
75 int IndexOf(const std::string& programId) const;
76 const std::string NextIdFor(const std::string& programId) const;
80 SamProgramContainer m_data;
83 } // namespace BamTools
85 #endif // SAM_PROGRAMCHAIN_H