Esempio n. 1
0
static int GetInt4(FILE *fc,FILE *ts)
{	int iv;

	iv = GetInt2(fc,ts);
	if( LEND )
		iv = (GetInt2(fc,ts) << 16) | iv;
	else	iv = (iv << 16) | GetInt2(fc,ts);
	return iv;
}
Esempio n. 2
0
/**
 @brief strNodeName elem밑에 "val" element들의 값을 int로 읽어 어레이에 담는다.
 @param strNodeName 전 xml에 걸쳐 고유한 이름
*/
int XGlobalVal::GetAryInt( const std::string& strNodeName, XVector<int>* pOutAry )
{
	int numItems = 0;
	if( m_nodeRoot.IsEmpty() )
		return 0;
	if( XASSERT( !strNodeName.empty() ) ) {
		// array가 될 루트 노드를 찾는다.
		auto nodeAry = m_nodeRoot.FindNodeRecursive( strNodeName.c_str() );
		if( nodeAry.IsEmpty() )
			return 0;
		// 루트노드 아래의 "val" element를 모두 찾음.
		auto nodeElem = nodeAry.GetFirst();
		while( nodeElem.IsHave() ) {
			int val = 0;
			nodeElem.GetInt2( &val );
// 			const int val = nodeElem.GetInt( "val" );
			pOutAry->Add( val );
			nodeElem = nodeElem.GetNext();
		}
	}
	return numItems;
}
Esempio n. 3
0
string CVariant::GetString(void) const
{
    string s("");

    if( IsNull() )
    {
        switch( GetType() ) {
            case eDB_TinyInt:
            case eDB_SmallInt:
            case eDB_Int:
            case eDB_BigInt:
            case eDB_Numeric:
                s = "0";
                break;
            case eDB_Float:
            case eDB_Double:
                s = "0.0";
                break;
            default:
                break;
        }
    }
    else
    {
        switch( GetType() ) {
            case eDB_Char:
            case eDB_VarChar:
            case eDB_LongChar:
                s = ((CDB_String*)GetData())->Value();
                break;
            case eDB_Binary:
                {
                    CDB_Binary *b = (CDB_Binary*)GetData();
                    s = string((char*)b->Value(), b->Size());
                    break;
                }
            case eDB_LongBinary:
                {
                    CDB_LongBinary *vb = (CDB_LongBinary*)GetData();
                    s = string((char*)vb->Value(), vb->DataSize());
                    break;
                }
            case eDB_VarBinary:
                {
                    CDB_VarBinary *vb = (CDB_VarBinary*)GetData();
                    s = string((char*)vb->Value(), vb->Size());
                    break;
                }
            case eDB_TinyInt:
                s = NStr::IntToString(GetByte());
                break;
            case eDB_SmallInt:
                s = NStr::IntToString(GetInt2());
                break;
            case eDB_Int:
                s = NStr::IntToString(GetInt4());
                break;
            case eDB_BigInt:
                s = NStr::Int8ToString(GetInt8());
                break;
            case eDB_Float:
                s = NStr::DoubleToString(GetFloat());
                break;
            case eDB_Double:
                s = NStr::DoubleToString(GetDouble());
                break;
            case eDB_Bit:
                s = NStr::BoolToString(GetBit());
                break;
            case eDB_Numeric:
                s = ((CDB_Numeric*)GetData())->Value();
                break;
            case eDB_DateTime:
            case eDB_SmallDateTime:
                s = GetCTime().AsString();
                break;
            case eDB_Text:
            case eDB_Image:
                {
                    CDB_Stream* stream = (CDB_Stream*)GetData();
                    char* buff[4096];
                    size_t read_bytes = 0;
                
                    s.reserve(stream->Size());
                    while ((read_bytes = stream->Read(buff, sizeof(buff))) != 0) {
                        s.append((const char*) buff, read_bytes);

                        if (read_bytes < sizeof(buff)) {
                            break;
                        }
                    }
                }
                break;
            default:
                x_Verify_AssignType(eDB_UnsupportedType, "string");
                break;
        }
    }

    return s;
}
Esempio n. 4
0
static int XCS(XFlash *Xf){
	Connection *Conn = Xf->xf_Conn;
	int count;
	int total;
	FILE *fc;
	FILE *ts;
	int ch,op;
	int b_order;
	int min; /* minor opcode ? */
	int len;
	int rem;
	int ci;
	int ver,rev,nan,nad;
	OpQue *qop = 0;

	total = count = 0;
	fc = fdopen(FromC,"r");
	ts = fdopen(ToS,"w");

	if( 1 ){ /* CS specific ? */
		b_order = Getc(fc,ts);
		fprintf(stderr,"CS BYTEORDER: %X:%c\n",b_order,b_order);
		if( b_order == 'l' || b_order == 'L' ){
			Verbose("#### LITTLE ENDIEN ####\n");
			LEND = 1;
		}else	LEND = 0;
		Getc(fc,ts); /* padding */

		ver = GetInt2(fc,ts);
		rev = GetInt2(fc,ts);
		fprintf(stderr,"CS VERSION: %d.%d\n",ver,rev);
		nan = GetInt2(fc,ts);
		nad = GetInt2(fc,ts);
		GetInt2(fc,ts); /* padding */

		for(;;){
			const char *sop = 0;
			int withret;

			if( ready_cc(fc) == 0 )
				fflush(ts);
			op = getc(fc);
			if( op == EOF ){
				fprintf(stderr,"EOF from the client\n");
				break;
			}
			if( putc(op,ts) == EOF ){
				fprintf(stderr,"EOF from the server\n");
				break;
			}
			min = Getc(fc,ts);
			len = GetInt2(fc,ts);
			Qseq++;
			sop = opsym(op,&withret);
			if( sop != 0 && withret ){
				qop = enqOp(Qseq,op);
			}else{
				qop = 0;
			}
			if( sop ){
				fprintf(stderr,"#%d CS %-20s %3d %4d",Qseq,sop,min,len);
			}else{
				fprintf(stderr,"#%d CS ?%-19d %3d %4d ----",Qseq,op,min,len);
			}

			switch( op ){
				case OP_ClearArea:
					relayClearArea(Xf,fc,ts,len,min);
					break;
				case OP_ImageText8:
					relayImageText8(Xf,fc,ts,len,min);
					break;
				case OP_InternAtom:
					relayInternAtom(Xf,fc,ts,len);
					break;
				case OP_QueryExtension:
					relayQueryExtension(Xf,qop,fc,ts,len);
					break;
				case OP_FillPoly:
					relayFillPoly(Xf,fc,ts,len);
					break;
				case OP_PolyFillArc:
					relayPolyFillArc(Xf,qop,fc,ts,len);
					break;
				default:
					relayRequest(Xf,qop,fc,ts,len);
					break;
			}
			fflush(ts);
			fflush(stderr);
			count += 1;
			total += 1;
		}
	}
	fprintf(stderr,"---- CS-RELAY[%d>%d]: %dBytes %dI/O\n",FromC,ToS,total,count);
	return total;
}