91 lines · 1.7 KB · C
RawDownload
#ifndef __BUFFEREDDATA_H__#define __BUFFEREDDATA_H__ #include <gtest/gtest.h>#include <stddef.h>#include <stdlib.h>#include "../test_stdint.h"#include <algorithm> class BufferedData { public:  BufferedData() : data_ (NULL), capacity_ (0), length_ (0) {}   ~BufferedData() {    free (data_);  }   bool PushBack (uint8_t c) {    if (!EnsureCapacity (length_ + 1)) {      return false;    }    data_[length_++] = c;    return true;  }   bool PushBack (const uint8_t* data, size_t len) {    if (!EnsureCapacity (length_ + len)) {      return false;    }    memcpy (data_ + length_, data, len);    length_ += len;    return true;  }   size_t PopFront (uint8_t* ptr, size_t len) {    len = std::min (length_, len);    memcpy (ptr, data_, len);    memmove (data_, data_ + len, length_ - len);    if (-1 == SetLength (length_ - len))      return -1;    return len;  }   void Clear() {    length_ = 0;  }   int SetLength (size_t newLen) {    if (EnsureCapacity (newLen)) {      length_ = newLen;    } else {      Clear();      //FAIL () << "unable to alloc memory in SetLength()";      std::cout << "unable to alloc memory in SetLength()" << std::endl;      return -1;    }     return 0;  }   size_t Length() const {    return length_;  }   uint8_t* data() {    return data_;  }  private:  bool EnsureCapacity (size_t capacity) {    if (capacity > capacity_) {      size_t newsize = capacity * 2;       uint8_t* data = static_cast<uint8_t*> (realloc (data_, newsize));       if (!data)        return false;       data_ = data;      capacity_ = newsize;      return true;    }    return true;  }   uint8_t* data_;  size_t capacity_;  size_t length_;}; #endif //__BUFFEREDDATA_H__

Keyboard shortcuts

General

Show keyboard shortcuts
?
Focus the current search
/

Issues and pull requests

Open filters
f

Issues, pull requests and Inbox

Select next item
j↓
Select previous item
k↑
Open selected item
Enter
Dismiss filters or clear selection
Esc

Repository code

Go to file
t