Ejemplo n.º 1
0
bool SimpleParser::FindNextString( SimpleString *sourcePtr,  SimpleString *currentPtr,  SimpleString *findPtr, SimpleString *resultStringPtr)
{
    bool result = false;
    SInt32 length = 0;

    
    do 
    {
        if (NULL == sourcePtr) break;
        if (NULL == currentPtr) break;
        if (NULL == findPtr) break;
        if (NULL == sourcePtr->fTheString) break;
        if (NULL == currentPtr->fTheString) break;
        
        SimpleString tempSource(NULL);  
        

        length =  currentPtr->fTheString - sourcePtr->fTheString;
        if (length < 0) break;
        if (length > sourcePtr->fLen) break;

        length = sourcePtr->fLen - (length + currentPtr->fLen); // the remaining length to search
        tempSource.SetString(&currentPtr->fTheString[currentPtr->fLen], length); // step past the end of current with remaining length
        
        result = FindString(&tempSource, findPtr, resultStringPtr);
    
    } while (false);

    return result;

}
Ejemplo n.º 2
0
bool SimpleParser::GetNextThing(SimpleString *sourcePtr, SimpleString *currentPtr, char *findChars, SimpleString *resultStringPtr)
{
    bool result = false;

    do 
    {
        if (NULL == sourcePtr) break;
        if (NULL == currentPtr) break;
        if (NULL == findChars) break;
        
        if ( (PointerSizedInt) currentPtr->fTheString < (PointerSizedInt) sourcePtr->fTheString) 
            break;
            
        if (NULL ==  sourcePtr->fTheString) 
        {   //qtss_printf("NULL sourcePtr->fTheString in GetNextThing \n");
            break;
        }
        if (NULL ==  currentPtr->fTheString) 
        {   //qtss_printf("NULL currentPtr->fTheString in GetNextThing \n");
            break;
        }
        
        PointerSizedInt endSource =  (PointerSizedInt) &sourcePtr->fTheString[sourcePtr->fLen];
        PointerSizedInt endCurrent = (PointerSizedInt) &currentPtr->fTheString[currentPtr->fLen];

        if (endCurrent > endSource) break;
        
        SimpleString tempSource(NULL);  
        
        
        UInt32 searchLen = endSource - endCurrent;
        
        tempSource.SetString(&currentPtr->fTheString[currentPtr->fLen], searchLen); // step past the end of current with remaining length
        
        result = FindDelimeter(&tempSource, findChars,resultStringPtr);
    
    } while (false);

    return result;
}
Ejemplo n.º 3
0
document_ptr Document::Create(const char* id, script_object_ptr obj, sequence_type seqNum, bool incrementRev) {
    const char* oldRev = obj->getString("_rev", false);
    const char* newRev = nullptr;
    DocumentRevision::RevString newRevString;
    
    if (incrementRev || oldRev == nullptr) {
        // TODO: strtoul is unsafe
        auto oldVersion = oldRev != nullptr ? std::strtoul(oldRev, nullptr, 10) : 0;
        auto nextVersion = oldVersion + 1;
    
        rs::scriptobject::ScriptObjectHash digest;
        obj->CalculateHash(digest, &Document::ValidateHashField);

        DocumentRevision::FormatRevision(nextVersion, digest, newRevString);
        newRev = newRevString.data();
    }
    
    document_ptr doc;
    if (obj->getType("_id") == rs::scriptobject::ScriptObjectType::String &&
        oldRev != nullptr &&
        obj->setString("_id", id) &&
        (newRev == nullptr || obj->setString("_rev", newRev))) {
        doc = boost::make_shared<document_ptr::element_type>(obj, seqNum);
    } else {
        rs::scriptobject::utils::ObjectVector tempDefn = {
            std::make_pair("_id", rs::scriptobject::utils::VectorValue(id)),
            std::make_pair("_rev", rs::scriptobject::utils::VectorValue(newRev ? newRev : oldRev))
        };
        
        rs::scriptobject::utils::ScriptObjectVectorSource tempSource(tempDefn);
        
        auto tempObj = rs::scriptobject::ScriptObjectFactory::CreateObject(tempSource);
        
        auto newObj = rs::scriptobject::ScriptObject::Merge(obj, tempObj, rs::scriptobject::ScriptObject::MergeStrategy::Front);
        
        doc = boost::make_shared<document_ptr::element_type>(newObj, seqNum);
    }
    
    return doc;
}