1f0baefc76087f208e58af77dccaecdbac73e1247Mika Isojärvi/*-------------------------------------------------------------------------
2f0baefc76087f208e58af77dccaecdbac73e1247Mika Isojärvi * drawElements Quality Program Tester Core
3f0baefc76087f208e58af77dccaecdbac73e1247Mika Isojärvi * ----------------------------------------
4f0baefc76087f208e58af77dccaecdbac73e1247Mika Isojärvi *
5f0baefc76087f208e58af77dccaecdbac73e1247Mika Isojärvi * Copyright 2014 The Android Open Source Project
6f0baefc76087f208e58af77dccaecdbac73e1247Mika Isojärvi *
7f0baefc76087f208e58af77dccaecdbac73e1247Mika Isojärvi * Licensed under the Apache License, Version 2.0 (the "License");
8f0baefc76087f208e58af77dccaecdbac73e1247Mika Isojärvi * you may not use this file except in compliance with the License.
9f0baefc76087f208e58af77dccaecdbac73e1247Mika Isojärvi * You may obtain a copy of the License at
10f0baefc76087f208e58af77dccaecdbac73e1247Mika Isojärvi *
11f0baefc76087f208e58af77dccaecdbac73e1247Mika Isojärvi *      http://www.apache.org/licenses/LICENSE-2.0
12f0baefc76087f208e58af77dccaecdbac73e1247Mika Isojärvi *
13f0baefc76087f208e58af77dccaecdbac73e1247Mika Isojärvi * Unless required by applicable law or agreed to in writing, software
14f0baefc76087f208e58af77dccaecdbac73e1247Mika Isojärvi * distributed under the License is distributed on an "AS IS" BASIS,
15f0baefc76087f208e58af77dccaecdbac73e1247Mika Isojärvi * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
16f0baefc76087f208e58af77dccaecdbac73e1247Mika Isojärvi * See the License for the specific language governing permissions and
17f0baefc76087f208e58af77dccaecdbac73e1247Mika Isojärvi * limitations under the License.
18f0baefc76087f208e58af77dccaecdbac73e1247Mika Isojärvi *
19f0baefc76087f208e58af77dccaecdbac73e1247Mika Isojärvi *//*!
20f0baefc76087f208e58af77dccaecdbac73e1247Mika Isojärvi * \file
21f0baefc76087f208e58af77dccaecdbac73e1247Mika Isojärvi * \brief Utility class to build seeds from different data types.
22f0baefc76087f208e58af77dccaecdbac73e1247Mika Isojärvi *
23f0baefc76087f208e58af77dccaecdbac73e1247Mika Isojärvi * Values are first XORed with type specifig mask, which makes sure that
24f0baefc76087f208e58af77dccaecdbac73e1247Mika Isojärvi * two values with different types, but same bit presentation produce
25f0baefc76087f208e58af77dccaecdbac73e1247Mika Isojärvi * different results. Then values are passed through 32 bit crc.
26f0baefc76087f208e58af77dccaecdbac73e1247Mika Isojärvi *//*--------------------------------------------------------------------*/
27f0baefc76087f208e58af77dccaecdbac73e1247Mika Isojärvi
28f0baefc76087f208e58af77dccaecdbac73e1247Mika Isojärvi#include "tcuSeedBuilder.hpp"
29f0baefc76087f208e58af77dccaecdbac73e1247Mika Isojärvi
301aead6dc829ff5cac4a8ce6eae1b3fbeed9088dbMika Isojärvi#include "deMemory.h"
311aead6dc829ff5cac4a8ce6eae1b3fbeed9088dbMika Isojärvi
32f0baefc76087f208e58af77dccaecdbac73e1247Mika Isojärvinamespace tcu
33f0baefc76087f208e58af77dccaecdbac73e1247Mika Isojärvi{
34f0baefc76087f208e58af77dccaecdbac73e1247Mika Isojärvi
35f0baefc76087f208e58af77dccaecdbac73e1247Mika Isojärvinamespace
36f0baefc76087f208e58af77dccaecdbac73e1247Mika Isojärvi{
37f0baefc76087f208e58af77dccaecdbac73e1247Mika Isojärvi
38f0baefc76087f208e58af77dccaecdbac73e1247Mika IsojärvideUint32 advanceCrc32 (deUint32 oldCrc, size_t len, const deUint8* data)
39f0baefc76087f208e58af77dccaecdbac73e1247Mika Isojärvi{
40f0baefc76087f208e58af77dccaecdbac73e1247Mika Isojärvi	const deUint32	generator	= 0x04C11DB7u;
41f0baefc76087f208e58af77dccaecdbac73e1247Mika Isojärvi	deUint32		crc			= oldCrc;
42f0baefc76087f208e58af77dccaecdbac73e1247Mika Isojärvi
43f0baefc76087f208e58af77dccaecdbac73e1247Mika Isojärvi	for (size_t i = 0; i < len; i++)
44f0baefc76087f208e58af77dccaecdbac73e1247Mika Isojärvi	{
45f0baefc76087f208e58af77dccaecdbac73e1247Mika Isojärvi		const deUint32 current = static_cast<deUint32>(data[i]);
46f0baefc76087f208e58af77dccaecdbac73e1247Mika Isojärvi		crc = crc ^ current;
47f0baefc76087f208e58af77dccaecdbac73e1247Mika Isojärvi
48f0baefc76087f208e58af77dccaecdbac73e1247Mika Isojärvi		for (size_t bitNdx = 0; bitNdx < 8; bitNdx++)
49f0baefc76087f208e58af77dccaecdbac73e1247Mika Isojärvi		{
50f0baefc76087f208e58af77dccaecdbac73e1247Mika Isojärvi			if (crc & 1u)
51f0baefc76087f208e58af77dccaecdbac73e1247Mika Isojärvi				crc = (crc >> 1u) ^ generator;
52f0baefc76087f208e58af77dccaecdbac73e1247Mika Isojärvi			else
53f0baefc76087f208e58af77dccaecdbac73e1247Mika Isojärvi				crc = (crc >> 1u);
54f0baefc76087f208e58af77dccaecdbac73e1247Mika Isojärvi		}
55f0baefc76087f208e58af77dccaecdbac73e1247Mika Isojärvi	}
56f0baefc76087f208e58af77dccaecdbac73e1247Mika Isojärvi
57f0baefc76087f208e58af77dccaecdbac73e1247Mika Isojärvi	return crc;
58f0baefc76087f208e58af77dccaecdbac73e1247Mika Isojärvi}
59f0baefc76087f208e58af77dccaecdbac73e1247Mika Isojärvi
60f0baefc76087f208e58af77dccaecdbac73e1247Mika Isojärvi} // anonymous
61f0baefc76087f208e58af77dccaecdbac73e1247Mika Isojärvi
62f0baefc76087f208e58af77dccaecdbac73e1247Mika IsojärviSeedBuilder::SeedBuilder (void)
63f0baefc76087f208e58af77dccaecdbac73e1247Mika Isojärvi	: m_hash (0xccf139d7u)
64f0baefc76087f208e58af77dccaecdbac73e1247Mika Isojärvi{
65f0baefc76087f208e58af77dccaecdbac73e1247Mika Isojärvi}
66f0baefc76087f208e58af77dccaecdbac73e1247Mika Isojärvi
67f0baefc76087f208e58af77dccaecdbac73e1247Mika Isojärvivoid SeedBuilder::feed (size_t size, const void* ptr)
68f0baefc76087f208e58af77dccaecdbac73e1247Mika Isojärvi{
69f0baefc76087f208e58af77dccaecdbac73e1247Mika Isojärvi	m_hash = advanceCrc32(m_hash, size, (const deUint8*)ptr);
70f0baefc76087f208e58af77dccaecdbac73e1247Mika Isojärvi}
71f0baefc76087f208e58af77dccaecdbac73e1247Mika Isojärvi
72f0baefc76087f208e58af77dccaecdbac73e1247Mika IsojärviSeedBuilder& operator<< (SeedBuilder& builder, bool value)
73f0baefc76087f208e58af77dccaecdbac73e1247Mika Isojärvi{
74f0baefc76087f208e58af77dccaecdbac73e1247Mika Isojärvi	const deUint8 val = (value ? 54: 7);
75f0baefc76087f208e58af77dccaecdbac73e1247Mika Isojärvi
76f0baefc76087f208e58af77dccaecdbac73e1247Mika Isojärvi	builder.feed(sizeof(val), &val);
77f0baefc76087f208e58af77dccaecdbac73e1247Mika Isojärvi	return builder;
78f0baefc76087f208e58af77dccaecdbac73e1247Mika Isojärvi}
79f0baefc76087f208e58af77dccaecdbac73e1247Mika Isojärvi
80f0baefc76087f208e58af77dccaecdbac73e1247Mika IsojärviSeedBuilder& operator<< (SeedBuilder& builder, deInt8 value)
81f0baefc76087f208e58af77dccaecdbac73e1247Mika Isojärvi{
82f0baefc76087f208e58af77dccaecdbac73e1247Mika Isojärvi	const deInt8 val = value ^ 75;
83f0baefc76087f208e58af77dccaecdbac73e1247Mika Isojärvi
84f0baefc76087f208e58af77dccaecdbac73e1247Mika Isojärvi	builder.feed(sizeof(val), &val);
85f0baefc76087f208e58af77dccaecdbac73e1247Mika Isojärvi	return builder;
86f0baefc76087f208e58af77dccaecdbac73e1247Mika Isojärvi}
87f0baefc76087f208e58af77dccaecdbac73e1247Mika Isojärvi
88f0baefc76087f208e58af77dccaecdbac73e1247Mika IsojärviSeedBuilder& operator<< (SeedBuilder& builder, deUint8 value)
89f0baefc76087f208e58af77dccaecdbac73e1247Mika Isojärvi{
9024ceed3e1acf66512ee25ee75002198b6672879dJarkko Pöyry	const deUint8 val = value ^ 140u;
91f0baefc76087f208e58af77dccaecdbac73e1247Mika Isojärvi
92f0baefc76087f208e58af77dccaecdbac73e1247Mika Isojärvi	builder.feed(sizeof(val), &val);
93f0baefc76087f208e58af77dccaecdbac73e1247Mika Isojärvi	return builder;
94f0baefc76087f208e58af77dccaecdbac73e1247Mika Isojärvi}
95f0baefc76087f208e58af77dccaecdbac73e1247Mika Isojärvi
96f0baefc76087f208e58af77dccaecdbac73e1247Mika IsojärviSeedBuilder& operator<< (SeedBuilder& builder, deInt16 value)
97f0baefc76087f208e58af77dccaecdbac73e1247Mika Isojärvi{
981aead6dc829ff5cac4a8ce6eae1b3fbeed9088dbMika Isojärvi	const deInt16	val		= value ^ 555;
991aead6dc829ff5cac4a8ce6eae1b3fbeed9088dbMika Isojärvi	const deUint8	data[]	=
1001aead6dc829ff5cac4a8ce6eae1b3fbeed9088dbMika Isojärvi	{
1011aead6dc829ff5cac4a8ce6eae1b3fbeed9088dbMika Isojärvi		(deUint8)(((deUint16)val) & 0xFFu),
1021aead6dc829ff5cac4a8ce6eae1b3fbeed9088dbMika Isojärvi		(deUint8)(((deUint16)val) >> 8),
1031aead6dc829ff5cac4a8ce6eae1b3fbeed9088dbMika Isojärvi	};
104f0baefc76087f208e58af77dccaecdbac73e1247Mika Isojärvi
1051aead6dc829ff5cac4a8ce6eae1b3fbeed9088dbMika Isojärvi	builder.feed(sizeof(data), data);
106f0baefc76087f208e58af77dccaecdbac73e1247Mika Isojärvi	return builder;
107f0baefc76087f208e58af77dccaecdbac73e1247Mika Isojärvi}
108f0baefc76087f208e58af77dccaecdbac73e1247Mika Isojärvi
109f0baefc76087f208e58af77dccaecdbac73e1247Mika IsojärviSeedBuilder& operator<< (SeedBuilder& builder, deUint16 value)
110f0baefc76087f208e58af77dccaecdbac73e1247Mika Isojärvi{
1111aead6dc829ff5cac4a8ce6eae1b3fbeed9088dbMika Isojärvi	const deUint16	val		= value ^ 37323u;
1121aead6dc829ff5cac4a8ce6eae1b3fbeed9088dbMika Isojärvi	const deUint8	data[]	=
1131aead6dc829ff5cac4a8ce6eae1b3fbeed9088dbMika Isojärvi	{
1141aead6dc829ff5cac4a8ce6eae1b3fbeed9088dbMika Isojärvi		(deUint8)(val & 0xFFu),
1151aead6dc829ff5cac4a8ce6eae1b3fbeed9088dbMika Isojärvi		(deUint8)(val >> 8),
1161aead6dc829ff5cac4a8ce6eae1b3fbeed9088dbMika Isojärvi	};
117f0baefc76087f208e58af77dccaecdbac73e1247Mika Isojärvi
1181aead6dc829ff5cac4a8ce6eae1b3fbeed9088dbMika Isojärvi	builder.feed(sizeof(data), data);
119f0baefc76087f208e58af77dccaecdbac73e1247Mika Isojärvi	return builder;
120f0baefc76087f208e58af77dccaecdbac73e1247Mika Isojärvi}
121f0baefc76087f208e58af77dccaecdbac73e1247Mika Isojärvi
122f0baefc76087f208e58af77dccaecdbac73e1247Mika IsojärviSeedBuilder& operator<< (SeedBuilder& builder, deInt32 value)
123f0baefc76087f208e58af77dccaecdbac73e1247Mika Isojärvi{
1241aead6dc829ff5cac4a8ce6eae1b3fbeed9088dbMika Isojärvi	const deInt32	val		= value ^ 53054741;
1251aead6dc829ff5cac4a8ce6eae1b3fbeed9088dbMika Isojärvi	const deUint8	data[]	=
1261aead6dc829ff5cac4a8ce6eae1b3fbeed9088dbMika Isojärvi	{
1271aead6dc829ff5cac4a8ce6eae1b3fbeed9088dbMika Isojärvi		(deUint8)(((deUint32)val) & 0xFFu),
1281aead6dc829ff5cac4a8ce6eae1b3fbeed9088dbMika Isojärvi		(deUint8)((((deUint32)val) >> 8) & 0xFFu),
1291aead6dc829ff5cac4a8ce6eae1b3fbeed9088dbMika Isojärvi		(deUint8)((((deUint32)val) >> 16) & 0xFFu),
1301aead6dc829ff5cac4a8ce6eae1b3fbeed9088dbMika Isojärvi		(deUint8)((((deUint32)val) >> 24) & 0xFFu),
1311aead6dc829ff5cac4a8ce6eae1b3fbeed9088dbMika Isojärvi	};
132f0baefc76087f208e58af77dccaecdbac73e1247Mika Isojärvi
1331aead6dc829ff5cac4a8ce6eae1b3fbeed9088dbMika Isojärvi	builder.feed(sizeof(data), data);
134f0baefc76087f208e58af77dccaecdbac73e1247Mika Isojärvi	return builder;
135f0baefc76087f208e58af77dccaecdbac73e1247Mika Isojärvi}
136f0baefc76087f208e58af77dccaecdbac73e1247Mika Isojärvi
137f0baefc76087f208e58af77dccaecdbac73e1247Mika IsojärviSeedBuilder& operator<< (SeedBuilder& builder, deUint32 value)
138f0baefc76087f208e58af77dccaecdbac73e1247Mika Isojärvi{
1391aead6dc829ff5cac4a8ce6eae1b3fbeed9088dbMika Isojärvi	const deUint32	val		= value ^ 1977303630u;
1401aead6dc829ff5cac4a8ce6eae1b3fbeed9088dbMika Isojärvi	const deUint8	data[]	=
1411aead6dc829ff5cac4a8ce6eae1b3fbeed9088dbMika Isojärvi	{
1421aead6dc829ff5cac4a8ce6eae1b3fbeed9088dbMika Isojärvi		(deUint8)(val & 0xFFu),
1431aead6dc829ff5cac4a8ce6eae1b3fbeed9088dbMika Isojärvi		(deUint8)((val >> 8) & 0xFFu),
1441aead6dc829ff5cac4a8ce6eae1b3fbeed9088dbMika Isojärvi		(deUint8)((val >> 16) & 0xFFu),
1451aead6dc829ff5cac4a8ce6eae1b3fbeed9088dbMika Isojärvi		(deUint8)((val >> 24) & 0xFFu),
1461aead6dc829ff5cac4a8ce6eae1b3fbeed9088dbMika Isojärvi	};
147f0baefc76087f208e58af77dccaecdbac73e1247Mika Isojärvi
1481aead6dc829ff5cac4a8ce6eae1b3fbeed9088dbMika Isojärvi	builder.feed(sizeof(data), data);
149f0baefc76087f208e58af77dccaecdbac73e1247Mika Isojärvi	return builder;
150f0baefc76087f208e58af77dccaecdbac73e1247Mika Isojärvi}
151f0baefc76087f208e58af77dccaecdbac73e1247Mika Isojärvi
152f0baefc76087f208e58af77dccaecdbac73e1247Mika IsojärviSeedBuilder& operator<< (SeedBuilder& builder, deInt64 value)
153f0baefc76087f208e58af77dccaecdbac73e1247Mika Isojärvi{
1541aead6dc829ff5cac4a8ce6eae1b3fbeed9088dbMika Isojärvi	const deInt64	val		= value ^ 772935234179004386ll;
1551aead6dc829ff5cac4a8ce6eae1b3fbeed9088dbMika Isojärvi	const deUint8	data[]	=
1561aead6dc829ff5cac4a8ce6eae1b3fbeed9088dbMika Isojärvi	{
1571aead6dc829ff5cac4a8ce6eae1b3fbeed9088dbMika Isojärvi		(deUint8)(((deUint64)val) & 0xFFu),
1581aead6dc829ff5cac4a8ce6eae1b3fbeed9088dbMika Isojärvi		(deUint8)((((deUint64)val) >> 8) & 0xFFu),
1591aead6dc829ff5cac4a8ce6eae1b3fbeed9088dbMika Isojärvi		(deUint8)((((deUint64)val) >> 16) & 0xFFu),
1601aead6dc829ff5cac4a8ce6eae1b3fbeed9088dbMika Isojärvi		(deUint8)((((deUint64)val) >> 24) & 0xFFu),
1611aead6dc829ff5cac4a8ce6eae1b3fbeed9088dbMika Isojärvi
1621aead6dc829ff5cac4a8ce6eae1b3fbeed9088dbMika Isojärvi		(deUint8)((((deUint64)val) >> 32) & 0xFFu),
1631aead6dc829ff5cac4a8ce6eae1b3fbeed9088dbMika Isojärvi		(deUint8)((((deUint64)val) >> 40) & 0xFFu),
1641aead6dc829ff5cac4a8ce6eae1b3fbeed9088dbMika Isojärvi		(deUint8)((((deUint64)val) >> 48) & 0xFFu),
1651aead6dc829ff5cac4a8ce6eae1b3fbeed9088dbMika Isojärvi		(deUint8)((((deUint64)val) >> 56) & 0xFFu),
1661aead6dc829ff5cac4a8ce6eae1b3fbeed9088dbMika Isojärvi	};
1671aead6dc829ff5cac4a8ce6eae1b3fbeed9088dbMika Isojärvi
1681aead6dc829ff5cac4a8ce6eae1b3fbeed9088dbMika Isojärvi	builder.feed(sizeof(data), data);
169f0baefc76087f208e58af77dccaecdbac73e1247Mika Isojärvi	return builder;
170f0baefc76087f208e58af77dccaecdbac73e1247Mika Isojärvi}
171f0baefc76087f208e58af77dccaecdbac73e1247Mika Isojärvi
172f0baefc76087f208e58af77dccaecdbac73e1247Mika IsojärviSeedBuilder& operator<< (SeedBuilder& builder, deUint64 value)
173f0baefc76087f208e58af77dccaecdbac73e1247Mika Isojärvi{
1741aead6dc829ff5cac4a8ce6eae1b3fbeed9088dbMika Isojärvi	const deUint64	val		= value ^ 4664937258000467599ull;
1751aead6dc829ff5cac4a8ce6eae1b3fbeed9088dbMika Isojärvi	const deUint8	data[]	=
1761aead6dc829ff5cac4a8ce6eae1b3fbeed9088dbMika Isojärvi	{
1771aead6dc829ff5cac4a8ce6eae1b3fbeed9088dbMika Isojärvi		(deUint8)(val & 0xFFu),
1781aead6dc829ff5cac4a8ce6eae1b3fbeed9088dbMika Isojärvi		(deUint8)((val >> 8) & 0xFFu),
1791aead6dc829ff5cac4a8ce6eae1b3fbeed9088dbMika Isojärvi		(deUint8)((val >> 16) & 0xFFu),
1801aead6dc829ff5cac4a8ce6eae1b3fbeed9088dbMika Isojärvi		(deUint8)((val >> 24) & 0xFFu),
1811aead6dc829ff5cac4a8ce6eae1b3fbeed9088dbMika Isojärvi
1821aead6dc829ff5cac4a8ce6eae1b3fbeed9088dbMika Isojärvi		(deUint8)((val >> 32) & 0xFFu),
1831aead6dc829ff5cac4a8ce6eae1b3fbeed9088dbMika Isojärvi		(deUint8)((val >> 40) & 0xFFu),
1841aead6dc829ff5cac4a8ce6eae1b3fbeed9088dbMika Isojärvi		(deUint8)((val >> 48) & 0xFFu),
1851aead6dc829ff5cac4a8ce6eae1b3fbeed9088dbMika Isojärvi		(deUint8)((val >> 56) & 0xFFu),
1861aead6dc829ff5cac4a8ce6eae1b3fbeed9088dbMika Isojärvi	};
1871aead6dc829ff5cac4a8ce6eae1b3fbeed9088dbMika Isojärvi
1881aead6dc829ff5cac4a8ce6eae1b3fbeed9088dbMika Isojärvi	builder.feed(sizeof(data), data);
189f0baefc76087f208e58af77dccaecdbac73e1247Mika Isojärvi	return builder;
190f0baefc76087f208e58af77dccaecdbac73e1247Mika Isojärvi}
191f0baefc76087f208e58af77dccaecdbac73e1247Mika Isojärvi
192f0baefc76087f208e58af77dccaecdbac73e1247Mika IsojärviSeedBuilder& operator<< (SeedBuilder& builder, float value)
193f0baefc76087f208e58af77dccaecdbac73e1247Mika Isojärvi{
1941aead6dc829ff5cac4a8ce6eae1b3fbeed9088dbMika Isojärvi	// \note Assume that float has same endianess as uint32.
1951aead6dc829ff5cac4a8ce6eae1b3fbeed9088dbMika Isojärvi	deUint32 val;
1961aead6dc829ff5cac4a8ce6eae1b3fbeed9088dbMika Isojärvi
1971aead6dc829ff5cac4a8ce6eae1b3fbeed9088dbMika Isojärvi	deMemcpy(&val, &value, sizeof(deUint32));
1981aead6dc829ff5cac4a8ce6eae1b3fbeed9088dbMika Isojärvi
1991aead6dc829ff5cac4a8ce6eae1b3fbeed9088dbMika Isojärvi	{
2001aead6dc829ff5cac4a8ce6eae1b3fbeed9088dbMika Isojärvi		const deUint8	data[]	=
2011aead6dc829ff5cac4a8ce6eae1b3fbeed9088dbMika Isojärvi		{
2021aead6dc829ff5cac4a8ce6eae1b3fbeed9088dbMika Isojärvi			(deUint8)(val & 0xFFu),
2031aead6dc829ff5cac4a8ce6eae1b3fbeed9088dbMika Isojärvi			(deUint8)((val >> 8) & 0xFFu),
2041aead6dc829ff5cac4a8ce6eae1b3fbeed9088dbMika Isojärvi			(deUint8)((val >> 16) & 0xFFu),
2051aead6dc829ff5cac4a8ce6eae1b3fbeed9088dbMika Isojärvi			(deUint8)((val >> 24) & 0xFFu),
2061aead6dc829ff5cac4a8ce6eae1b3fbeed9088dbMika Isojärvi		};
2071aead6dc829ff5cac4a8ce6eae1b3fbeed9088dbMika Isojärvi
2081aead6dc829ff5cac4a8ce6eae1b3fbeed9088dbMika Isojärvi		builder.feed(sizeof(data), data);
2091aead6dc829ff5cac4a8ce6eae1b3fbeed9088dbMika Isojärvi		return builder;
2101aead6dc829ff5cac4a8ce6eae1b3fbeed9088dbMika Isojärvi	}
211f0baefc76087f208e58af77dccaecdbac73e1247Mika Isojärvi}
212f0baefc76087f208e58af77dccaecdbac73e1247Mika Isojärvi
213f0baefc76087f208e58af77dccaecdbac73e1247Mika IsojärviSeedBuilder& operator<< (SeedBuilder& builder, double value)
214f0baefc76087f208e58af77dccaecdbac73e1247Mika Isojärvi{
2151aead6dc829ff5cac4a8ce6eae1b3fbeed9088dbMika Isojärvi	// \note Assume that double has same endianess as uint64.
2161aead6dc829ff5cac4a8ce6eae1b3fbeed9088dbMika Isojärvi	deUint64 val;
2171aead6dc829ff5cac4a8ce6eae1b3fbeed9088dbMika Isojärvi
2181aead6dc829ff5cac4a8ce6eae1b3fbeed9088dbMika Isojärvi	deMemcpy(&val, &value, sizeof(deUint64));
2191aead6dc829ff5cac4a8ce6eae1b3fbeed9088dbMika Isojärvi
2201aead6dc829ff5cac4a8ce6eae1b3fbeed9088dbMika Isojärvi	const deUint8	data[]	=
2211aead6dc829ff5cac4a8ce6eae1b3fbeed9088dbMika Isojärvi	{
2221aead6dc829ff5cac4a8ce6eae1b3fbeed9088dbMika Isojärvi		(deUint8)(val & 0xFFu),
2231aead6dc829ff5cac4a8ce6eae1b3fbeed9088dbMika Isojärvi		(deUint8)((val >> 8) & 0xFFu),
2241aead6dc829ff5cac4a8ce6eae1b3fbeed9088dbMika Isojärvi		(deUint8)((val >> 16) & 0xFFu),
2251aead6dc829ff5cac4a8ce6eae1b3fbeed9088dbMika Isojärvi		(deUint8)((val >> 24) & 0xFFu),
2261aead6dc829ff5cac4a8ce6eae1b3fbeed9088dbMika Isojärvi
2271aead6dc829ff5cac4a8ce6eae1b3fbeed9088dbMika Isojärvi		(deUint8)((val >> 32) & 0xFFu),
2281aead6dc829ff5cac4a8ce6eae1b3fbeed9088dbMika Isojärvi		(deUint8)((val >> 40) & 0xFFu),
2291aead6dc829ff5cac4a8ce6eae1b3fbeed9088dbMika Isojärvi		(deUint8)((val >> 48) & 0xFFu),
2301aead6dc829ff5cac4a8ce6eae1b3fbeed9088dbMika Isojärvi		(deUint8)((val >> 56) & 0xFFu),
2311aead6dc829ff5cac4a8ce6eae1b3fbeed9088dbMika Isojärvi	};
2321aead6dc829ff5cac4a8ce6eae1b3fbeed9088dbMika Isojärvi
2331aead6dc829ff5cac4a8ce6eae1b3fbeed9088dbMika Isojärvi	builder.feed(sizeof(data), data);
234f0baefc76087f208e58af77dccaecdbac73e1247Mika Isojärvi	return builder;
235f0baefc76087f208e58af77dccaecdbac73e1247Mika Isojärvi}
236f0baefc76087f208e58af77dccaecdbac73e1247Mika Isojärvi
237f0baefc76087f208e58af77dccaecdbac73e1247Mika IsojärviSeedBuilder& operator<< (SeedBuilder& builder, const std::string& value)
238f0baefc76087f208e58af77dccaecdbac73e1247Mika Isojärvi{
239f0baefc76087f208e58af77dccaecdbac73e1247Mika Isojärvi	builder.feed(value.length(), value.c_str());
240f0baefc76087f208e58af77dccaecdbac73e1247Mika Isojärvi	return builder;
241f0baefc76087f208e58af77dccaecdbac73e1247Mika Isojärvi}
242f0baefc76087f208e58af77dccaecdbac73e1247Mika Isojärvi
243f0baefc76087f208e58af77dccaecdbac73e1247Mika Isojärvi} // tcu
244