|
Boost : |
From: Klemens Morgenstern (klemens.morgenstern_at_[hidden])
Date: 2022-05-11 04:23:10
On Tue, 2022-05-10 at 21:15 -0700, Marshall Clow via Boost wrote:
> On May 10, 2022, at 8:35 PM, Klemens Morgenstern via Boost
> <boost_at_[hidden]> wrote:
> >
> > Hi y'all,
> >
> > I've hacked together a cstring_view class and would like to ask if
> > it
> > could be included in boost.utility or boost.core.
> >
> > https://gist.github.com/klemens-morgenstern/fc02dab8b37fc77ac80efbca30f297cf
> >
> > The main motivation is to have a view that works with C-APIs. I
> > also
> > need the char_traits for dealing with odd char semantics for some
> > system APIs. (e.g. environment keys on windows are char-insensitive
> > but
> > preserving).
>
> I donât see how this is supposed to maintain the invariant ( null
> temination)Â w/o itâs own storage.
>
There's a static "" for default initialization.
BOOST_CONSTEXPR static const_pointer null_char_() {return
null_char_(CharT{});}
BOOST_CONSTEXPR static const char* null_char_(char) {return
"";}
BOOST_CONSTEXPR static const wchar_t* null_char_(wchar_t) {return
L"";}
> Consider:
> Â Â Â cstring_view sv;Â // is sv-data() pointing to a null-terminated
> string? If so, where did it come from?
>
> Â Â Â cstring_view sv1(âabcdefgâ)â
> Â Â Â sv1.substring(3, 2); // whatâs the value of strlen(sv.data)
> here? How can it be 2?
>
The substr returns a string_view if you pass it a second parameter:
BOOST_CONSTEXPR basic_cstring_view substr(size_type pos = 0) const;
BOOST_CONSTEXPR string_view_type substr(size_type pos , size_type n)
const;
I can only move the starting character with substr and maintain the
null-terminator, so if I change the end, I'll get a regular
string_view.
> â Marshall
>
> _______________________________________________
> Unsubscribe & other changes:
> http://lists.boost.org/mailman/listinfo.cgi/boost
Boost list run by bdawes at acm.org, gregod at cs.rpi.edu, cpdaniel at pacbell.net, john at johnmaddock.co.uk