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;
|
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);
|
result = dim.at(dim.size() - 1);
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
if (!dim.empty()) // if ndarray, convert to an object in JData annotated array format
|
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_";
|
string_t key = "_ArraySize_";
|
||||||
if (JSON_HEDLEY_UNLIKELY(!sax->start_object(3) || !sax->key(key) || !sax->start_array(dim.size())))
|
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;
|
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);
|
result = dim.at(dim.size() - 1);
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
if (!dim.empty()) // if ndarray, convert to an object in JData annotated array format
|
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_";
|
string_t key = "_ArraySize_";
|
||||||
if (JSON_HEDLEY_UNLIKELY(!sax->start_object(3) || !sax->key(key) || !sax->start_array(dim.size())))
|
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
|
// create vector with two elements of the same type
|
||||||
std::vector<uint8_t> v_0 = {'[', '$', 'i', '#', '[', ']'};
|
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_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_U = {'[', '$', 'U', '#', '[', 'i', 1, 'i', 2, ']', 0xFF, 0xFF};
|
||||||
std::vector<uint8_t> v_I = {'[', '$', 'I', '#', '[', 'i', 1, 'i', 2, ']', 0xFF, 0x7F, 0xFF, 0x7F};
|
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 if vector is parsed correctly
|
||||||
CHECK(json::from_bjdata(v_0) == json::array());
|
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_i) == json({127, 127}));
|
||||||
CHECK(json::from_bjdata(v_U) == json({255, 255}));
|
CHECK(json::from_bjdata(v_U) == json({255, 255}));
|
||||||
CHECK(json::from_bjdata(v_I) == json({32767, 32767}));
|
CHECK(json::from_bjdata(v_I) == json({32767, 32767}));
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user