Logo ROOT  
Reference Guide
RStringView.hxx
Go to the documentation of this file.
1 // -*- C++ -*-
2 // Author: Philippe Canal, March 2015
3 
4 /*************************************************************************
5  * Copyright (C) 1995-2000, Rene Brun and Fons Rademakers. *
6  * All rights reserved. *
7  * *
8  * For the licensing terms see $ROOTSYS/LICENSE. *
9  * For the list of contributors see $ROOTSYS/README/CREDITS. *
10  *************************************************************************/
11 
12 #ifndef RStringView_H
13 #define RStringView_H
14 
15 #include "RConfigure.h"
16 
17 #ifdef R__HAS_STD_STRING_VIEW
18 
19 #include <string_view>
20 
21 #else
22 
23 # if defined(R__HAS_STD_EXPERIMENTAL_STRING_VIEW)
24 # include <experimental/string_view>
25 # else
27 # endif
28 
29 namespace std {
30 
31  template<class _CharT, class _Traits = std::char_traits<_CharT> >
32  using basic_string_view = ::std::experimental::basic_string_view<_CharT,_Traits>;
33 
34  // basic_string_view typedef names
39 
40 // template<class _CharT, class _Traits = std::char_traits<_CharT> >
41 // basic_string_view<_CharT,_Traits>
42 // &operator=(basic_string_view<_CharT,_Traits> &lhs, const TString &rsh) {
43 // *lhs = basic_string_view<_CharT,_Traits>(rsh);
44 // return *lhs;
45 // }
46 
47 #ifndef R__HAS_STOD_STRING_VIEW
48  inline double stod(std::string_view str, size_t *pos)
49  {
50  return std::stod(std::string(str.data(), str.size()),pos);
51  }
52 #endif
53 
54 }
55 
56 #endif // ifdef else R__HAS_STD_STRING_VIEW
57 
58 #ifndef R__HAS_OP_EQUAL_PLUS_STRING_VIEW
59 
60 #include <string>
61 
62 namespace std {
63 inline namespace __ROOT {
64 
65 inline std::string &operator+=(std::string &left, std::string_view right)
66 {
67  return left.append(right.data(), right.size());
68 }
69 
70 } // namespace __ROOT
71 } // namespace std
72 
73 #endif // ifndef R__HAS_OP_EQUAL_PLUS_STRING_VIEW
74 
75 namespace ROOT {
76 namespace Internal {
77  class TStringView {
78  const char *fData{nullptr};
79  size_t fLength{0};
80 
81  public:
82  explicit TStringView(const char *cstr, size_t len) : fData(cstr), fLength(len) {}
83 
84  operator std::string_view() const { return std::string_view(fData,fLength); }
85  };
86 } // namespace Internal
87 } // namespace ROOT
88 #endif // RStringView_H
basic_string_view
Definition: libcpp_string_view.h:199
string_view
basic_string_view< char > string_view
Definition: libcpp_string_view.h:785
ROOT::Internal::TStringView::TStringView
TStringView(const char *cstr, size_t len)
Definition: RStringView.hxx:82
wstring_view
basic_string_view< wchar_t > wstring_view
Definition: libcpp_string_view.h:788
ROOT::Internal::TStringView
Definition: RStringView.hxx:77
u16string_view
basic_string_view< char16_t > u16string_view
Definition: libcpp_string_view.h:786
operator+=
std::string & operator+=(std::string &left, const TString &right)
Definition: TString.h:478
ROOT::Internal::TStringView::fLength
size_t fLength
Definition: RStringView.hxx:79
u32string_view
basic_string_view< char32_t > u32string_view
Definition: libcpp_string_view.h:787
RWrap_libcpp_string_view.h
ROOT::Internal::TStringView::fData
const char * fData
Definition: RStringView.hxx:78
ROOT
VSD Structures.
Definition: StringConv.hxx:21