21 #include "CigarRoller.h"
31 std::vector<CigarOperator>::iterator i;
32 for (i = rhs.cigarOperations.begin(); i != rhs.cigarOperations.end(); i++)
47 clearQueryAndReferenceIndexes();
53 else if (cigarOperations.empty() || cigarOperations.back() != rhs)
55 cigarOperations.push_back(rhs);
60 cigarOperations.back().count += rhs.count;
126 std::cerr <<
"ERROR "
127 <<
"(" << __FILE__ <<
":" << __LINE__ <<
"): "
128 <<
"Parsing CIGAR - invalid character found "
129 <<
"with parameter " << operation <<
" and " << count
138 int operationCount = 0;
141 if (isdigit(*cigarString))
144 operationCount = strtol((
char *) cigarString, &endPtr, 10);
145 cigarString = endPtr;
149 Add(*cigarString, operationCount);
158 if((index < 0) || ((
unsigned int)index >= cigarOperations.size()))
163 cigarOperations.erase(cigarOperations.begin() + index);
166 clearQueryAndReferenceIndexes();
173 if((index < 0) || ((
unsigned int)index >= cigarOperations.size()))
178 cigarOperations[index].count += increment;
182 clearQueryAndReferenceIndexes();
189 if((index < 0) || ((
unsigned int)index >= cigarOperations.size()))
194 cigarOperations[index].operation = op;
195 cigarOperations[index].count = count;
199 clearQueryAndReferenceIndexes();
216 for (
int i = 0; i < bufferLen; i++)
218 int opLen = cigarBuffer[i] >> 4;
220 Add(cigarBuffer[i] & 0xF, opLen);
247 std::vector<CigarOperator>::iterator i;
249 for (i = cigarOperations.begin(); i != cigarOperations.end(); i++)
251 switch (i->operation)
278 static char *ret = NULL;
279 static unsigned int retSize = 0;
283 retSize = cigarOperations.size() * 12 + 1;
284 ret = (
char*) malloc(
sizeof(
char) * retSize);
291 if (retSize > cigarOperations.size() * 12 + 1)
296 retSize = cigarOperations.size() * 12 + 1;
298 ret = (
char*) malloc(
sizeof(
char) * retSize);
306 std::vector<CigarOperator>::iterator i;
312 for (i = cigarOperations.begin(); i != cigarOperations.end(); i++)
314 sprintf(buf,
"%d%c", (*i).count, (*i).getChar());
329 clearQueryAndReferenceIndexes();
330 cigarOperations.clear();