|
23 | 23 | var setReadOnly = require( '@stdlib/utils/define-read-only-property' );
|
24 | 24 | var setReadOnlyAccessor = require( '@stdlib/utils/define-read-only-accessor' );
|
25 | 25 | var setReadWriteAccessor = require( '@stdlib/utils/define-read-write-accessor' );
|
| 26 | +var setNonEnumerableReadOnly = require( '@stdlib/utils/define-nonenumerable-read-only-property' ); |
26 | 27 | var isObject = require( '@stdlib/assert/is-plain-object' );
|
27 | 28 | var randu = require( '@stdlib/random/base/mt19937' ).factory;
|
28 | 29 | var isnan = require( '@stdlib/math/base/assert/is-nan' );
|
| 30 | +var typedarray2json = require( '@stdlib/array/to-json' ); |
29 | 31 | var validate = require( './validate.js' );
|
30 | 32 | var triangular0 = require( './triangular.js' );
|
31 | 33 |
|
@@ -109,6 +111,7 @@ function factory() {
|
109 | 111 | setReadWriteAccessor( prng, 'state', getState, setState );
|
110 | 112 | setReadOnlyAccessor( prng, 'stateLength', getStateLength );
|
111 | 113 | setReadOnlyAccessor( prng, 'byteLength', getStateSize );
|
| 114 | + setNonEnumerableReadOnly( prng, 'toJSON', toJSON ); |
112 | 115 | setReadOnly( prng, 'PRNG', rand );
|
113 | 116 |
|
114 | 117 | rand = rand.normalized;
|
@@ -177,6 +180,24 @@ function factory() {
|
177 | 180 | rand.state = s;
|
178 | 181 | }
|
179 | 182 |
|
| 183 | + /** |
| 184 | + * Serializes the pseudorandom number generator as a JSON object. |
| 185 | + * |
| 186 | + * ## Notes |
| 187 | + * |
| 188 | + * - `JSON.stringify()` implicitly calls this method when stringifying a PRNG. |
| 189 | + * |
| 190 | + * @private |
| 191 | + * @returns {Object} JSON representation |
| 192 | + */ |
| 193 | + function toJSON() { |
| 194 | + var out = {}; |
| 195 | + out.type = 'PRNG'; |
| 196 | + out.name = prng.NAME; |
| 197 | + out.state = typedarray2json( rand.state ); |
| 198 | + return out; |
| 199 | + } |
| 200 | + |
180 | 201 | /**
|
181 | 202 | * Returns a pseudorandom number drawn from a triangular distribution with bound parameters.
|
182 | 203 | *
|
|
0 commit comments