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; }
// ============================================================ 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; } } }
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; }