SamHeaderRecord.h
/*
* Copyright (C) 2010 Regents of the University of Michigan
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
#ifndef __SAMHEADER_RECORD_H__
#define __SAMHEADER_RECORD_H__
#include "StringArray.h"
#include "StringHash.h"
#include "SamHeaderTag.h"
/// This class encapsulates the tag value pairs contained with a SAM Header
/// line with accessors for getting and setting the tags within this header.
class SamHeaderRecord
{
public:
/// Specifies the Type for the sam header record (line).
enum SamHeaderRecordType {
HD, ///< Header
SQ, ///< Sequence Dictionary
RG, ///< Read Group
PG ///< Program
};
/// Constructor
SamHeaderRecord();
/// Destructor
virtual ~SamHeaderRecord();
/// Return a pointer to a newly created header record of the appropriate type
/// that is a copy of this record. The newly created record will not be
/// deleted by this class and it is the responsibility of the calling method
/// to handle the deletion.
/// Returns NULL on failure to copy.
virtual SamHeaderRecord* createCopy() const = 0;
/// Set the fields from the passed in line.
/// Return true if successfully set.
bool setFields(const StringArray& tokens);
/// Check to see if the record is valid.
bool isValid();
/// Return the value associated with the specified tag. Returns "" if it
/// is not set.
const char* getTagValue(const char* tag) const;
/// Set the value of the specified tag to the specified value, deletes
/// the tag when value is NULL.
/// Returns whether or not it was successful, fails if tag is the key tag
/// and the key tag already exists.
bool setTag(const char* tag, const char* value);
/// Reset this header record to an empty state with no tags.
void reset();
/// Appends the string representation of this header record
/// to the passed in string.
bool appendString(std::string& header);
/// Add the key tag with the specified value (not for HD headers).
bool addKey(const char* value);
/// Get the value associated with the key tag. Returns "" if it is not set.
const char* getKeyValue() const;
/// This record is active (true) if there is at least one tag set.
bool isActiveHeaderRecord();
/// Return the type of this header record (HD, SQ, RG, or PG) as a string.
const char* getTypeString();
/// Return the type of this header record (HD, SQ, RG, or PG) as an enum.
SamHeaderRecordType getType();
protected:
void addRequiredTag(const char* requiredTag);
// Copy this record into the specified new one.
virtual void internalCopy(SamHeaderRecord& newRec) const;
// The type for this header record.
std::string myTypeString;
// The type for this header record.
SamHeaderRecordType myType;
// The TAG name that is the key for this record
// Only applicable if more than one of this type
// of record is allowed.
std::string myKeyTag;
private:
SamHeaderRecord(const SamHeaderRecord& samHeaderRecord);
SamHeaderRecord& operator=(const SamHeaderRecord& samHeaderRecord);
// hash from tag name to index into the tag values vector.
StringIntHash myTagHash;
std::vector<SamHeaderTag*> myTags;
// The tags that are required for this record.
std::vector<String> myRequiredTags;
int myNumActiveTags;
};
#endif
SamHeaderRecord
This class encapsulates the tag value pairs contained with a SAM Header line with accessors for getti...
Definition: SamHeaderRecord.h:28
SamHeaderRecord::getKeyValue
const char * getKeyValue() const
Get the value associated with the key tag. Returns "" if it is not set.
Definition: SamHeaderRecord.cpp:284
SamHeaderRecord::getTagValue
const char * getTagValue(const char *tag) const
Return the value associated with the specified tag.
Definition: SamHeaderRecord.cpp:100
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::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::~SamHeaderRecord
virtual ~SamHeaderRecord()
Destructor.
Definition: SamHeaderRecord.cpp:30
SamHeaderRecord::isValid
bool isValid()
Check to see if the record is valid.
Definition: SamHeaderRecord.cpp:78
SamHeaderRecord::setFields
bool setFields(const StringArray &tokens)
Set the fields from the passed in line.
Definition: SamHeaderRecord.cpp:38
SamHeaderRecord::isActiveHeaderRecord
bool isActiveHeaderRecord()
This record is active (true) if there is at least one tag set.
Definition: SamHeaderRecord.cpp:301
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::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::addKey
bool addKey(const char *value)
Add the key tag with the specified value (not for HD headers).
Definition: SamHeaderRecord.cpp:273
SamHeaderRecord::SamHeaderRecordType
SamHeaderRecordType
Specifies the Type for the sam header record (line).
Definition: SamHeaderRecord.h:31
SamHeaderRecord::HD
@ HD
Header.
Definition: SamHeaderRecord.h:32
SamHeaderRecord::SQ
@ SQ
Sequence Dictionary.
Definition: SamHeaderRecord.h:33
SamHeaderRecord::PG
@ PG
Program.
Definition: SamHeaderRecord.h:35
SamHeaderRecord::RG
@ RG
Read Group.
Definition: SamHeaderRecord.h:34
SamHeaderRecord::SamHeaderRecord
SamHeaderRecord()
Constructor.
Definition: SamHeaderRecord.cpp:21
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:24
StringIntHash
Definition: StringHash.h:194