'use strict';
var Long = require('./long');
/**
* @class
* @param {number} low the low (signed) 32 bits of the Timestamp.
* @param {number} high the high (signed) 32 bits of the Timestamp.
* @return {Timestamp}
*/
function Timestamp(low, high) {
if (low instanceof Long) {
Long.call(this, low.low_, low.high_);
} else {
Long.call(this, low, high);
}
this._bsontype = 'Timestamp';
}
Timestamp.prototype = Object.create(Long.prototype);
Timestamp.prototype.constructor = Timestamp;
/**
* Return the JSON value.
*
* @method
* @return {String} the JSON representation.
*/
Timestamp.prototype.toJSON = function() {
return {
$timestamp: this.toString()
};
};
/**
* Returns a Timestamp represented by the given (32-bit) integer value.
*
* @method
* @param {number} value the 32-bit integer in question.
* @return {Timestamp} the timestamp.
*/
Timestamp.fromInt = function(value) {
return new Timestamp(Long.fromInt(value));
};
/**
* Returns a Timestamp representing the given number value, provided that it is a finite number. Otherwise, zero is returned.
*
* @method
* @param {number} value the number in question.
* @return {Timestamp} the timestamp.
*/
Timestamp.fromNumber = function(value) {
return new Timestamp(Long.fromNumber(value));
};
/**
* Returns a Timestamp for the given high and low bits. Each is assumed to use 32 bits.
*
* @method
* @param {number} lowBits the low 32-bits.
* @param {number} highBits the high 32-bits.
* @return {Timestamp} the timestamp.
*/
Timestamp.fromBits = function(lowBits, highBits) {
return new Timestamp(lowBits, highBits);
};
/**
* Returns a Timestamp from the given string, optionally using the given radix.
*
* @method
* @param {String} str the textual representation of the Timestamp.
* @param {number} [opt_radix] the radix in which the text is written.
* @return {Timestamp} the timestamp.
*/
Timestamp.fromString = function(str, opt_radix) {
return new Timestamp(Long.fromString(str, opt_radix));
};
module.exports = Timestamp;
module.exports.Timestamp = Timestamp;