| Index: experimental/linux_oop_debugger/debug_blob.cc
|
| diff --git a/experimental/linux_oop_debugger/debug_blob.cc b/experimental/linux_oop_debugger/debug_blob.cc
|
| deleted file mode 100755
|
| index 9c05823770fa94e5d256c7340ac638e89b1c0252..0000000000000000000000000000000000000000
|
| --- a/experimental/linux_oop_debugger/debug_blob.cc
|
| +++ /dev/null
|
| @@ -1,295 +0,0 @@
|
| -// Copyright (c) 2011 The Native Client Authors. All rights reserved.
|
| -// Use of this source code is governed by a BSD-style license that can be
|
| -// found in the LICENSE file.
|
| -#include "debug_blob.h"
|
| -#include <ctype.h>
|
| -#include <string.h>
|
| -#include <algorithm>
|
| -#include <string>
|
| -
|
| -namespace {
|
| -char GetHexDigit(unsigned int value, int digit_position) {
|
| -// const char* kDigitStrings = "0123456789ABCDEF";
|
| - const char* kDigitStrings = "0123456789abcdef";
|
| - unsigned int digit = (value >> (4 * digit_position)) & 0xF;
|
| - return kDigitStrings[digit];
|
| -}
|
| -} // namespace
|
| -
|
| -namespace debug {
|
| -Blob::Blob() {
|
| -}
|
| -
|
| -Blob::Blob(const Blob& other) {
|
| - value_ = other.value_;
|
| -}
|
| -
|
| -Blob::Blob(const void* buff, size_t buff_sz) {
|
| - const byte* char_buff = static_cast<const byte*>(buff);
|
| - for (size_t i = 0; i < buff_sz; i++ )
|
| - PushBack(*char_buff++);
|
| -}
|
| -
|
| -Blob::Blob(const char* buff) {
|
| - if (NULL != buff) {
|
| - for (size_t i = 0; i < strlen(buff); i++ )
|
| - PushBack(buff[i]);
|
| - }
|
| -}
|
| -
|
| -Blob::~Blob() {
|
| -}
|
| -
|
| -Blob& Blob::operator = (const Blob& other) {
|
| - value_ = other.value_;
|
| - return *this;
|
| -}
|
| -
|
| -bool Blob::operator == (const Blob& other) const {
|
| - return value_ == other.value_;
|
| -}
|
| -
|
| -size_t Blob::Size() const {
|
| - return value_.size();
|
| -}
|
| -
|
| -byte Blob::operator[] (size_t position) const {
|
| - return value_[position];
|
| -}
|
| -
|
| -byte Blob::Front() const {
|
| - return value_.front();
|
| -}
|
| -
|
| -byte Blob::Back() const {
|
| - return value_.back();
|
| -}
|
| -
|
| -byte Blob::PopFront() {
|
| - byte c = value_.front();
|
| - value_.pop_front();
|
| - return c;
|
| -}
|
| -
|
| -byte Blob::PopBack() {
|
| - byte c = value_.back();
|
| - value_.pop_back();
|
| - return c;
|
| -}
|
| -
|
| -void Blob::PushFront(byte c) {
|
| - value_.push_front(c);
|
| -}
|
| -
|
| -void Blob::PushBack(byte c) {
|
| - value_.push_back(c);
|
| -}
|
| -
|
| -void Blob::Clear() {
|
| - value_.clear();
|
| -}
|
| -
|
| -int Blob::ToInt() const {
|
| - int result = 0;
|
| - char* ptr = reinterpret_cast<char*>(&result);
|
| - size_t bytes_to_copy = std::min(sizeof(result), Size());
|
| - for (size_t i = 0; i < bytes_to_copy; i++)
|
| - ptr[i] = value_[i];
|
| - return result;
|
| -}
|
| -
|
| -std::string Blob::ToString() const {
|
| - std::string result;
|
| - for (size_t i = 0; i < Size(); i++)
|
| - result.append(1, value_[i]);
|
| - return result;
|
| -}
|
| -
|
| -std::string Blob::ToHexString(bool remove_leading_zeroes) const {
|
| - std::string result;
|
| - size_t num = Size();
|
| - for (size_t i = 0; i < num; i++) {
|
| - char c = GetHexDigit(value_[i], 1);
|
| - result.append(1, c);
|
| - c = GetHexDigit(value_[i], 0);
|
| - result.append(1, c);
|
| - }
|
| -
|
| - if (remove_leading_zeroes) {
|
| - while (result[0] == '0')
|
| - result.erase(0, 1);
|
| - }
|
| - return result;
|
| -}
|
| -
|
| -void* Blob::ToCBuffer() const {
|
| - size_t num = Size();
|
| - char* buff = static_cast<char*>(malloc(num));
|
| - if (NULL != buff) {
|
| - for (size_t i = 0; i < num; i++)
|
| - buff[i] = (*this)[i];
|
| - }
|
| - return buff;
|
| -}
|
| -
|
| -bool Blob::LoadFromHexString(const std::string& hex_str) {
|
| - Blob tmp(hex_str.c_str());
|
| - return LoadFromHexString(tmp);
|
| -}
|
| -
|
| -bool Blob::LoadFromHexString(const Blob& hex_str) {
|
| - Clear();
|
| - size_t num = hex_str.Size();
|
| - for (size_t i = num; i > 0; i -= 2) {
|
| - if (isspace(hex_str[i - 1])) {
|
| - i++;
|
| - } else if (i >= 2) {
|
| - unsigned int c1 = 0;
|
| - unsigned int c2 = 0;
|
| - if (!HexCharToInt(hex_str[i - 1], &c1)) return false;
|
| - if (!HexCharToInt(hex_str[i - 2], &c2)) return false;
|
| - unsigned int c = c1 + (c2 << 4);
|
| - PushFront(c);
|
| - } else {
|
| - unsigned int c = 0;
|
| - if (!HexCharToInt(hex_str[i - 1], &c)) return false;
|
| - PushFront(c);
|
| - break;
|
| - }
|
| - }
|
| - return true;
|
| -}
|
| -
|
| -void Blob::Append(const Blob& blob) {
|
| - for (size_t i = 0; i < blob.Size(); i++)
|
| - PushBack(blob[i]);
|
| -}
|
| -
|
| -bool Blob::Compare(const Blob& blob, size_t to_length) const {
|
| - if (-1 == to_length) {
|
| - if (Size() != blob.Size())
|
| - return false;
|
| - to_length = Size();
|
| - }
|
| - for (size_t i = 0; i < to_length; i++)
|
| - if (value_[i] != blob[i])
|
| - return false;
|
| - return true;
|
| -}
|
| -
|
| -bool Blob::HasPrefix(const std::string& prefix) const {
|
| - size_t num = prefix.size();
|
| - if (Size() < num)
|
| - return false;
|
| - for (size_t i = 0; i < num; i++)
|
| - if (value_[i] != prefix[i])
|
| - return false;
|
| - return true;
|
| -}
|
| -
|
| -void Blob::Reverse() {
|
| - std::reverse(value_.begin(), value_.end());
|
| -}
|
| -
|
| -void Blob::Split(const char* delimiters, std::deque<Blob>* tokens) const {
|
| - Blob token;
|
| - std::deque<byte>::const_iterator it = value_.begin();
|
| - while (value_.end() != it) {
|
| - byte c = *it++;
|
| - if (strchr(delimiters, c) != 0) {
|
| - tokens->push_back(token);
|
| - token.Clear();
|
| - } else {
|
| - token.PushBack(c);
|
| - }
|
| - }
|
| - if (0 != token.Size())
|
| - tokens->push_back(token);
|
| -}
|
| -
|
| -bool Blob::HexCharToInt(unsigned char c, unsigned int* result) {
|
| - if (('0' <= c) && ('9' >= c)) {
|
| - *result = c - '0';
|
| - } else if (('A' <= c) && ('F' >= c)) {
|
| - *result = c - 'A' + 10;
|
| - } else if (('a' <= c) && ('f' >= c)) {
|
| - *result = c - 'a' + 10;
|
| - } else {
|
| - return false;
|
| - }
|
| - return true;
|
| -}
|
| -
|
| -#define my_assert(x) do {\
|
| -if(!(x)) {*error="Failed: "#x;\
|
| -return __LINE__;}}\
|
| -while(false)
|
| -
|
| -BlobUniTest::BlobUniTest() {
|
| -}
|
| -
|
| -int BlobUniTest::Run(std::string* error) {
|
| - if (true) {
|
| - unsigned char buff[] = {0x3, 0xAF, 0xF0};
|
| - Blob blob(buff, sizeof(buff));
|
| - std::string str = blob.ToHexString(true);
|
| - my_assert(str == "3aff0");
|
| -
|
| - str = blob.ToHexString(false);
|
| - my_assert(str == "03aff0");
|
| -
|
| - my_assert(blob[0] == 0x3);
|
| - my_assert(blob[1] == 0xAF);
|
| - my_assert(blob[2] == 0xF0);
|
| - my_assert(blob.Size() == 3);
|
| -
|
| - Blob blob2(blob);
|
| - my_assert(blob2 == blob);
|
| - my_assert(blob2[0] == 0x3);
|
| - my_assert(blob2[1] == 0xAF);
|
| - my_assert(blob2[2] == 0xF0);
|
| - my_assert(blob2.Size() == 3);
|
| -
|
| - Blob blob3;
|
| - blob3 = blob;
|
| - my_assert(blob3 == blob);
|
| - my_assert(blob3[0] == 0x3);
|
| - my_assert(blob3[1] == 0xAF);
|
| - my_assert(blob3[2] == 0xF0);
|
| - my_assert(blob3.Size() == 3);
|
| -
|
| - Blob blob4;
|
| - blob4.LoadFromHexString(std::string("3aff0"));
|
| - my_assert(blob4 == blob);
|
| -
|
| - Blob blob5;
|
| - blob5.LoadFromHexString(std::string("03aff0"));
|
| - my_assert(blob5 == blob);
|
| -
|
| - Blob blob6(std::string("03aff0").c_str());
|
| - Blob blob7;
|
| - blob7.LoadFromHexString(blob6);
|
| - my_assert(blob7 == blob);
|
| - }
|
| -
|
| - if (true) {
|
| - unsigned char buff[] = {0, 0x3, 0xAF, 0xF0};
|
| - Blob blob(buff, sizeof(buff));
|
| - std::string str = blob.ToHexString(true);
|
| - my_assert(str == "3aff0");
|
| -
|
| - str = blob.ToHexString(false);
|
| - my_assert(str == "0003aff0");
|
| -
|
| - my_assert(blob[0] == 0);
|
| - my_assert(blob[1] == 0x3);
|
| - my_assert(blob[2] == 0xAF);
|
| - my_assert(blob[3] == 0xF0);
|
| - my_assert(blob.Size() == 4);
|
| - }
|
| -
|
| - // returns 0 if success, error code if failed.
|
| - return 0;
|
| -}
|
| -} // namespace debug
|
| -
|
|
|