1 #include "api/internal/io/ByteArray_p.h"
2 using namespace BamTools;
3 using namespace BamTools::Internal;
9 // --------------------------
10 // ByteArray implementation
11 // --------------------------
13 ByteArray::ByteArray(void)
17 ByteArray::ByteArray(const string& value)
18 : m_data(value.begin(), value.end())
21 ByteArray::ByteArray(const vector<char>& value)
25 ByteArray::ByteArray(const char* value, size_t n) {
26 const string s(value, n);
27 m_data.assign(s.begin(), s.end());
30 ByteArray::ByteArray(const ByteArray& other)
31 : m_data(other.m_data)
34 ByteArray::~ByteArray(void) { }
36 ByteArray& ByteArray::operator=(const ByteArray& other) {
37 m_data = other.m_data;
41 void ByteArray::Clear(void) {
45 const char* ByteArray::ConstData(void) const {
49 char* ByteArray::Data(void) {
53 const char& ByteArray::operator[](size_t i) const {
57 char& ByteArray::operator[](size_t i) {
61 size_t ByteArray::IndexOf(const char c, const size_t from, const size_t to) const {
62 const size_t size = ( (to == 0 ) ? m_data.size() : to);
63 for ( size_t i = from; i < size; ++i ) {
64 if ( m_data.at(i) == c )
70 ByteArray& ByteArray::Remove(size_t from, size_t n) {
72 // if 'from' outside range, just return
73 const size_t originalSize = m_data.size();
74 if ( from >= originalSize )
77 // if asked to clip from 'from' to end (or beyond), simply resize
78 if ( from + n >= originalSize )
81 // otherwise, shift data & resize
83 memmove( &m_data[from], &m_data[from+n], (originalSize-from-n) );
84 Resize(originalSize - n);
87 // return reference to modified byte array
91 void ByteArray::Resize(size_t n) {
95 size_t ByteArray::Size(void) const {
99 void ByteArray::Squeeze(void) {
100 vector<char> t(m_data);