Merge pull request #1567 from AtnNn/master
Allow pointer tokens to have non-null-terminated strings
This commit is contained in:
commit
fcec7735dc
@ -488,7 +488,7 @@ public:
|
|||||||
v = &((*v)[t->index]);
|
v = &((*v)[t->index]);
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
typename ValueType::MemberIterator m = v->FindMember(GenericStringRef<Ch>(t->name, t->length));
|
typename ValueType::MemberIterator m = v->FindMember(GenericValue<EncodingType>(GenericStringRef<Ch>(t->name, t->length)));
|
||||||
if (m == v->MemberEnd()) {
|
if (m == v->MemberEnd()) {
|
||||||
v->AddMember(ValueType(t->name, t->length, allocator).Move(), ValueType().Move(), allocator);
|
v->AddMember(ValueType(t->name, t->length, allocator).Move(), ValueType().Move(), allocator);
|
||||||
v = &(--v->MemberEnd())->value; // Assumes AddMember() appends at the end
|
v = &(--v->MemberEnd())->value; // Assumes AddMember() appends at the end
|
||||||
@ -543,7 +543,7 @@ public:
|
|||||||
switch (v->GetType()) {
|
switch (v->GetType()) {
|
||||||
case kObjectType:
|
case kObjectType:
|
||||||
{
|
{
|
||||||
typename ValueType::MemberIterator m = v->FindMember(GenericStringRef<Ch>(t->name, t->length));
|
typename ValueType::MemberIterator m = v->FindMember(GenericValue<EncodingType>(GenericStringRef<Ch>(t->name, t->length)));
|
||||||
if (m == v->MemberEnd())
|
if (m == v->MemberEnd())
|
||||||
break;
|
break;
|
||||||
v = &m->value;
|
v = &m->value;
|
||||||
@ -779,7 +779,7 @@ public:
|
|||||||
switch (v->GetType()) {
|
switch (v->GetType()) {
|
||||||
case kObjectType:
|
case kObjectType:
|
||||||
{
|
{
|
||||||
typename ValueType::MemberIterator m = v->FindMember(GenericStringRef<Ch>(t->name, t->length));
|
typename ValueType::MemberIterator m = v->FindMember(GenericValue<EncodingType>(GenericStringRef<Ch>(t->name, t->length)));
|
||||||
if (m == v->MemberEnd())
|
if (m == v->MemberEnd())
|
||||||
return false;
|
return false;
|
||||||
v = &m->value;
|
v = &m->value;
|
||||||
|
@ -674,6 +674,9 @@ TEST(Pointer, Get) {
|
|||||||
EXPECT_EQ(2u, unresolvedTokenIndex);
|
EXPECT_EQ(2u, unresolvedTokenIndex);
|
||||||
EXPECT_TRUE(Pointer("/foo/0/a").Get(d, &unresolvedTokenIndex) == 0); // "/foo/0" is an string, cannot further query
|
EXPECT_TRUE(Pointer("/foo/0/a").Get(d, &unresolvedTokenIndex) == 0); // "/foo/0" is an string, cannot further query
|
||||||
EXPECT_EQ(2u, unresolvedTokenIndex);
|
EXPECT_EQ(2u, unresolvedTokenIndex);
|
||||||
|
|
||||||
|
Pointer::Token tokens[] = { { "foo ...", 3, kPointerInvalidIndex } };
|
||||||
|
EXPECT_EQ(&d["foo"], Pointer(tokens, 1).Get(d));
|
||||||
}
|
}
|
||||||
|
|
||||||
TEST(Pointer, GetWithDefault) {
|
TEST(Pointer, GetWithDefault) {
|
||||||
|
Loading…
x
Reference in New Issue
Block a user