Difference between revisions of "C++ Class: SamRecord"
Line 6: | Line 6: | ||
! Method Name !! Description | ! Method Name !! Description | ||
|- | |- | ||
− | | <code>void resetRecord()</code> | + | | <code>void SamRecord::resetRecord()</code> |
| Resets the record to be an empty record. This is not necessary when you are reading a Sam/Bam file, but if you are setting fields, it is a good idea to clean out a record before reusing it. Clearing it allows you to not have to set any empty fields. | | Resets the record to be an empty record. This is not necessary when you are reading a Sam/Bam file, but if you are setting fields, it is a good idea to clean out a record before reusing it. Clearing it allows you to not have to set any empty fields. | ||
|- | |- | ||
− | | <code>bool setReadName(const char* readName)</code> | + | | <code>bool SamRecord::setReadName(const char* readName)</code> |
| Sets QNAME to the passed in name. | | Sets QNAME to the passed in name. | ||
Returns true if successfully set, false if not. | Returns true if successfully set, false if not. | ||
|- | |- | ||
− | | <code>bool setFlag(int16_t flag)</code> | + | | <code>bool SamRecord::setFlag(int16_t flag)</code> |
| Sets the bitwise FLAG to the passed in value. | | Sets the bitwise FLAG to the passed in value. | ||
Returns true if successfully set, false if not. | Returns true if successfully set, false if not. | ||
|- | |- | ||
− | | <code>bool setReferenceName(SamFileHeader& header, const char* referenceName)</code> | + | | <code>bool SamRecord::setReferenceName(SamFileHeader& header, const char* referenceName)</code> |
| Sets the reference sequence name. The reference id is calculated using the header. | | Sets the reference sequence name. The reference id is calculated using the header. | ||
Returns true if successfully set, false if not. | Returns true if successfully set, false if not. | ||
|- | |- | ||
− | | <code>bool set1BasedPosition(int32_t position)</code> | + | | <code>bool SamRecord::set1BasedPosition(int32_t position)</code> |
| Sets the leftmost position. The value passed in is 1-based (SAM formatted). Internal processing handles switching between SAM/BAM formats when read/written. | | Sets the leftmost position. The value passed in is 1-based (SAM formatted). Internal processing handles switching between SAM/BAM formats when read/written. | ||
Returns true if successfully set, false if not. | Returns true if successfully set, false if not. | ||
|- | |- | ||
− | | <code>bool set0BasedPosition(int32_t position)</code> | + | | <code>bool SamRecord::set0BasedPosition(int32_t position)</code> |
| Sets the leftmost position. The value passed in is 0-based (BAM formatted). Internal processing handles switching between SAM/BAM formats when read/written. | | Sets the leftmost position. The value passed in is 0-based (BAM formatted). Internal processing handles switching between SAM/BAM formats when read/written. | ||
Returns true if successfully set, false if not. | Returns true if successfully set, false if not. | ||
|- | |- | ||
− | | <code>bool setMapQuality(int8_t mapQuality)</code> | + | | <code>bool SamRecord::setMapQuality(int8_t mapQuality)</code> |
| Sets the mapping quality. | | Sets the mapping quality. | ||
Returns true if successfully set, false if not. | Returns true if successfully set, false if not. | ||
|- | |- | ||
− | | <code>bool setCigar(const char* cigar)</code> | + | | <code>bool SamRecord::setCigar(const char* cigar)</code> |
| Sets the cigar string to the passed in CIGAR. This is a SAM formatted CIGAR string. Internal processing handles switching between SAM/BAM formats when read/written. | | Sets the cigar string to the passed in CIGAR. This is a SAM formatted CIGAR string. Internal processing handles switching between SAM/BAM formats when read/written. | ||
Returns true if successfully set, false if not. | Returns true if successfully set, false if not. | ||
|- | |- | ||
− | | <code>bool setMateReferenceName(SamFileHeader& header, const char* referenceName)</code> | + | | <code>bool SamRecord::setMateReferenceName(SamFileHeader& header, const char* referenceName)</code> |
| Sets the mate reference sequence name. The mate reference id is calculated using the header. | | Sets the mate reference sequence name. The mate reference id is calculated using the header. | ||
Returns true if successfully set, false if not. | Returns true if successfully set, false if not. | ||
|- | |- | ||
− | | <code>bool set1BasedMatePosition(int32_t matePosition)</code> | + | | <code>bool SamRecord::set1BasedMatePosition(int32_t matePosition)</code> |
| Sets the leftmost mate position. The value passed in is 1-based (SAM formatted). Internal processing handles switching between SAM/BAM formats when read/written. | | Sets the leftmost mate position. The value passed in is 1-based (SAM formatted). Internal processing handles switching between SAM/BAM formats when read/written. | ||
Returns true if successfully set, false if not. | Returns true if successfully set, false if not. | ||
|- | |- | ||
− | | <code>bool set0BasedMatePosition(int32_t matePosition)</code> | + | | <code>bool SamRecord::set0BasedMatePosition(int32_t matePosition)</code> |
| Sets the leftmost mate position. The value passed in is 0-based (BAM formatted). Internal processing handles switching between SAM/BAM formats when read/written. | | Sets the leftmost mate position. The value passed in is 0-based (BAM formatted). Internal processing handles switching between SAM/BAM formats when read/written. | ||
Returns true if successfully set, false if not. | Returns true if successfully set, false if not. | ||
|- | |- | ||
− | | <code>bool setInsertSize(int32_t insertSize)</code> | + | | <code>bool SamRecord::setInsertSize(int32_t insertSize)</code> |
| Sets the inferred insert size. | | Sets the inferred insert size. | ||
Returns true if successfully set, false if not. | Returns true if successfully set, false if not. | ||
|- | |- | ||
− | | <code>bool setSequence(const char* seq)</code> | + | | <code>bool SamRecord::setSequence(const char* seq)</code> |
| Sets the sequence string to the passed in string. This is a SAM formatted sequence string. Internal processing handles switching between SAM/BAM formats when read/written. | | Sets the sequence string to the passed in string. This is a SAM formatted sequence string. Internal processing handles switching between SAM/BAM formats when read/written. | ||
Returns true if successfully set, false if not. | Returns true if successfully set, false if not. | ||
|- | |- | ||
− | | <code>bool setQuality(const char* quality)</code> | + | | <code>bool SamRecord::setQuality(const char* quality)</code> |
| Sets the quality string to the passed in string. This is a SAM formatted quality string. Internal processing handles switching between SAM/BAM formats when read/written. | | Sets the quality string to the passed in string. This is a SAM formatted quality string. Internal processing handles switching between SAM/BAM formats when read/written. | ||
Returns true if successfully set, false if not. | Returns true if successfully set, false if not. | ||
|- | |- | ||
− | | <code>bool addTag(const char* tag, char vtype, const char* value)</code> | + | | <code>bool SamRecord::addTag(const char* tag, char vtype, const char* value)</code> |
| Adds a tag to the record with the specified tag, vtype, and value. Vtype can be SAM/BAM vtype. Internal processing handles switching between SAM/BAM vtypes when read/written. | | Adds a tag to the record with the specified tag, vtype, and value. Vtype can be SAM/BAM vtype. Internal processing handles switching between SAM/BAM vtypes when read/written. | ||
Returns true if successfully set, false if not. | Returns true if successfully set, false if not. | ||
Line 77: | Line 77: | ||
! Method Name !! Description | ! Method Name !! Description | ||
|- | |- | ||
− | | <code>bool isValid(SamFileHeader& header)</code> | + | | <code>bool SamRecord::isValid(SamFileHeader& header)</code> |
| Returns true if the record is valid. This performs validation steps. TODO: the method exists, but it does not yet perform any checks, so just returns true. | | Returns true if the record is valid. This performs validation steps. TODO: the method exists, but it does not yet perform any checks, so just returns true. | ||
|- | |- | ||
− | | <code>int32_t getBlockSize()</code> | + | | <code>int32_t SamRecord::getBlockSize()</code> |
| Returns the BAM block size of the record. | | Returns the BAM block size of the record. | ||
|- | |- | ||
− | | <code>const char* getReferenceName(SamFileHeader& header)</code> | + | | <code>const char* SamRecord::getReferenceName(SamFileHeader& header)</code> |
| Returns the reference sequence name (SAM format). | | Returns the reference sequence name (SAM format). | ||
|- | |- | ||
− | | <code>int32_t getReferenceID()</code> | + | | <code>int32_t SamRecord::getReferenceID()</code> |
| Returns the reference sequence ID (BAM format). | | Returns the reference sequence ID (BAM format). | ||
|- | |- | ||
− | | <code>int32_t get1BasedPosition()</code> | + | | <code>int32_t SamRecord::get1BasedPosition()</code> |
| Returns the 1-based (SAM formatted) leftmost position. | | Returns the 1-based (SAM formatted) leftmost position. | ||
|- | |- | ||
− | | <code>int32_t get0BasedPosition()</code> | + | | <code>int32_t SamRecord::get0BasedPosition()</code> |
| Returns the 0-based (BAM formatted) leftmost position. | | Returns the 0-based (BAM formatted) leftmost position. | ||
|- | |- | ||
− | | <code>int8_t getReadNameLength()</code> | + | | <code>int8_t SamRecord::getReadNameLength()</code> |
| Returns the length of the ReadName (QNAME). | | Returns the length of the ReadName (QNAME). | ||
|- | |- | ||
− | | <code>int8_t getMapQuality()</code> | + | | <code>int8_t SamRecord::getMapQuality()</code> |
| Returns the map quality. | | Returns the map quality. | ||
|- | |- | ||
− | | <code>int16_t getBin()</code> | + | | <code>int16_t SamRecord::getBin()</code> |
| Returns the BAM bin for the record. | | Returns the BAM bin for the record. | ||
|- | |- | ||
− | | <code>int16_t getCigarLength()</code> | + | | <code>int16_t SamRecord::getCigarLength()</code> |
| Returns the length of the CIGAR in BAM format. | | Returns the length of the CIGAR in BAM format. | ||
|- | |- | ||
− | | <code>int16_t getFlag()</code> | + | | <code>int16_t SamRecord::getFlag()</code> |
| Returns the flag. | | Returns the flag. | ||
|- | |- | ||
− | | <code>int32_t getReadLength()</code> | + | | <code>int32_t SamRecord::getReadLength()</code> |
| Returns the length of the read. | | Returns the length of the read. | ||
|- | |- | ||
− | | <code>const char* getMateReferenceName(SamFileHeader& header)</code> | + | | <code>const char* SamRecord::getMateReferenceName(SamFileHeader& header)</code> |
| Returns the mate reference sequence name (SAM format). Returns the mate reference sequence name even if it is the same as the reference sequence name. | | Returns the mate reference sequence name (SAM format). Returns the mate reference sequence name even if it is the same as the reference sequence name. | ||
|- | |- | ||
− | | <code>const char* getMateReferenceNameOrEqual(SamFileHeader& header)</code> | + | | <code>const char* SamRecord::getMateReferenceNameOrEqual(SamFileHeader& header)</code> |
| Returns the mate reference sequence name (SAM format). Returns the mate reference sequence name, unless it is the same as the reference sequence name, then an "=" is returned.. | | Returns the mate reference sequence name (SAM format). Returns the mate reference sequence name, unless it is the same as the reference sequence name, then an "=" is returned.. | ||
|- | |- | ||
− | | <code>int32_t getMateReferenceID()</code> | + | | <code>int32_t SamRecord::getMateReferenceID()</code> |
| Returns the mate reference sequence id (BAM format). | | Returns the mate reference sequence id (BAM format). | ||
|- | |- | ||
− | | <code>int32_t get1BasedMatePosition()</code> | + | | <code>int32_t SamRecord::get1BasedMatePosition()</code> |
| Returns the 1-based (SAM formatted) mate leftmost position. | | Returns the 1-based (SAM formatted) mate leftmost position. | ||
|- | |- | ||
− | | <code>int32_t get0BasedMatePosition()</code> | + | | <code>int32_t SamRecord::get0BasedMatePosition()</code> |
| Returns the 0-based (BAM formatted) mate leftmost position. | | Returns the 0-based (BAM formatted) mate leftmost position. | ||
|- | |- | ||
− | | <code>int32_t getInsertSize()</code> | + | | <code>int32_t SamRecord::getInsertSize()</code> |
| Returns the insert size. | | Returns the insert size. | ||
|- | |- | ||
− | | <code>int32_t get0BasedAlignmentEnd()</code> | + | | <code>int32_t SamRecord::get0BasedAlignmentEnd()</code> |
| Returns the 0-based inclusive right-most position of the clipped sequence. | | Returns the 0-based inclusive right-most position of the clipped sequence. | ||
|- | |- | ||
− | | <code>int32_t get1BasedAlignmentEnd()</code> | + | | <code>int32_t SamRecord::get1BasedAlignmentEnd()</code> |
| Returns the 1-based inclusive right-most position of the clipped sequence. | | Returns the 1-based inclusive right-most position of the clipped sequence. | ||
|- | |- | ||
− | | <code>int32_t get0BasedUnclippedStart()</code> | + | | <code>int32_t SamRecord::get0BasedUnclippedStart()</code> |
| Returns the 0-based inclusive left-most position adjusted for clipped bases. | | Returns the 0-based inclusive left-most position adjusted for clipped bases. | ||
|- | |- | ||
− | | <code>int32_t get1BasedUnclippedStart()</code> | + | | <code>int32_t SamRecord::get1BasedUnclippedStart()</code> |
| Returns the 1-based inclusive left-most position adjusted for clipped bases. | | Returns the 1-based inclusive left-most position adjusted for clipped bases. | ||
|- | |- | ||
− | | <code>int32_t get0BasedUnclippedEnd()</code> | + | | <code>int32_t SamRecord::get0BasedUnclippedEnd()</code> |
| Returns the 0-based inclusive right-most position adjusted for clipped bases. | | Returns the 0-based inclusive right-most position adjusted for clipped bases. | ||
|- | |- | ||
− | | <code>int32_t get1BasedUnclippedEnd()</code> | + | | <code>int32_t SamRecord::get1BasedUnclippedEnd()</code> |
| Returns the 1-based inclusive right-most position adjusted for clipped bases. | | Returns the 1-based inclusive right-most position adjusted for clipped bases. | ||
|- | |- | ||
− | | <code>const char* getReadName()</code> | + | | <code>const char* SamRecord::getReadName()</code> |
| Returns the SAM formatted Read Name (QNAME). | | Returns the SAM formatted Read Name (QNAME). | ||
|- | |- | ||
− | | <code>const char* getCigar()</code> | + | | <code>const char* SamRecord::getCigar()</code> |
| Returns the SAM formatted CIGAR string. | | Returns the SAM formatted CIGAR string. | ||
|- | |- | ||
− | | <code>const char* getSequence()</code> | + | | <code>const char* SamRecord::getSequence()</code> |
| Returns the SAM formatted Sequence string. | | Returns the SAM formatted Sequence string. | ||
|- | |- | ||
− | | <code>const char* getQuality()</code> | + | | <code>const char* SamRecord::getQuality()</code> |
| Returns the SAM formatted Quality string. | | Returns the SAM formatted Quality string. | ||
|- | |- | ||
− | | <code>bool getNextSamTag(char* tag, char& vtype, void** value)</code> | + | | <code>bool SamRecord::getNextSamTag(char* tag, char& vtype, void** value)</code> |
| Returns true if a tag was read, false if there are no more tags. | | Returns true if a tag was read, false if there are no more tags. | ||
For a true return value, tag is sent to the tag of the tag, vtype is set to the vtype of the tag, and value is a pointer to the value of the tag. You will then need to use a switch to cast value to int, double, char, or String. | For a true return value, tag is sent to the tag of the tag, vtype is set to the vtype of the tag, and value is a pointer to the value of the tag. You will then need to use a switch to cast value to int, double, char, or String. | ||
|- | |- | ||
− | | <code>bool isIntegerType(char vtype)</code> | + | | <code>bool SamRecord::isIntegerType(char vtype)</code> |
| Returns true if the passed in vtype is of integer ('c', 'C', 's', 'S', 'i', 'I') type. | | Returns true if the passed in vtype is of integer ('c', 'C', 's', 'S', 'i', 'I') type. | ||
|- | |- | ||
− | | <code>bool isDoubleType(char vtype)</code> | + | | <code>bool SamRecord::isDoubleType(char vtype)</code> |
| Returns true if the passed in vtype is of double ('f') type. | | Returns true if the passed in vtype is of double ('f') type. | ||
|- | |- | ||
− | | <code>bool isCharType(char vtype)</code> | + | | <code>bool SamRecord::isCharType(char vtype)</code> |
| Returns true if the passed in vtype is of char ('A') type. | | Returns true if the passed in vtype is of char ('A') type. | ||
|- | |- | ||
− | | <code>bool isStringType(char vtype)</code> | + | | <code>bool SamRecord::isStringType(char vtype)</code> |
| Returns true if the passed in vtype is of String ('Z') type. | | Returns true if the passed in vtype is of String ('Z') type. | ||
|- | |- |
Revision as of 16:41, 6 April 2010
Setting fields in a SAM/BAM Record
The SamRecord class contains accessors to set the fields of a SAM/BAM record. They are used for creating a record that is not read from a SAM/BAM file. By using these set methods to setup the record, they can be pulled back out using the get accessors or the record can be later written as either a SAM/BAM record. The methods found in the SamRecord class for setting fields are:
Method Name | Description |
---|---|
void SamRecord::resetRecord()
|
Resets the record to be an empty record. This is not necessary when you are reading a Sam/Bam file, but if you are setting fields, it is a good idea to clean out a record before reusing it. Clearing it allows you to not have to set any empty fields. |
bool SamRecord::setReadName(const char* readName)
|
Sets QNAME to the passed in name.
Returns true if successfully set, false if not. |
bool SamRecord::setFlag(int16_t flag)
|
Sets the bitwise FLAG to the passed in value.
Returns true if successfully set, false if not. |
bool SamRecord::setReferenceName(SamFileHeader& header, const char* referenceName)
|
Sets the reference sequence name. The reference id is calculated using the header.
Returns true if successfully set, false if not. |
bool SamRecord::set1BasedPosition(int32_t position)
|
Sets the leftmost position. The value passed in is 1-based (SAM formatted). Internal processing handles switching between SAM/BAM formats when read/written.
Returns true if successfully set, false if not. |
bool SamRecord::set0BasedPosition(int32_t position)
|
Sets the leftmost position. The value passed in is 0-based (BAM formatted). Internal processing handles switching between SAM/BAM formats when read/written.
Returns true if successfully set, false if not. |
bool SamRecord::setMapQuality(int8_t mapQuality)
|
Sets the mapping quality.
Returns true if successfully set, false if not. |
bool SamRecord::setCigar(const char* cigar)
|
Sets the cigar string to the passed in CIGAR. This is a SAM formatted CIGAR string. Internal processing handles switching between SAM/BAM formats when read/written.
Returns true if successfully set, false if not. |
bool SamRecord::setMateReferenceName(SamFileHeader& header, const char* referenceName)
|
Sets the mate reference sequence name. The mate reference id is calculated using the header.
Returns true if successfully set, false if not. |
bool SamRecord::set1BasedMatePosition(int32_t matePosition)
|
Sets the leftmost mate position. The value passed in is 1-based (SAM formatted). Internal processing handles switching between SAM/BAM formats when read/written.
Returns true if successfully set, false if not. |
bool SamRecord::set0BasedMatePosition(int32_t matePosition)
|
Sets the leftmost mate position. The value passed in is 0-based (BAM formatted). Internal processing handles switching between SAM/BAM formats when read/written.
Returns true if successfully set, false if not. |
bool SamRecord::setInsertSize(int32_t insertSize)
|
Sets the inferred insert size.
Returns true if successfully set, false if not. |
bool SamRecord::setSequence(const char* seq)
|
Sets the sequence string to the passed in string. This is a SAM formatted sequence string. Internal processing handles switching between SAM/BAM formats when read/written.
Returns true if successfully set, false if not. |
bool SamRecord::setQuality(const char* quality)
|
Sets the quality string to the passed in string. This is a SAM formatted quality string. Internal processing handles switching between SAM/BAM formats when read/written.
Returns true if successfully set, false if not. |
bool SamRecord::addTag(const char* tag, char vtype, const char* value)
|
Adds a tag to the record with the specified tag, vtype, and value. Vtype can be SAM/BAM vtype. Internal processing handles switching between SAM/BAM vtypes when read/written.
Returns true if successfully set, false if not. |
When set, SAM fields are validated against: SAM Validation Criteria
Retrieving fields from a SAM/BAM Record
The SamRecord class contains accessors to access the fields of a SAM/BAM record. They assume that the class has already been populated, either by using the set commands or by calling SamFile::ReadRecord. Not all of the values that can be retrieved using these get accessors have set methods. That is because they are internally calculated values if they were not read from a file.
The methods found in the SamRecord class for setting fields are:
Method Name | Description |
---|---|
bool SamRecord::isValid(SamFileHeader& header)
|
Returns true if the record is valid. This performs validation steps. TODO: the method exists, but it does not yet perform any checks, so just returns true. |
int32_t SamRecord::getBlockSize()
|
Returns the BAM block size of the record. |
const char* SamRecord::getReferenceName(SamFileHeader& header)
|
Returns the reference sequence name (SAM format). |
int32_t SamRecord::getReferenceID()
|
Returns the reference sequence ID (BAM format). |
int32_t SamRecord::get1BasedPosition()
|
Returns the 1-based (SAM formatted) leftmost position. |
int32_t SamRecord::get0BasedPosition()
|
Returns the 0-based (BAM formatted) leftmost position. |
int8_t SamRecord::getReadNameLength()
|
Returns the length of the ReadName (QNAME). |
int8_t SamRecord::getMapQuality()
|
Returns the map quality. |
int16_t SamRecord::getBin()
|
Returns the BAM bin for the record. |
int16_t SamRecord::getCigarLength()
|
Returns the length of the CIGAR in BAM format. |
int16_t SamRecord::getFlag()
|
Returns the flag. |
int32_t SamRecord::getReadLength()
|
Returns the length of the read. |
const char* SamRecord::getMateReferenceName(SamFileHeader& header)
|
Returns the mate reference sequence name (SAM format). Returns the mate reference sequence name even if it is the same as the reference sequence name. |
const char* SamRecord::getMateReferenceNameOrEqual(SamFileHeader& header)
|
Returns the mate reference sequence name (SAM format). Returns the mate reference sequence name, unless it is the same as the reference sequence name, then an "=" is returned.. |
int32_t SamRecord::getMateReferenceID()
|
Returns the mate reference sequence id (BAM format). |
int32_t SamRecord::get1BasedMatePosition()
|
Returns the 1-based (SAM formatted) mate leftmost position. |
int32_t SamRecord::get0BasedMatePosition()
|
Returns the 0-based (BAM formatted) mate leftmost position. |
int32_t SamRecord::getInsertSize()
|
Returns the insert size. |
int32_t SamRecord::get0BasedAlignmentEnd()
|
Returns the 0-based inclusive right-most position of the clipped sequence. |
int32_t SamRecord::get1BasedAlignmentEnd()
|
Returns the 1-based inclusive right-most position of the clipped sequence. |
int32_t SamRecord::get0BasedUnclippedStart()
|
Returns the 0-based inclusive left-most position adjusted for clipped bases. |
int32_t SamRecord::get1BasedUnclippedStart()
|
Returns the 1-based inclusive left-most position adjusted for clipped bases. |
int32_t SamRecord::get0BasedUnclippedEnd()
|
Returns the 0-based inclusive right-most position adjusted for clipped bases. |
int32_t SamRecord::get1BasedUnclippedEnd()
|
Returns the 1-based inclusive right-most position adjusted for clipped bases. |
const char* SamRecord::getReadName()
|
Returns the SAM formatted Read Name (QNAME). |
const char* SamRecord::getCigar()
|
Returns the SAM formatted CIGAR string. |
const char* SamRecord::getSequence()
|
Returns the SAM formatted Sequence string. |
const char* SamRecord::getQuality()
|
Returns the SAM formatted Quality string. |
bool SamRecord::getNextSamTag(char* tag, char& vtype, void** value)
|
Returns true if a tag was read, false if there are no more tags.
For a true return value, tag is sent to the tag of the tag, vtype is set to the vtype of the tag, and value is a pointer to the value of the tag. You will then need to use a switch to cast value to int, double, char, or String. |
bool SamRecord::isIntegerType(char vtype)
|
Returns true if the passed in vtype is of integer ('c', 'C', 's', 'S', 'i', 'I') type. |
bool SamRecord::isDoubleType(char vtype)
|
Returns true if the passed in vtype is of double ('f') type. |
bool SamRecord::isCharType(char vtype)
|
Returns true if the passed in vtype is of char ('A') type. |
bool SamRecord::isStringType(char vtype)
|
Returns true if the passed in vtype is of String ('Z') type. |
Example of using getNextSamTag:
// record is a previously setup SamRecord.
String recordString = "";
char tag[3];
char vtype;
void* value;
// While there are more tags, write them to the recordString.
while(record.getNextSamTag(tag, vtype, &value) != false)
{
recordString += "\t";
recordString += tag;
recordString += ":";
recordString += vtype;
recordString += ":";
if(record.isIntegerType(vtype))
{
recordString += (int)*(int*)value;
}
else if(record.isDoubleType(vtype))
{
recordString += (double)*(double*)value;
}
else if(record.isCharType(vtype))
{
recordString += (char)*(char*)value;
}
else
{
// String type.
recordString += (String)*(String*)value;
}
}
recordString += "\n";