Optimizations to DTSC::Scan when called with raw character pointers.
This commit is contained in:
parent
9a19cf2e20
commit
c973e5060c
2 changed files with 15 additions and 1 deletions
|
@ -73,6 +73,8 @@ namespace DTSC {
|
||||||
Scan(char * pointer, size_t len);
|
Scan(char * pointer, size_t len);
|
||||||
std::string toPrettyString(unsigned int indent = 0);
|
std::string toPrettyString(unsigned int indent = 0);
|
||||||
Scan getMember(std::string indice);
|
Scan getMember(std::string indice);
|
||||||
|
Scan getMember(const char * indice);
|
||||||
|
Scan getMember(const char * indice, const unsigned int ind_len);
|
||||||
Scan getIndice(unsigned int num);
|
Scan getIndice(unsigned int num);
|
||||||
|
|
||||||
char getType();
|
char getType();
|
||||||
|
|
|
@ -361,6 +361,12 @@ namespace DTSC {
|
||||||
/// Returns an object representing the named indice of this object.
|
/// Returns an object representing the named indice of this object.
|
||||||
/// Returns an invalid object if this indice doesn't exist or this isn't an object type.
|
/// Returns an invalid object if this indice doesn't exist or this isn't an object type.
|
||||||
Scan Scan::getMember(std::string indice){
|
Scan Scan::getMember(std::string indice){
|
||||||
|
return getMember(indice.data(), indice.size());
|
||||||
|
}
|
||||||
|
|
||||||
|
/// Returns an object representing the named indice of this object.
|
||||||
|
/// Returns an invalid object if this indice doesn't exist or this isn't an object type.
|
||||||
|
Scan Scan::getMember(const char * indice, const unsigned int ind_len){
|
||||||
if (getType() != DTSC_OBJ && getType() != DTSC_CON){
|
if (getType() != DTSC_OBJ && getType() != DTSC_CON){
|
||||||
return Scan();
|
return Scan();
|
||||||
}
|
}
|
||||||
|
@ -372,7 +378,7 @@ namespace DTSC {
|
||||||
}
|
}
|
||||||
unsigned int strlen = i[0] * 256 + i[1];
|
unsigned int strlen = i[0] * 256 + i[1];
|
||||||
i += 2;
|
i += 2;
|
||||||
if (indice.size() == strlen && strncmp(indice.data(), i, strlen) == 0){
|
if (ind_len == strlen && strncmp(indice, i, strlen) == 0){
|
||||||
return Scan(i+strlen, len-(i-p));
|
return Scan(i+strlen, len-(i-p));
|
||||||
}else{
|
}else{
|
||||||
i = skipDTSC(i+strlen, p+len);
|
i = skipDTSC(i+strlen, p+len);
|
||||||
|
@ -384,6 +390,12 @@ namespace DTSC {
|
||||||
return Scan();
|
return Scan();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// Returns an object representing the named indice of this object.
|
||||||
|
/// Returns an invalid object if this indice doesn't exist or this isn't an object type.
|
||||||
|
Scan Scan::getMember(const char * indice){
|
||||||
|
return getMember(indice, strlen(indice));
|
||||||
|
}
|
||||||
|
|
||||||
/// Returns an object representing the num-th indice of this array.
|
/// Returns an object representing the num-th indice of this array.
|
||||||
/// If not an array but an object, it returns the num-th member, instead.
|
/// If not an array but an object, it returns the num-th member, instead.
|
||||||
/// Returns an invalid object if this indice doesn't exist or this isn't an array or object type.
|
/// Returns an invalid object if this indice doesn't exist or this isn't an array or object type.
|
||||||
|
|
Loading…
Add table
Reference in a new issue