Alien-libpanda
view release on metacpan or search on metacpan
87888990919293949596979899100101102103
- new overloads
for
endian conversions
1.0.6 12.01.2018
- class panda::function - compareble version of std::function
- class CallbackDispatcher - implementation of observer pattern
- simple logger tools
1.0.5 08.09.2017
1.0.4 07.05.2017
- shared_ptr::operator bool is explicit now
1.0.3 16.05.2017
- fix
default
pos
value
for
find_last_of, find_last_not_of
1.0.2 16.05.2017
- bugfix
for
stoX group of functions in case of
no
pos
argument
1.0.1 15.05.2017
-
do
not bootstrap so library (
no
XS code inside), it will be loaded automatically because of
"-l"
linker flag
1.0.0 11.05.2017
- C++ code moved from Panda::Lib
src/panda/basic_string.h view on Meta::CPAN
745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793size_type find_first_of (CharT ch, size_type
pos
= 0) const {
return
find(ch,
pos
);
}
size_type find_first_of (basic_string_view<CharT, Traits> sv, size_type
pos
= 0) const {
return
find_first_of(sv.data(),
pos
, sv.
length
());
}
template <class Alloc2>
size_type find_first_not_of (const basic_string<CharT, Traits, Alloc2>& str, size_type
pos
= 0) const {
return
find_first_not_of(str._str,
pos
, str._length);
}
size_type find_first_not_of (const CharT* s, size_type
pos
, size_type count) const {
if
(count == 0)
return
pos
>= _length ? npos :
pos
;
const CharT* end = _str + _length;
for
(const CharT* ptr = _str +
pos
; ptr < end; ++ptr)
if
(!traits_type::find(s, count,
*ptr
))
return
ptr - _str;
return
npos;
}
template<class _CharT, typename = typename std::enable_if<std::is_same<_CharT, CharT>::value>::type>
size_type find_first_not_of (const _CharT* const& s, size_type
pos
= 0) const {
return
find_first_not_of(s,
pos
, traits_type::
length
(s));
}
template <size_type SIZE>
size_type find_first_not_of (const CharT (
&s
)[SIZE], size_type
pos
= 0) const {
return
find_first_not_of(s,
pos
, SIZE-1);
}
size_type find_first_not_of (CharT ch, size_type
pos
= 0) const {
const CharT* end = _str + _length;
for
(const CharT* ptr = _str +
pos
; ptr < end; ++ptr)
if
(!traits_type::eq(
*ptr
, ch))
return
ptr - _str;
return
npos;
}
size_type find_first_not_of (basic_string_view<CharT, Traits> sv, size_type
pos
= 0) const {
return
find_first_not_of(sv.data(),
pos
, sv.
length
());
}
template <class Alloc2>
size_type find_last_of (const basic_string<CharT, Traits, Alloc2>& str, size_type
pos
= npos) const {
return
find_last_of(str._str,
pos
, str._length);
}
size_type find_last_of (const CharT* s, size_type
pos
, size_type count) const {
if
(count == 0)
return
npos;
for
(const CharT* ptr = _str + (
pos
>= _length ? (_length - 1) :
pos
); ptr >= _str; --ptr)
src/panda/basic_string.h view on Meta::CPAN
807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855size_type find_last_of (CharT ch, size_type
pos
= npos) const {
return
rfind(ch,
pos
);
}
size_type find_last_of (basic_string_view<CharT, Traits> sv, size_type
pos
= npos) const {
return
find_last_of(sv.data(),
pos
, sv.
length
());
}
template <class Alloc2>
size_type find_last_not_of (const basic_string<CharT, Traits, Alloc2>& str, size_type
pos
= npos) const {
return
find_last_not_of(str._str,
pos
, str._length);
}
size_type find_last_not_of (const CharT* s, size_type
pos
, size_type count) const {
if
(count == 0)
return
pos
>= _length ? (_length-1) :
pos
;
for
(const CharT* ptr = _str + (
pos
>= _length ? (_length - 1) :
pos
); ptr >= _str; --ptr)
if
(!traits_type::find(s, count,
*ptr
))
return
ptr - _str;
return
npos;
}
template<class _CharT, typename = typename std::enable_if<std::is_same<_CharT, CharT>::value>::type>
size_type find_last_not_of (const _CharT* const& s, size_type
pos
= npos) const {
return
find_last_not_of(s,
pos
, traits_type::
length
(s));
}
template <size_type SIZE>
size_type find_last_not_of (const CharT (
&s
)[SIZE], size_type
pos
= npos) const {
return
find_last_not_of(s,
pos
, SIZE-1);
}
size_type find_last_not_of (CharT ch, size_type
pos
= npos) const {
for
(const CharT* ptr = _str + (
pos
>= _length ? (_length - 1) :
pos
); ptr >= _str; --ptr)
if
(!traits_type::eq(
*ptr
, ch))
return
ptr - _str;
return
npos;
}
size_type find_last_not_of (basic_string_view<CharT, Traits> sv, size_type
pos
= npos) const {
return
find_last_not_of(sv.data(),
pos
, sv.
length
());
}
basic_string& append (size_type count, CharT ch) {
if
(count) {
_reserve_save(_length + count);
traits_type::assign(_str + _length, count, ch);
_length += count;
}
return
*this
;
}
src/panda/basic_string_view.h view on Meta::CPAN
248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320
size_t find_last_of (const _CharT* const& s, size_t
pos
= 0) const {
return
find_last_of(s,
pos
, traits_type::
length
(s));
}
template <size_t SIZE>
size_t find_last_of (const CharT (
&s
)[SIZE], size_t
pos
= 0) const {
return
find_last_of(s,
pos
, SIZE-1);
}
size_t find_first_not_of (basic_string_view v, size_t
pos
= 0) const {
return
find_first_not_of(v._str,
pos
, v._length);
}
size_t find_first_not_of (CharT ch, size_t
pos
= 0) const {
const CharT* end = _str + _length;
for
(const CharT* ptr = _str +
pos
; ptr < end; ++ptr)
if
(!traits_type::eq(
*ptr
, ch))
return
ptr - _str;
return
npos;
}
size_t find_first_not_of (const CharT* s, size_t
pos
, size_t count) const {
if
(count == 0)
return
pos
>= _length ? npos :
pos
;
const CharT* end = _str + _length;
for
(const CharT* ptr = _str +
pos
; ptr < end; ++ptr)
if
(!traits_type::find(s, count,
*ptr
))
return
ptr - _str;
return
npos;
}
template<class _CharT, typename = typename std::enable_if<std::is_same<_CharT, CharT>::value>::type>
size_t find_first_not_of (const _CharT* const& s, size_t
pos
= 0) const {
return
find_first_not_of(s,
pos
, traits_type::
length
(s));
}
template <size_t SIZE>
size_t find_first_not_of (const CharT (
&s
)[SIZE], size_t
pos
= 0) const {
return
find_first_not_of(s,
pos
, SIZE-1);
}
size_t find_last_not_of (basic_string_view v, size_t
pos
= 0) const {
return
find_last_not_of(v._str,
pos
, v._length);
}
size_t find_last_not_of (CharT ch, size_t
pos
= 0) const {
for
(const CharT* ptr = _str + (
pos
>= _length ? (_length - 1) :
pos
); ptr >= _str; --ptr)
if
(!traits_type::eq(
*ptr
, ch))
return
ptr - _str;
return
npos;
}
size_t find_last_not_of (const CharT* s, size_t
pos
, size_t count) const {
if
(count == 0)
return
pos
>= _length ? (_length-1) :
pos
;
for
(const CharT* ptr = _str + (
pos
>= _length ? (_length - 1) :
pos
); ptr >= _str; --ptr)
if
(!traits_type::find(s, count,
*ptr
))
return
ptr - _str;
return
npos;
}
template<class _CharT, typename = typename std::enable_if<std::is_same<_CharT, CharT>::value>::type>
size_t find_last_not_of (const _CharT* const& s, size_t
pos
= 0) const {
return
find_last_not_of(s,
pos
, traits_type::
length
(s));
}
template <size_t SIZE>
size_t find_last_not_of (const CharT (
&s
)[SIZE], size_t
pos
= 0) const {
return
find_last_not_of(s,
pos
, SIZE-1);
}
private:
static
int
_compare (const CharT* ptr1, size_t len1, const CharT* ptr2, size_t len2) {
int
r = traits_type::compare(ptr1, ptr2, std::min(len1, len2));
if
(!r) r = (len1 < len2) ? -1 : (len1 > len2 ? 1 : 0);
return
r;
}
t/string_test.h view on Meta::CPAN
1466146714681469147014711472147314741475147614771478147914801481148214831484148514861487148814891490149114921493149414951496149714981499150015011502150315041505150615071508150915101511151215131514151515161517151815191520152115221523
REQUIRE(s.find_first_of(FString(cstr(
"o"
))) == 1);
REQUIRE(s.find_first_of(FString(cstr(
"o"
)), 2) == 6);
REQUIRE(s.find_first_of(FString(cstr(
"o"
)), 14) == npos);
REQUIRE(s.find_first_of(FString(EMPTY), 0) == npos);
REQUIRE(s.find_first_of(FString(EMPTY), 15) == npos);
REQUIRE(s.find_first_of(FString(cstr(
"pnv"
))) == 2);
REQUIRE(s.find_first_of(FString(cstr(
"pnv"
)), 3) == 5);
REQUIRE(s.find_first_of(FString(cstr(
"pnv"
)), 6) == 7);
REQUIRE(s.find_first_of(FString(cstr(
"pnv"
)), 8) == npos);
}
SECTION(
"find_first_not_of"
) {
REQUIRE(s.find_first_not_of(FString(cstr(
"o"
))) == 0);
REQUIRE(s.find_first_not_of(FString(cstr(
"j"
))) == 1);
REQUIRE(s.find_first_not_of(FString(cstr(
"o"
)), 1) == 2);
REQUIRE(s.find_first_not_of(FString(cstr(
"d"
)), 13) == npos);
REQUIRE(s.find_first_not_of(FString(EMPTY), 0) == 0);
REQUIRE(s.find_first_not_of(FString(EMPTY), 15) == npos);
REQUIRE(s.find_first_not_of(FString(cstr(
"jopa nviy"
))) == 11);
REQUIRE(s.find_first_not_of(FString(cstr(
"og "
)), 10) == 13);
REQUIRE(s.find_first_not_of(FString(cstr(
"ogd "
)), 10) == npos);
}
SECTION(
"find_last_of"
) {
REQUIRE(s.find_last_of(FString(cstr(
"o"
))) == 12);
REQUIRE(s.find_last_of(FString(cstr(
"o"
)), 9999) == 12);
REQUIRE(s.find_last_of(FString(cstr(
"o"
)), 10) == 6);
REQUIRE(s.find_last_of(FString(cstr(
"o"
)), 1) == 1);
REQUIRE(s.find_last_of(FString(cstr(
"o"
)), 0) == npos);
REQUIRE(s.find_last_of(FString(EMPTY), 0) == npos);
REQUIRE(s.find_last_of(FString(EMPTY), 15) == npos);
REQUIRE(s.find_last_of(FString(cstr(
"pnv"
))) == 7);
REQUIRE(s.find_last_of(FString(cstr(
"pnv"
)), 6) == 5);
REQUIRE(s.find_last_of(FString(cstr(
"pnv"
)), 4) == 2);
REQUIRE(s.find_last_of(FString(cstr(
"pnv"
)), 1) == npos);
}
SECTION(
"find_last_not_of"
) {
REQUIRE(s.find_last_not_of(FString(cstr(
"o"
))) == 13);
REQUIRE(s.find_last_not_of(FString(cstr(
"d"
))) == 12);
REQUIRE(s.find_last_not_of(FString(cstr(
"d"
)), 9999) == 12);
REQUIRE(s.find_last_not_of(FString(cstr(
"d"
)), 12) == 12);
REQUIRE(s.find_last_not_of(FString(cstr(
"o"
)), 12) == 11);
REQUIRE(s.find_last_not_of(FString(cstr(
"j"
)), 0) == npos);
REQUIRE(s.find_last_not_of(FString(EMPTY), 0) == 0);
REQUIRE(s.find_last_not_of(FString(EMPTY), 13) == 13);
REQUIRE(s.find_last_not_of(FString(EMPTY), 14) == 13);
REQUIRE(s.find_last_not_of(FString(EMPTY), 15) == 13);
REQUIRE(s.find_last_not_of(FString(cstr(
"nviy god"
))) == 3);
REQUIRE(s.find_last_not_of(FString(cstr(
"jpa "
)), 4) == 1);
REQUIRE(s.find_last_not_of(FString(cstr(
"jopa "
)), 4) == npos);
}
}
static void test_reserve () {
get_allocs();
SECTION(
"literal"
) {
get_allocs();
String s(LITERAL);
SECTION(
">len"
) {
s.reserve(100);
( run in 0.297 second using v1.01-cache-2.11-cpan-26ccb49234f )