-
Notifications
You must be signed in to change notification settings - Fork 1.2k
Closed
Description
I am reporting this issue. not very critical but also trivial to address I guess.
you cannot use std::advance() with simdjson array iterators.
/*
* getRandomThumbnail()
*/
std::string_view TrillionTrader::Publer::Video::getRandomThumbnail() const noexcept
{
std::string_view res;
int idx{rand()%m_thumbnails_num};
try {
simdjson::ondemand::document
doc{simdjson::ondemand::parser::get_parser().iterate(m_thumbnails_json)};
simdjson::ondemand::array thumbnails_arr{doc.get_array()};
auto it{thumbnails_arr.begin()};
std::advance(it, idx);
simdjson::ondemand::object thumbNail_obj{*it};
res = thumbNail_obj["small"];
}
catch (simdjson::simdjson_error &e) {
ERROR1("simdjson_error exception caught: %s", e.what());
}
return res;
}
generates
In file included from /usr/include/c++/15.2.1/bits/stl_algobase.h:66,
from /usr/include/c++/15.2.1/array:45,
from publer_poster.h:11,
from publer_poster.cpp:11:
/usr/include/c++/15.2.1/bits/stl_iterator_base_funcs.h: In instantiation of ‘constexpr void std::advance(_InputIterator&, _Distance) [with _InputIterator = simdjson::simdjson_result<simdjson::icelake::ondemand::array_iterator>; _Distance = int]’:
publer_poster.cpp:408:21: required from here
408 | std::advance(it, idx);
| ~~~~~~~~~~~~^~~~~~~~~
/usr/include/c++/15.2.1/bits/stl_iterator_base_funcs.h:225:65: error: no type named ‘difference_type’ in ‘struct std::iterator_traits<simdjson::simdjson_result<simdjson::icelake::ondemand::array_iterator> >’
225 | typename iterator_traits<_InputIterator>::difference_type __d = __n;
| ^~~
/usr/include/c++/15.2.1/bits/stl_iterator_base_funcs.h:226:56: error: no matching function for call to ‘__iterator_category(simdjson::simdjson_result<simdjson::icelake::ondemand::array_iterator>&)’
226 | std::__advance(__i, __d, std::__iterator_category(__i));
| ~~~~~~~~~~~~~~~~~~~~~~~~^~~~~
/usr/include/c++/15.2.1/bits/stl_iterator_base_funcs.h:226:56: note: there is 1 candidate
In file included from /usr/include/c++/15.2.1/bits/stl_algobase.h:65:
/usr/include/c++/15.2.1/bits/stl_iterator_base_types.h:241:5: note: candidate 1: ‘template<class _Iter> constexpr typename std::iterator_traits<_Iterator>::iterator_category std::__iterator_category(const _Iter&)’
241 | __iterator_category(const _Iter&)
| ^~~~~~~~~~~~~~~~~~~
/usr/include/c++/15.2.1/bits/stl_iterator_base_types.h:241:5: note: template argument deduction/substitution failed:
/usr/include/c++/15.2.1/bits/stl_iterator_base_types.h: In substitution of ‘template<class _Iter> constexpr typename std::iterator_traits<_Iterator>::iterator_category std::__iterator_category(const _Iter&) [with _Iter = simdjson::simdjson_result<simdjson::icelake::ondemand::array_iterator>]’:
/usr/include/c++/15.2.1/bits/stl_iterator_base_funcs.h:226:56: required from ‘constexpr void std::advance(_InputIterator&, _Distance) [with _InputIterator = simdjson::simdjson_result<simdjson::icelake::ondemand::array_iterator>; _Distance = int]’
226 | std::__advance(__i, __d, std::__iterator_category(__i));
| ~~~~~~~~~~~~~~~~~~~~~~~~^~~~~
publer_poster.cpp:408:21: required from here
408 | std::advance(it, idx);
| ~~~~~~~~~~~~^~~~~~~~~
/usr/include/c++/15.2.1/bits/stl_iterator_base_types.h:241:5: error: no type named ‘iterator_category’ in ‘struct std::iterator_traits<simdjson::simdjson_result<simdjson::icelake::ondemand::array_iterator> >’
241 | __iterator_category(const _Iter&)
| ^~~~~~~~~~~~~~~~~~~
make: *** [Makefile.libtradecore.nosync:96: publer_poster.o] Error 1
forcing the user to revert back to boilerplate C code...
/*
* getRandomThumbnail()
*/
std::string_view TrillionTrader::Publer::Video::getRandomThumbnail() const noexcept
{
std::string_view res;
int idx{rand()%m_thumbnails_num};
try {
simdjson::ondemand::document
doc{simdjson::ondemand::parser::get_parser().iterate(m_thumbnails_json)};
simdjson::ondemand::array thumbnails_arr{doc.get_array()};
auto it{thumbnails_arr.begin()};
while (idx-- > 0)
++it;
simdjson::ondemand::object thumbNail_obj{*it};
res = thumbNail_obj["small"];
}
catch (simdjson::simdjson_error &e) {
ERROR1("simdjson_error exception caught: %s", e.what());
}
return res;
}
Reactions are currently unavailable
Metadata
Metadata
Assignees
Labels
No labels