Пример #1
0
void ZFEnum::objectInfoVerboseT(ZF_IN_OUT zfstring &ret)
{
    ret += ZFTOKEN_ZFObjectInfoLeft;
    ret += this->classData()->className();
    ret += zfText("::");
    ret += this->enumName();
    ret += zfText("(");
    ret += zfsFromInt(this->enumValue());
    ret += zfText(")");
    ret += zfText(", count: ");
    ret += zfsFromInt(this->enumCount());

    ret += zfText(", content: ");
    const zfchar *dotToken = zfText(", ");
    for(zfindex i = 0; i < this->enumCount(); ++i)
    {
        ret += this->enumNameAtIndex(i);
        ret += zfText("=");
        ret += zfsFromInt(this->enumValueAtIndex(i));
        ret += dotToken;
    }
    if(this->enumCount() > 0)
    {
        ret.remove(ret.length() - zfslen(dotToken));
    }

    ret += ZFTOKEN_ZFObjectInfoRight;
}
Пример #2
0
// ============================================================
void ZFMethod::_ZFP_ZFMethod_init(ZF_IN zfbool methodIsUserRegister,
                                  ZF_IN ZFMethodGenericInvoker methodGenericInvoker,
                                  ZF_IN const zfchar *methodName,
                                  ZF_IN const zfchar *methodId,
                                  ZF_IN const zfchar *returnTypeName,
                                  ...)
{
    this->_ZFP_ZFMethod_methodIsUserRegister = methodIsUserRegister;
    this->_ZFP_ZFMethod_methodGenericInvoker = methodGenericInvoker;
    this->_ZFP_ZFMethod_methodGenericInvokerOrg = methodGenericInvoker;
    this->_ZFP_ZFMethod_methodName = methodName;
    this->_ZFP_ZFMethod_methodId = methodId + 1;
    this->_ZFP_ZFMethod_returnTypeName = returnTypeName;
    this->_ZFP_ZFMethod_paramNum = 0;

    va_list vaList;
    va_start(vaList, returnTypeName);
    const zfcharA *paramType = va_arg(vaList, const zfcharA *);
    while(paramType != zfnull && zfslen(paramType) > 0)
    {
        this->_ZFP_ZFMethod_paramTypeNameList[this->_ZFP_ZFMethod_paramNum++] = zfsCoreA2Z(paramType);
        paramType = va_arg(vaList, const zfcharA *);
    }
    va_end(vaList);
}
 virtual void jsonEscapeCharDecode(ZF_OUT const ZFOutputCallback &dst,
                                   ZF_IN const zfchar *src,
                                   ZF_IN_OPT zfindex count = zfindexMax)
 {
     for(const zfchar *srcEnd = src + ((count == zfindexMax) ? zfslen(src) : count); src != srcEnd; ++src)
     {
         if(*src == '\\' && src + 1 != srcEnd)
         {
             ++src;
             if(*src == '\"')
             {
                 dst << '\"';
             }
             else if(*src == '\\')
             {
                 dst << '\\';
             }
             else if(*src == 'n')
             {
                 dst << '\n';
             }
             else if(*src == 'r')
             {
                 dst << '\r';
             }
             else if(*src == 't')
             {
                 dst << '\t';
             }
             else if(*src == 'f')
             {
                 dst << '\f';
             }
             else if(*src == 'b')
             {
                 dst << '\b';
             }
             else
             {
                 dst << '\\';
                 dst << *src;
             }
         }
         else
         {
             dst << *src;
         }
     }
 }
Пример #4
0
void ZFMethod::_ZFP_ZFMethod_init(ZF_IN const zfchar *methodName,
                                  ZF_IN const zfchar *methodId,
                                  ZF_IN const zfchar *returnTypeName,
                                  ...)
{
    this->_ZFP_ZFMethod_methodName = methodName;
    this->_ZFP_ZFMethod_methodId = methodId + 1;
    this->_ZFP_ZFMethod_returnTypeName = returnTypeName;
    this->_ZFP_ZFMethod_paramNum = 0;

    va_list vaList;
    va_start(vaList, returnTypeName);
    const zfchar *paramType = va_arg(vaList, const zfchar *);
    while(paramType != zfnull && zfslen(paramType) > 0)
    {
        this->_ZFP_ZFMethod_paramTypeNameList[this->_ZFP_ZFMethod_paramNum++] = paramType;
        paramType = va_arg(vaList, const zfchar *);
    }
    va_end(vaList);
}
 virtual void jsonEscapeCharEncode(ZF_OUT const ZFOutputCallback &dst,
                                   ZF_IN const zfchar *src,
                                   ZF_IN_OPT zfindex count = zfindexMax)
 {
     for(const zfchar *srcEnd = src + ((count == zfindexMax) ? zfslen(src) : count); src != srcEnd; ++src)
     {
         if(*src == '\"')
         {
             dst << zfText("\\\"");
         }
         else if(*src == '\\')
         {
             dst << zfText("\\\\");
         }
         else if(*src == '\n')
         {
             dst << zfText("\\n");
         }
         else if(*src == '\r')
         {
             dst << zfText("\\r");
         }
         else if(*src == '\t')
         {
             dst << zfText("\\t");
         }
         else if(*src == '\f')
         {
             dst << zfText("\\f");
         }
         else if(*src == '\b')
         {
             dst << zfText("\\b");
         }
         else
         {
             dst << *src;
         }
     }
 }
ZF_NAMESPACE_GLOBAL_BEGIN

const zfchar *zfCoreDataPairSplitString(ZF_OUT ZFCoreArray<zfindexRange> &outData,
                                        ZF_IN zfindex desiredCountOrIndexMax,
                                        ZF_IN const zfchar *src,
                                        ZF_IN_OPT zfindex srcLen /* = zfindexMax */,
                                        ZF_IN_OPT zfchar leftToken /* = '(' */,
                                        ZF_IN_OPT zfchar rightToken /* = ')' */,
                                        ZF_IN_OPT const zfstring &separatorTokens /* = zfText(",") */,
                                        ZF_IN_OPT zfbool allowEmptyItem /* = zffalse */)
{
    if(src == zfnull) {return zfText("");}
    const zfchar *p = src;
    const zfchar *srcEnd = ((srcLen == zfindexMax) ? (src + zfslen(src)) : (src + srcLen));

    // leftToken
    zfcharSkipSpace(p, srcEnd);
    if(leftToken != '\0')
    {
        if(*p != leftToken) {return p;}
        ++p;
    }

    // each item
    zfindex count = 0;
    do
    {
        zfindex itemTokenCount = 0;

        // skip item header space
        zfcharSkipSpace(p, srcEnd);

        // find item end pos
        const zfchar *tmpPosL = p;
        const zfchar *tmpPosR = p;
        for( ; tmpPosR < srcEnd; ++tmpPosR)
        {
            if(zfstringFindFirstOf(separatorTokens, *tmpPosR) != zfindexMax)
            {
                if(itemTokenCount == 0)
                {
                    break;
                }
            }
            else
            {
                if(!zfcharIsSpace(*tmpPosR) && *tmpPosR != rightToken)
                {
                    tmpPosL = tmpPosR;
                }

                if(*tmpPosR == leftToken)
                {
                    ++itemTokenCount;
                }
                else if(*tmpPosR == rightToken)
                {
                    if(itemTokenCount > 0)
                    {
                        tmpPosL = tmpPosR;
                        --itemTokenCount;
                    }
                    else
                    {
                        break;
                    }
                }
            }
        }
        if(itemTokenCount != 0)
        {
            return tmpPosR;
        }
        if(tmpPosL != tmpPosR)
        {
            ++tmpPosL;
        }

        if(!allowEmptyItem && tmpPosL <= p) {return tmpPosL;}

        // save item
        outData.add(zfindexRangeMake(p - src, tmpPosL - p));
        ++count;

        // end item
        if(*tmpPosR == rightToken || tmpPosR >= srcEnd) {p = tmpPosR; break;}
        p = tmpPosR + 1;
    } while(count < desiredCountOrIndexMax);

    // count check
    if(desiredCountOrIndexMax != zfindexMax && count != desiredCountOrIndexMax)
    {
        return p;
    }

    // rightToken
    if(rightToken != '\0')
    {
        if(p == srcEnd || *p != rightToken)
        {
            return p;
        }
        ++p;
    }

    // tail check
    zfcharSkipSpace(p, srcEnd);
    if(p < srcEnd)
    {
        return p;
    }

    // success
    return zfnull;
}
/*
 * // '_' if null for encoded data
 *
 * {
 *     ClassNameEncoded
 *     (
 *         refTypeEncoded : refDataEncoded
 *     )
 *     (
 *         AttributeNameEncoded = AttributeValueEncoded;
 *         AttributeNameEncoded = AttributeValueEncoded;
 *     )
 *     [
 *         {ReferenceData},
 *         {ChildElement0},
 *         {ChildElement1}
 *     ]
 * }
 */
zfbool _ZFP_ZFSerializableDataFromString(ZF_OUT ZFSerializableData &serializableData,
                                         ZF_IN_OUT const zfchar *&encodedData,
                                         ZF_IN zfindex encodedDataLen,
                                         ZF_OUT zfstring *outErrorHintToAppend,
                                         ZF_IN_OPT zfbool validateTail = zffalse)
{
    if(encodedData == zfnull)
    {
        ZFSerializableUtil::errorOccurred(outErrorHintToAppend,
            zfText("invalid param"));
        return zffalse;
    }
    const zfchar *srcEnd = (encodedData + ((encodedDataLen == zfindexMax) ? zfslen(encodedData) : encodedDataLen));
    zfbool ret = zffalse;
    do
    {
        const zfchar *pLeft = zfnull;
        const zfchar *pRight = zfnull;
        zfstring decodedTmp;

        zfcharSkipSpaceAndEndl(encodedData, srcEnd);
        if(encodedData >= srcEnd || *encodedData != '{') {break;}
        ++encodedData;

        // class name
        zfcharSkipSpaceAndEndl(encodedData, srcEnd);
        pLeft = pRight = encodedData;
        while(*encodedData != '(' && encodedData < srcEnd)
        {
            if(!zfcharIsSpace(*encodedData))
            {
                zfcharMoveNext(encodedData);
                pRight = encodedData;
            }
            else
            {
                zfcharMoveNext(encodedData);
            }
        }
        if(encodedData >= srcEnd || *encodedData != '(') {break;}
        ++encodedData;

        if(pRight == pLeft + 1 && *pLeft == '_')
        {
            serializableData.itemClassSet(zfnull);
        }
        else
        {
            ZFCoreDataDecode(decodedTmp, zfstring(pLeft, pRight - pLeft).cString());
            serializableData.itemClassSet(decodedTmp.cString());
            decodedTmp.removeAll();
        }

        // refType
        zfcharSkipSpaceAndEndl(encodedData, srcEnd);
        pLeft = pRight = encodedData;
        while(*encodedData != ':' && encodedData < srcEnd)
        {
            if(!zfcharIsSpace(*encodedData))
            {
                zfcharMoveNext(encodedData);
                pRight = encodedData;
            }
            else
            {
                zfcharMoveNext(encodedData);
            }
        }
        if(encodedData >= srcEnd || *encodedData != ':') {break;}
        ++encodedData;

        if(pRight == pLeft + 1 && *pLeft == '_')
        {
            serializableData.referenceRefTypeSet(zfnull);
        }
        else
        {
            ZFCoreDataDecode(decodedTmp, zfstring(pLeft, pRight - pLeft).cString());
            serializableData.referenceRefTypeSet(decodedTmp.cString());
            decodedTmp.removeAll();
        }

        // refData
        zfcharSkipSpaceAndEndl(encodedData, srcEnd);
        pLeft = pRight = encodedData;
        while(*encodedData != ')' && encodedData < srcEnd)
        {
            if(!zfcharIsSpace(*encodedData))
            {
                zfcharMoveNext(encodedData);
                pRight = encodedData;
            }
            else
            {
                zfcharMoveNext(encodedData);
            }
        }
        if(encodedData >= srcEnd || *encodedData != ')') {break;}
        ++encodedData;

        if(pRight == pLeft + 1 && *pLeft == '_')
        {
            serializableData.referenceRefDataSet(zfnull);
        }
        else
        {
            ZFCoreDataDecode(decodedTmp, zfstring(pLeft, pRight - pLeft).cString());
            serializableData.referenceRefDataSet(decodedTmp.cString());
            decodedTmp.removeAll();
        }

        zfcharSkipSpaceAndEndl(encodedData, srcEnd);
        while(*encodedData != '(' && encodedData < srcEnd) {zfcharMoveNext(encodedData);}
        if(encodedData >= srcEnd || *encodedData != '(') {break;}
        ++encodedData;

        // attributes
        zfcharSkipSpaceAndEndl(encodedData, srcEnd);
        while(encodedData < srcEnd)
        {
            if(*encodedData == ')')
            {
                ++encodedData;
                ret = zftrue;
                break;
            }

            // name
            pLeft = pRight = encodedData;
            while(*encodedData != '=' && encodedData < srcEnd)
            {
                if(!zfcharIsSpace(*encodedData))
                {
                    zfcharMoveNext(encodedData);
                    pRight = encodedData;
                }
                else
                {
                    zfcharMoveNext(encodedData);
                }
            }
            if(encodedData >= srcEnd || *encodedData != '=') {break;}
            ++encodedData;

            zfstring attributeName;
            ZFCoreDataDecode(attributeName, zfstring(pLeft, pRight - pLeft).cString());

            // value
            zfcharSkipSpaceAndEndl(encodedData, srcEnd);
            pLeft = pRight = encodedData;
            while(*encodedData != ';' && encodedData < srcEnd)
            {
                if(!zfcharIsSpace(*encodedData))
                {
                    zfcharMoveNext(encodedData);
                    pRight = encodedData;
                }
                else
                {
                    zfcharMoveNext(encodedData);
                }
            }
            if(encodedData >= srcEnd || *encodedData != ';') {break;}
            ++encodedData;

            ZFCoreDataDecode(decodedTmp, zfstring(pLeft, pRight - pLeft).cString());

            // save
            if(!attributeName.isEmpty() && !decodedTmp.isEmpty())
            {
                serializableData.attributeSet(attributeName.cString(), decodedTmp.cString());
            }
            decodedTmp.removeAll();

            zfcharSkipSpaceAndEndl(encodedData, srcEnd);
        }
        if(!ret) {break;}
        ret = zffalse;

        zfcharSkipSpaceAndEndl(encodedData, srcEnd);
        if(encodedData >= srcEnd || *encodedData != '[') {break;}
        ++encodedData;

        // elements
        zfcharSkipSpaceAndEndl(encodedData, srcEnd);
        while(encodedData < srcEnd)
        {
            if(*encodedData == ']')
            {
                ++encodedData;
                ret = zftrue;
                break;
            }

            {
                ZFSerializableData element;
                if(!_ZFP_ZFSerializableDataFromString(element, encodedData, srcEnd - encodedData, outErrorHintToAppend))
                {
                    return zffalse;
                }
                serializableData.elementAdd(element);
            }

            zfcharSkipSpaceAndEndl(encodedData, srcEnd);
            if(encodedData >= srcEnd || (*encodedData != ',' && *encodedData != ']')) {break;}
            if(*encodedData == ',')
            {
                ++encodedData;
                zfcharSkipSpaceAndEndl(encodedData, srcEnd);
                if(encodedData >= srcEnd || *encodedData == ']') {break;}
            }
        }
        if(!ret) {break;}
        ret = zffalse;

        // tail
        zfcharSkipSpaceAndEndl(encodedData, srcEnd);
        if(encodedData >= srcEnd || *encodedData != '}') {break;}
        ++encodedData;
        if(validateTail)
        {
            zfcharSkipSpaceAndEndl(encodedData, srcEnd);
            if(encodedData < srcEnd) {break;}
        }

        ret = zftrue;
    } while(zffalse);
    if(!ret)
    {
        ZFSerializableUtil::errorOccurred(outErrorHintToAppend,
            zfText("wrong serializable string format at position: \"%s\""),
            zfstring(encodedData, srcEnd - encodedData).cString());
    }
    return ret;
}