1 // ***************************************************************************
2 // ByteArray_p.cpp (c) 2011 Derek Barnett
3 // Marth Lab, Department of Biology, Boston College
4 // ---------------------------------------------------------------------------
5 // Last modified: 10 November 2011 (DB)
6 // ---------------------------------------------------------------------------
7 // Provides a dynamic, variable-length byte buffer
8 // ***************************************************************************
10 #include "api/internal/io/ByteArray_p.h"
11 using namespace BamTools;
12 using namespace BamTools::Internal;
18 // --------------------------
19 // ByteArray implementation
20 // --------------------------
22 ByteArray::ByteArray(void)
26 ByteArray::ByteArray(const string& value)
27 : m_data(value.begin(), value.end())
30 ByteArray::ByteArray(const vector<char>& value)
34 ByteArray::ByteArray(const char* value, size_t n) {
35 const string s(value, n);
36 m_data.assign(s.begin(), s.end());
39 ByteArray::ByteArray(const ByteArray& other)
40 : m_data(other.m_data)
43 ByteArray::~ByteArray(void) { }
45 ByteArray& ByteArray::operator=(const ByteArray& other) {
46 m_data = other.m_data;
50 void ByteArray::Clear(void) {
54 const char* ByteArray::ConstData(void) const {
58 char* ByteArray::Data(void) {
62 const char& ByteArray::operator[](size_t i) const {
66 char& ByteArray::operator[](size_t i) {
70 size_t ByteArray::IndexOf(const char c, const size_t from, const size_t to) const {
71 const size_t size = ( (to == 0 ) ? m_data.size() : to );
72 for ( size_t i = from; i < size; ++i ) {
73 if ( m_data.at(i) == c )
79 ByteArray& ByteArray::Remove(size_t from, size_t n) {
81 // if 'from' outside range, just return
82 const size_t originalSize = m_data.size();
83 if ( from >= originalSize )
86 // if asked to clip from 'from' to end (or beyond), simply resize
87 if ( from + n >= originalSize )
90 // otherwise, shift data & resize
92 memmove( &m_data[from], &m_data[from+n], (originalSize-from-n) );
93 Resize(originalSize - n);
96 // return reference to modified byte array
100 void ByteArray::Resize(size_t n) {
104 size_t ByteArray::Size(void) const {
105 return m_data.size();
108 void ByteArray::Squeeze(void) {
109 vector<char> t(m_data);