diff --git a/paddle/strings/stringpiece.cc b/paddle/strings/stringpiece.cc index 4f788c6ecd56166aa0520db139a6cb1a29fae7cd..415b3558d5dfffde26275bcb16ea3922424ca9f3 100644 --- a/paddle/strings/stringpiece.cc +++ b/paddle/strings/stringpiece.cc @@ -16,11 +16,11 @@ #include "paddle/strings/stringpiece.h" -// #include #include #include #include +#include namespace paddle { @@ -39,6 +39,12 @@ StringPiece::StringPiece(const char* s) : data_(s) { StringPiece::StringPiece(const std::string& s) : data_(s.data()), size_(s.size()) {} +char StringPiece::operator[](size_t n) const { + if (n >= len()) + throw std::invalid_argument("index out of StringPiece length"); + return data_[n]; +} + int Compare(StringPiece a, StringPiece b) { const size_t min_len = (a.len() < b.len()) ? a.len() : b.len(); int r = memcmp(a.data(), b.data(), min_len); diff --git a/paddle/strings/stringpiece.h b/paddle/strings/stringpiece.h index 413b65d38412126deef10436770cdd888de6c60c..89aa084a2920c6f372b771e0e407b64728ea69e4 100644 --- a/paddle/strings/stringpiece.h +++ b/paddle/strings/stringpiece.h @@ -16,9 +16,6 @@ #pragma once -#include - -#include #include namespace paddle { @@ -46,10 +43,7 @@ public: const char* data() const { return data_; } size_t len() const { return size_; } - char operator[](size_t n) const { - assert(n < len()); - return data_[n]; - } + char operator[](size_t n) const; // StringPiece doesn't own the string, so both iterator and const // iterator are const char* indeed.