/// <summary>
 /// Gets the next 64 random bits.
 /// </summary>
 public void Next(ref ValueUnion value)
 {
     lock (syncRoot)
     {
         source.Next(ref value);
     }
 }
Example #2
0
        /// <summary>
        /// Gets the next 64 random bits.
        /// </summary>
        public void Next(ref ValueUnion value)
        {
            ulong
                s0 = state[p],
                s1 = state[p = (p + 1) & 15];

            s1            ^= s1 << 31;
            value.UInt64_0 = (state[p] = s1 ^ s0 ^ (s1 >> 11) ^ (s0 >> 30)) * 1181783497276652981;
        }
Example #3
0
        /// <summary>
        /// Gets the next 64 bits.
        /// </summary>
        public void Next(ref ValueUnion value)
        {
            int n = stream.Read(buffer, 0, sizeof(ulong));

            if (n < sizeof(ulong))
            {
                throw new InvalidOperationException("Stream is not a suitable IRandomSource.");
            }
            value.UInt64_0 = BitConverter.ToUInt64(buffer, 0);
        }
Example #4
0
 public LuaValue(LuaTable value)
 {
     if (value != null)
     {
         m_type  = LuaValueType.Table;
         m_value = new ValueUnion(value);
     }
     else
     {
         m_type  = LuaValueType.Nil;
         m_value = new ValueUnion();
     }
 }
Example #5
0
 public LuaValue(byte[] value)
 {
     if (value != null)
     {
         m_type  = LuaValueType.ByteString;
         m_value = new ValueUnion(value);
     }
     else
     {
         m_type  = LuaValueType.Nil;
         m_value = new ValueUnion();
     }
 }
Example #6
0
 public LuaValue(LuaCoroutine value)
 {
     if (value != null)
     {
         m_type  = LuaValueType.Coroutine;
         m_value = new ValueUnion(value);
     }
     else
     {
         m_type  = LuaValueType.Nil;
         m_value = new ValueUnion();
     }
 }
Example #7
0
        public void UseAfterDispose()
        {
            var source = new SHA256RandomSource();

            source.Initialize(new byte[] { 1, 2, 3 });
            source.Dispose();
            var value = new ValueUnion();

            source.Next(ref value);
            source.Next(ref value);
            source.Next(ref value);
            source.Next(ref value);
        }
Example #8
0
 public LuaValue(LuaCFunction value)
 {
     if (value != null)
     {
         m_type  = LuaValueType.CFunction;
         m_value = new ValueUnion(value);
     }
     else
     {
         m_type  = LuaValueType.Nil;
         m_value = new ValueUnion();
     }
 }
Example #9
0
 public LuaValue(LuaObject value)
 {
     if (value != null)
     {
         m_type  = LuaValueType.Object;
         m_value = new ValueUnion(value);
     }
     else
     {
         m_type  = LuaValueType.Nil;
         m_value = new ValueUnion();
     }
 }
        /// <summary>
        /// Gets the next 64 random bits.
        /// </summary>
        public void Next(ref ValueUnion value)
        {
            if (index == 4)
            {
                index = 0;
                if (sha == null)
                {
                    throw new ObjectDisposedException(GetType().Name);
                }
                state = sha.ComputeHash(state);
            }

            value.UInt64_0 = BitConverter.ToUInt64(state, index++ *8);
        }
        public void XorShiftSpeed()
        {
            var source = new XorShiftRandomSource();
            var random = new Generator(source);

            random.UInt64();
            var       value = new ValueUnion();
            const int N     = 10000000;
            var       sw    = Stopwatch.StartNew();

            for (int i = 0; i < N; i++)
            {
                source.Next(ref value);
            }
            Trace.WriteLine(sw.Elapsed.TotalSeconds * 1e9 / N + "ns/64b, " + N * sizeof(ulong) / sw.Elapsed.TotalSeconds / 1e9 + "GB/s");
        }
Example #12
0
        public static void CloneTest(IRandomSource source)
        {
            new Generator(source, "CloneTest").UInt64();
            var clone = source.Clone();

            Assert.IsNotNull(source);
            var sourceNext = new ValueUnion();
            var cloneNext  = new ValueUnion();

            for (int i = 0; i < 100; i++)
            {
                source.Next(ref sourceNext);
                clone.Next(ref cloneNext);
                Assert.AreEqual(sourceNext.UInt64_0, cloneNext.UInt64_0);
            }
        }
 /// <summary>
 /// Gets the next 64 random bits.
 /// </summary>
 public void Next(ref ValueUnion value)
 {
     rand.NextBytes(ulongBytes);
     value.UInt64_0 = BitConverter.ToUInt64(ulongBytes, 0);
 }
Example #14
0
 public LuaValue(bool value)
 {
     m_type  = LuaValueType.Boolean;
     m_value = new ValueUnion(value);
 }
Example #15
0
 public LuaValue(long value)
 {
     m_type  = LuaValueType.Integer;
     m_value = new ValueUnion(value);
 }
Example #16
0
 public LuaValue(IntPtr value)
 {
     m_type  = LuaValueType.Userdata;
     m_value = new ValueUnion(value);
 }
Example #17
0
 public LuaValue(double value)
 {
     m_type  = LuaValueType.Number;
     m_value = new ValueUnion(value);
 }