Optimizations to DTSC::Scan when called with raw character pointers.

This commit is contained in:
Thulinma 2014-05-12 13:56:44 +02:00
parent 9a19cf2e20
commit c973e5060c
2 changed files with 15 additions and 1 deletions

View file

@ -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();

View file

@ -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.