Example #1
0
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;
}
Example #2
0
/*******************************VectorPtr********************************/
string Jce2Php::tostrVector(const VectorPtr &pPtr) const
{
    string s = string("c_vector (new ") + tostr(pPtr->getTypePtr()) + string(")");
    return s;
}
Example #3
0
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;
}