string TarsAnalyzer::tostrVector(const VectorPtr &pPtr) { //数组类型 if(pPtr->isArray()) { return tostr(pPtr->getTypePtr()); } //指针类型 if(pPtr->isPointer()) { return tostr(pPtr->getTypePtr())+" *"; } string s = Builtin::builtinTable[Builtin::KindVector] + string("<") + tostr(pPtr->getTypePtr()); if(MapPtr::dynamicCast(pPtr->getTypePtr()) || VectorPtr::dynamicCast(pPtr->getTypePtr())) { s += " >"; } else { s += ">"; } return s; }
/*******************************VectorPtr********************************/ string Jce2Php::tostrVector(const VectorPtr &pPtr) const { string s = string("c_vector (new ") + tostr(pPtr->getTypePtr()) + string(")"); return s; }
int TarsAnalyzer::readVector(const VectorPtr &pPtr, int expectTag, bool isRequire, TypeIdPtr pType) { { int type; AnalyzerDataHead h; h.readFrom(*this); uint8_t t=0; uint8_t tag =h.getTag(); int ret = compareTag(tag, expectTag,isRequire); if (ret != eOK) { return 0; } switch (h.getType()) { case AnalyzerDataHead::eList: { int size; read(size, t, type); cout << getTab()<< "read buf tag " << (int)tag << " vector size:" << size << endl; if (size < 0|| size > 10 * 1024 * 1024) { cout<< getTab() << "ERROR, invalid size, tag: " << (int)tag << endl; exit(-1); } //addTab(7); cout << getTab()<<"{ //tag:" << (int)tag << endl; for (int i = 0; i < size; ++i) { cout << getTab() << " index:" << i << " "; readType(pPtr->getTypePtr(), 0, isRequire); } cout << getTab()<<"} //tag:" << (int)tag << endl; //eraseTab(7); } break; case AnalyzerDataHead::eSimpleList: { AnalyzerDataHead hh; hh.readFrom(*this); if (hh.getType() != AnalyzerDataHead::eChar) { cout<< getTab() << "error, type mismatch, tag: " << (int)tag; cout << getTab() << " _cur:" << _cur << " _last_pos:" << _last_pos ; } int size; read(size, t, type); cout<< getTab() << "read buf tag " << (int)tag << " vector byte size:" << size << endl; if (size < 0 || size > 10 * 1024 * 1024) { cout<< getTab() << "ERROR, invalid size " << size << endl; cout << getTab() << " _cur:" << _cur << " _last_pos:" << _last_pos ; exit(-1); } char *ss = new char[size]; try { memset(ss, 0, size); readBuf(ss, size); // debug 再打开 //cout << getTab()<< "tag " << (int)tag << " vector byte :\n" << tars::TC_Common::bin2str(ss, size, " ", chars_one_line) << endl; } catch (...) { delete[] ss; throw; } delete[] ss; } break; default: { cout << getTab() << "ERROR, read 'vector' type mismatch, tag: " << (int)tag << " get type: " << h.tostrType(h.getType()) << endl; cout << getTab() << " _cur:" << _cur << " _last_pos:" << _last_pos << endl;; exit(-1); } } } return 0; }