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; }
/** @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; }
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; }
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; }