Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(196)

Side by Side Diff: runtime/vm/random.cc

Issue 2974233002: VM: Re-format to use at most one newline between functions (Closed)
Patch Set: Rebase and merge Created 3 years, 5 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « runtime/vm/random.h ('k') | runtime/vm/raw_object.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2013, the Dart project authors. Please see the AUTHORS file 1 // Copyright (c) 2013, the Dart project authors. Please see the AUTHORS file
2 // for details. All rights reserved. Use of this source code is governed by a 2 // for details. All rights reserved. Use of this source code is governed by a
3 // BSD-style license that can be found in the LICENSE file. 3 // BSD-style license that can be found in the LICENSE file.
4 4
5 #include "vm/random.h" 5 #include "vm/random.h"
6 #include "vm/dart.h" 6 #include "vm/dart.h"
7 #include "vm/flags.h" 7 #include "vm/flags.h"
8 #include "vm/os.h" 8 #include "vm/os.h"
9 9
10 namespace dart { 10 namespace dart {
(...skipping 11 matching lines...) Expand all
22 } 22 }
23 } 23 }
24 } 24 }
25 if (seed == 0) { 25 if (seed == 0) {
26 // We did not get a seed so far. As a fallback we do use the current time. 26 // We did not get a seed so far. As a fallback we do use the current time.
27 seed = OS::GetCurrentTimeMicros(); 27 seed = OS::GetCurrentTimeMicros();
28 } 28 }
29 Initialize(seed); 29 Initialize(seed);
30 } 30 }
31 31
32
33 void Random::Initialize(uint64_t seed) { 32 void Random::Initialize(uint64_t seed) {
34 ASSERT(seed != 0); 33 ASSERT(seed != 0);
35 // Crank the next state a couple of times. 34 // Crank the next state a couple of times.
36 _state = seed; 35 _state = seed;
37 NextState(); 36 NextState();
38 NextState(); 37 NextState();
39 NextState(); 38 NextState();
40 NextState(); 39 NextState();
41 } 40 }
42 41
43
44 Random::Random(uint64_t seed) { 42 Random::Random(uint64_t seed) {
45 Initialize(seed); 43 Initialize(seed);
46 } 44 }
47 45
48
49 Random::~Random() { 46 Random::~Random() {
50 // Nothing to be done here. 47 // Nothing to be done here.
51 } 48 }
52 49
53 // The algorithm used here is Multiply with Carry (MWC) with a Base b = 2^32. 50 // The algorithm used here is Multiply with Carry (MWC) with a Base b = 2^32.
54 // http://en.wikipedia.org/wiki/Multiply-with-carry 51 // http://en.wikipedia.org/wiki/Multiply-with-carry
55 // The constant A is selected from "Numerical Recipes 3rd Edition" p.348 B1. 52 // The constant A is selected from "Numerical Recipes 3rd Edition" p.348 B1.
56 void Random::NextState() { 53 void Random::NextState() {
57 const uint64_t MASK_32 = 0xffffffff; 54 const uint64_t MASK_32 = 0xffffffff;
58 const uint64_t A = 0xffffda61; 55 const uint64_t A = 0xffffda61;
59 56
60 uint64_t state_lo = _state & MASK_32; 57 uint64_t state_lo = _state & MASK_32;
61 uint64_t state_hi = (_state >> 32) & MASK_32; 58 uint64_t state_hi = (_state >> 32) & MASK_32;
62 _state = (A * state_lo) + state_hi; 59 _state = (A * state_lo) + state_hi;
63 } 60 }
64 61
65
66 uint32_t Random::NextUInt32() { 62 uint32_t Random::NextUInt32() {
67 const uint64_t MASK_32 = 0xffffffff; 63 const uint64_t MASK_32 = 0xffffffff;
68 NextState(); 64 NextState();
69 return static_cast<uint32_t>(_state & MASK_32); 65 return static_cast<uint32_t>(_state & MASK_32);
70 } 66 }
71 67
72 } // namespace dart 68 } // namespace dart
OLDNEW
« no previous file with comments | « runtime/vm/random.h ('k') | runtime/vm/raw_object.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698