//-----------------------------------------------------------------------
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 ];
}
Exemple #2
0
		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;
		}
Exemple #3
0
 IStream Session::open ( const string& url )
 {
     return (IStream(*this, url));
 }