use a loop to test 0 ndarray dimension
This commit is contained in:
parent
838facbb43
commit
7fc8e4e0d3
@ -2113,13 +2113,22 @@ class binary_reader
|
||||
{
|
||||
return false;
|
||||
}
|
||||
if (dim.size() == 1 || (dim.size() == 2 && dim.at(0) == 1) || std::count(dim.begin(), dim.end(), 0) > 0) // return normal array size if 1D row vector or total length is 0
|
||||
if (dim.size() == 1 || (dim.size() == 2 && dim.at(0) == 1)) // return normal array size if 1D row vector
|
||||
{
|
||||
result = dim.at(dim.size() - 1);
|
||||
return true;
|
||||
}
|
||||
if (!dim.empty()) // if ndarray, convert to an object in JData annotated array format
|
||||
{
|
||||
for (auto i : dim)
|
||||
{
|
||||
if ( i == 0 )
|
||||
{
|
||||
result = 0;
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
string_t key = "_ArraySize_";
|
||||
if (JSON_HEDLEY_UNLIKELY(!sax->start_object(3) || !sax->key(key) || !sax->start_array(dim.size())))
|
||||
{
|
||||
|
||||
@ -10587,13 +10587,22 @@ class binary_reader
|
||||
{
|
||||
return false;
|
||||
}
|
||||
if (dim.size() == 1 || (dim.size() == 2 && dim.at(0) == 1) || std::count(dim.begin(), dim.end(), 0) > 0) // return normal array size if 1D row vector or total length is 0
|
||||
if (dim.size() == 1 || (dim.size() == 2 && dim.at(0) == 1)) // return normal array size if 1D row vector
|
||||
{
|
||||
result = dim.at(dim.size() - 1);
|
||||
return true;
|
||||
}
|
||||
if (!dim.empty()) // if ndarray, convert to an object in JData annotated array format
|
||||
{
|
||||
for (auto i : dim)
|
||||
{
|
||||
if ( i == 0 )
|
||||
{
|
||||
result = 0;
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
string_t key = "_ArraySize_";
|
||||
if (JSON_HEDLEY_UNLIKELY(!sax->start_object(3) || !sax->key(key) || !sax->start_array(dim.size())))
|
||||
{
|
||||
|
||||
@ -2363,6 +2363,7 @@ TEST_CASE("BJData")
|
||||
{
|
||||
// create vector with two elements of the same type
|
||||
std::vector<uint8_t> v_0 = {'[', '$', 'i', '#', '[', ']'};
|
||||
std::vector<uint8_t> v_E = {'[', '$', 'i', '#', '[', 'i', 2, 'i', 0, ']'};
|
||||
std::vector<uint8_t> v_i = {'[', '$', 'i', '#', '[', 'i', 1, 'i', 2, ']', 0x7F, 0x7F};
|
||||
std::vector<uint8_t> v_U = {'[', '$', 'U', '#', '[', 'i', 1, 'i', 2, ']', 0xFF, 0xFF};
|
||||
std::vector<uint8_t> v_I = {'[', '$', 'I', '#', '[', 'i', 1, 'i', 2, ']', 0xFF, 0x7F, 0xFF, 0x7F};
|
||||
@ -2377,6 +2378,7 @@ TEST_CASE("BJData")
|
||||
|
||||
// check if vector is parsed correctly
|
||||
CHECK(json::from_bjdata(v_0) == json::array());
|
||||
CHECK(json::from_bjdata(v_E) == json::array());
|
||||
CHECK(json::from_bjdata(v_i) == json({127, 127}));
|
||||
CHECK(json::from_bjdata(v_U) == json({255, 255}));
|
||||
CHECK(json::from_bjdata(v_I) == json({32767, 32767}));
|
||||
|
||||
Loading…
Reference in New Issue
Block a user