//----------------------------------------------------------------------- void WSimpleSimulator::Init( WSolver * iSolver, std::istream & iTrainDataStream, std::istream & iTestDataStream ) // TODO make it work with data of arbitrary length { WSimulator::Init( iSolver, iTrainDataStream, iTestDataStream ); std::string ICoefficients = "1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 "; std::stringstream IStream( ICoefficients ); for( int i = 0; i < 20; ++i ) // TODO make it not hard-codeed. IStream >> m_ICoefficients[ i ]; std::string UCoefficients = "0 2000000000000 2000000000000 2000000000000 2000000000000 2000000000000 1000000000000 1000000000000 1000000000000 1000000000000 1000000000000 1000000000000 1000000000000 1000000000000 1000000000000 1000000000000 1000000000000 1000000000000 1000000000000 1000000000000"; std::stringstream testStream( UCoefficients ); for( int i = 0; i < 20; ++i ) testStream >> m_UCoefficients[ i ]; }
rdbc::packet * GetResult() { while (Valid()) { rdbc::pk_head head; // skip compact char compact[RDBC_PACK_COMPACT_SIZE + 1]; if (IStream()->Read(compact, RDBC_PACK_COMPACT_SIZE) == 0) break; compact[RDBC_PACK_COMPACT_SIZE] = 0; if (strcmp(compact, RDBC_PACK_COMPACT) != 0) { d_assert(0); d_log("packet compact error"); Close(0); break; } int skip = RDBC_PACK_COMPACT_SIZE; // read packet head if (IStream()->Read(&head, sizeof(head)) == 0) { IStream()->Skip(-skip); break; } skip += sizeof(head); // encrypt head if (M != 0) { rdbc::encrypt((char *)&head, sizeof(head), K, sizeof(K)); } int length = head.length & 0x7FFFFFFF; if (length <= 0 || length > RDBC_PACK_MAX_SIZE) { d_log("packet size invalid, id %d, size %d", head.id, head.length); Close(0); break; } // read data char buffer[RDBC_PACK_MAX_SIZE]; if (IStream()->Read(buffer, length) == 0) { IStream()->Skip(-skip); break; } char * data = buffer; static_memory buffer2; if (head.length & 0x80000000) { buffer2.query(RDBC_STATIC_MEMORY_CHANEL, RDBC_PACK_MAX_SIZE); length = Math::RLE8_Decode((byte *)buffer2.data(), RDBC_PACK_MAX_SIZE, (const byte *)buffer, length); if (length < 0) { d_log("packet uncompress error, '%d'", head.id); Close(0); break; } data = (char *)buffer2.data(); } ISerializerM IS((byte *)data, length, false); rdbc::packet * pk = Root::Instance()->NEW_OBJECT_T<rdbc::packet>(head.id); if (pk == NULL) { d_log("packet unregister '%d'", head.id); Close(0); break; } pk->Serialize(IS); buffer2.free(); return pk; } return NULL; }
IStream Session::open ( const string& url ) { return (IStream(*this, url)); }