LCOV - code coverage report
Current view: top level - intl/icu/source/common - stringpiece.cpp (source / functions) Hit Total Coverage
Test: output.info Lines: 2 39 5.1 %
Date: 2017-07-14 16:53:18 Functions: 1 5 20.0 %
Legend: Lines: hit not hit

          Line data    Source code
       1             : // © 2016 and later: Unicode, Inc. and others.
       2             : // License & terms of use: http://www.unicode.org/copyright.html
       3             : // Copyright (C) 2009-2013, International Business Machines
       4             : // Corporation and others. All Rights Reserved.
       5             : //
       6             : // Copyright 2004 and onwards Google Inc.
       7             : //
       8             : // Author: wilsonh@google.com (Wilson Hsieh)
       9             : //
      10             : 
      11             : #include "unicode/utypes.h"
      12             : #include "unicode/stringpiece.h"
      13             : #include "cstring.h"
      14             : #include "cmemory.h"
      15             : 
      16             : U_NAMESPACE_BEGIN
      17             : 
      18          69 : StringPiece::StringPiece(const char* str)
      19          69 :     : ptr_(str), length_((str == NULL) ? 0 : static_cast<int32_t>(uprv_strlen(str))) { }
      20             : 
      21           0 : StringPiece::StringPiece(const StringPiece& x, int32_t pos) {
      22           0 :   if (pos < 0) {
      23           0 :     pos = 0;
      24           0 :   } else if (pos > x.length_) {
      25           0 :     pos = x.length_;
      26             :   }
      27           0 :   ptr_ = x.ptr_ + pos;
      28           0 :   length_ = x.length_ - pos;
      29           0 : }
      30             : 
      31           0 : StringPiece::StringPiece(const StringPiece& x, int32_t pos, int32_t len) {
      32           0 :   if (pos < 0) {
      33           0 :     pos = 0;
      34           0 :   } else if (pos > x.length_) {
      35           0 :     pos = x.length_;
      36             :   }
      37           0 :   if (len < 0) {
      38           0 :     len = 0;
      39           0 :   } else if (len > x.length_ - pos) {
      40           0 :     len = x.length_ - pos;
      41             :   }
      42           0 :   ptr_ = x.ptr_ + pos;
      43           0 :   length_ = len;
      44           0 : }
      45             : 
      46           0 : void StringPiece::set(const char* str) {
      47           0 :   ptr_ = str;
      48           0 :   if (str != NULL)
      49           0 :     length_ = static_cast<int32_t>(uprv_strlen(str));
      50             :   else
      51           0 :     length_ = 0;
      52           0 : }
      53             : 
      54             : U_EXPORT UBool U_EXPORT2
      55           0 : operator==(const StringPiece& x, const StringPiece& y) {
      56           0 :   int32_t len = x.size();
      57           0 :   if (len != y.size()) {
      58           0 :     return false;
      59             :   }
      60           0 :   if (len == 0) {
      61           0 :     return true;
      62             :   }
      63           0 :   const char* p = x.data();
      64           0 :   const char* p2 = y.data();
      65             :   // Test last byte in case strings share large common prefix
      66           0 :   --len;
      67           0 :   if (p[len] != p2[len]) return false;
      68             :   // At this point we can, but don't have to, ignore the last byte.
      69           0 :   return uprv_memcmp(p, p2, len) == 0;
      70             : }
      71             : 
      72             : 
      73             : const int32_t StringPiece::npos = 0x7fffffff;
      74             : 
      75             : U_NAMESPACE_END

Generated by: LCOV version 1.13