libStatGen Software  1
SamHeaderRecord.h
1 /*
2  * Copyright (C) 2010 Regents of the University of Michigan
3  *
4  * This program is free software: you can redistribute it and/or modify
5  * it under the terms of the GNU General Public License as published by
6  * the Free Software Foundation, either version 3 of the License, or
7  * (at your option) any later version.
8  *
9  * This program is distributed in the hope that it will be useful,
10  * but WITHOUT ANY WARRANTY; without even the implied warranty of
11  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12  * GNU General Public License for more details.
13  *
14  * You should have received a copy of the GNU General Public License
15  * along with this program. If not, see <http://www.gnu.org/licenses/>.
16  */
17 
18 #ifndef __SAMHEADER_RECORD_H__
19 #define __SAMHEADER_RECORD_H__
20 
21 #include "StringArray.h"
22 #include "StringHash.h"
23 #include "SamHeaderTag.h"
24 
25 /// This class encapsulates the tag value pairs contained with a SAM Header
26 /// line with accessors for getting and setting the tags within this header.
28 {
29 public:
30  /// Specifies the Type for the sam header record (line).
32  HD, ///< Header
33  SQ, ///< Sequence Dictionary
34  RG, ///< Read Group
35  PG ///< Program
36  };
37 
38  /// Constructor
40 
41  /// Destructor
42  virtual ~SamHeaderRecord();
43 
44  /// Return a pointer to a newly created header record of the appropriate type
45  /// that is a copy of this record. The newly created record will not be
46  /// deleted by this class and it is the responsibility of the calling method
47  /// to handle the deletion.
48  /// Returns NULL on failure to copy.
49  virtual SamHeaderRecord* createCopy() const = 0;
50 
51  /// Set the fields from the passed in line.
52  /// Return true if successfully set.
53  bool setFields(const StringArray& tokens);
54 
55  /// Check to see if the record is valid.
56  bool isValid();
57 
58  /// Return the value associated with the specified tag. Returns "" if it
59  /// is not set.
60  const char* getTagValue(const char* tag) const;
61 
62  /// Set the value of the specified tag to the specified value, deletes
63  /// the tag when value is NULL.
64  /// Returns whether or not it was successful, fails if tag is the key tag
65  /// and the key tag already exists.
66  bool setTag(const char* tag, const char* value);
67 
68  /// Reset this header record to an empty state with no tags.
69  void reset();
70 
71  /// Appends the string representation of this header record
72  /// to the passed in string.
73  bool appendString(std::string& header);
74 
75  /// Add the key tag with the specified value (not for HD headers).
76  bool addKey(const char* value);
77 
78  /// Get the value associated with the key tag. Returns "" if it is not set.
79  const char* getKeyValue() const;
80 
81  /// This record is active (true) if there is at least one tag set.
82  bool isActiveHeaderRecord();
83 
84  /// Return the type of this header record (HD, SQ, RG, or PG) as a string.
85  const char* getTypeString();
86 
87  /// Return the type of this header record (HD, SQ, RG, or PG) as an enum.
89 
90 protected:
91  void addRequiredTag(const char* requiredTag);
92 
93  // Copy this record into the specified new one.
94  virtual void internalCopy(SamHeaderRecord& newRec) const;
95 
96  // The type for this header record.
97  std::string myTypeString;
98 
99  // The type for this header record.
100  SamHeaderRecordType myType;
101 
102  // The TAG name that is the key for this record
103  // Only applicable if more than one of this type
104  // of record is allowed.
105  std::string myKeyTag;
106 
107 private:
108  SamHeaderRecord(const SamHeaderRecord& samHeaderRecord);
109  SamHeaderRecord& operator=(const SamHeaderRecord& samHeaderRecord);
110 
111  // hash from tag name to index into the tag values vector.
112  StringIntHash myTagHash;
113  std::vector<SamHeaderTag*> myTags;
114 
115  // The tags that are required for this record.
116  std::vector<String> myRequiredTags;
117 
118  int myNumActiveTags;
119 };
120 
121 #endif
SamHeaderRecord::SamHeaderRecord
SamHeaderRecord()
Constructor.
Definition: SamHeaderRecord.cpp:21
SamHeaderRecord::isActiveHeaderRecord
bool isActiveHeaderRecord()
This record is active (true) if there is at least one tag set.
Definition: SamHeaderRecord.cpp:301
SamHeaderRecord::getTagValue
const char * getTagValue(const char *tag) const
Return the value associated with the specified tag.
Definition: SamHeaderRecord.cpp:100
SamHeaderRecord::~SamHeaderRecord
virtual ~SamHeaderRecord()
Destructor.
Definition: SamHeaderRecord.cpp:30
SamHeaderRecord::PG
@ PG
Program.
Definition: SamHeaderRecord.h:35
SamHeaderRecord::getTypeString
const char * getTypeString()
Return the type of this header record (HD, SQ, RG, or PG) as a string.
Definition: SamHeaderRecord.cpp:308
SamHeaderRecord::SQ
@ SQ
Sequence Dictionary.
Definition: SamHeaderRecord.h:33
SamHeaderRecord::isValid
bool isValid()
Check to see if the record is valid.
Definition: SamHeaderRecord.cpp:78
SamHeaderRecord::HD
@ HD
Header.
Definition: SamHeaderRecord.h:32
SamHeaderRecord::setFields
bool setFields(const StringArray &tokens)
Set the fields from the passed in line.
Definition: SamHeaderRecord.cpp:38
SamHeaderRecord::RG
@ RG
Read Group.
Definition: SamHeaderRecord.h:34
SamHeaderRecord::getKeyValue
const char * getKeyValue() const
Get the value associated with the key tag. Returns "" if it is not set.
Definition: SamHeaderRecord.cpp:284
StringIntHash
Definition: StringHash.h:193
SamHeaderRecord::addKey
bool addKey(const char *value)
Add the key tag with the specified value (not for HD headers).
Definition: SamHeaderRecord.cpp:273
SamHeaderRecord::createCopy
virtual SamHeaderRecord * createCopy() const =0
Return a pointer to a newly created header record of the appropriate type that is a copy of this reco...
SamHeaderRecord::appendString
bool appendString(std::string &header)
Appends the string representation of this header record to the passed in string.
Definition: SamHeaderRecord.cpp:234
SamHeaderRecord::SamHeaderRecordType
SamHeaderRecordType
Specifies the Type for the sam header record (line).
Definition: SamHeaderRecord.h:31
SamHeaderRecord::reset
void reset()
Reset this header record to an empty state with no tags.
Definition: SamHeaderRecord.cpp:212
SamHeaderRecord::getType
SamHeaderRecordType getType()
Return the type of this header record (HD, SQ, RG, or PG) as an enum.
Definition: SamHeaderRecord.cpp:315
SamHeaderRecord
This class encapsulates the tag value pairs contained with a SAM Header line with accessors for getti...
Definition: SamHeaderRecord.h:27
SamHeaderRecord::setTag
bool setTag(const char *tag, const char *value)
Set the value of the specified tag to the specified value, deletes the tag when value is NULL.
Definition: SamHeaderRecord.cpp:119
StringArray
Definition: StringArray.h:23