| /* |
| * Copyright DataStax, Inc. |
| * |
| * Licensed under the Apache License, Version 2.0 (the "License"); |
| * you may not use this file except in compliance with the License. |
| * You may obtain a copy of the License at |
| * |
| * http://www.apache.org/licenses/LICENSE-2.0 |
| * |
| * Unless required by applicable law or agreed to in writing, software |
| * distributed under the License is distributed on an "AS IS" BASIS, |
| * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| * See the License for the specific language governing permissions and |
| * limitations under the License. |
| */ |
| 'use strict'; |
| |
| const endianness = { |
| '0': 'BE', |
| '1': 'LE' |
| }; |
| |
| function Geometry() { |
| |
| } |
| |
| Geometry.types = { |
| Point2D: 1, |
| LineString: 2, |
| Polygon: 3 |
| }; |
| |
| /** |
| * @protected |
| * @param {Number} code |
| * @returns {String} |
| * @ignore |
| */ |
| Geometry.getEndianness = function (code) { |
| const value = endianness[code.toString()]; |
| if (typeof value === 'undefined') { |
| throw new TypeError('Invalid endianness with code ' + code); |
| } |
| return value; |
| }; |
| |
| /** |
| * Reads an int32 from binary representation based on endianness. |
| * @protected |
| * @param {Buffer} buffer |
| * @param {String} endianness |
| * @param {Number} offset |
| * @returns Number |
| * @ignore |
| */ |
| Geometry.readInt32 = function (buffer, endianness, offset) { |
| if (endianness === 'BE') { |
| return buffer.readInt32BE(offset, true); |
| } |
| return buffer.readInt32LE(offset, true); |
| }; |
| |
| /** |
| * Reads an 64-bit double from binary representation based on endianness. |
| * @protected |
| * @param {Buffer} buffer |
| * @param {String} endianness |
| * @param {Number} offset |
| * @returns Number |
| * @ignore |
| */ |
| Geometry.readDouble = function (buffer, endianness, offset) { |
| if (endianness === 'BE') { |
| return buffer.readDoubleBE(offset, true); |
| } |
| return buffer.readDoubleLE(offset, true); |
| }; |
| |
| /** |
| * Writes an 32-bit integer to binary representation based on OS endianness. |
| * @protected |
| * @param {Number} val |
| * @param {Buffer} buffer |
| * @param {Number} offset |
| * @ignore |
| */ |
| Geometry.prototype.writeInt32 = function (val, buffer, offset) { |
| if (this.useBESerialization()) { |
| return buffer.writeInt32BE(val, offset, true); |
| } |
| return buffer.writeInt32LE(val, offset, true); |
| }; |
| |
| /** |
| * Writes an 64-bit double to binary representation based on OS endianness. |
| * @protected |
| * @param {Number} val |
| * @param {Buffer} buffer |
| * @param {Number} offset |
| * @ignore |
| */ |
| Geometry.prototype.writeDouble = function (val, buffer, offset) { |
| if (this.useBESerialization()) { |
| return buffer.writeDoubleBE(val, offset, true); |
| } |
| return buffer.writeDoubleLE(val, offset, true); |
| }; |
| |
| /** |
| * Writes an 8-bit int that represents the OS endianness. |
| * @protected |
| * @param {Buffer} buffer |
| * @param {Number} offset |
| * @ignore |
| */ |
| Geometry.prototype.writeEndianness = function (buffer, offset) { |
| if (this.useBESerialization()) { |
| return buffer.writeInt8(0, offset, true); |
| } |
| return buffer.writeInt8(1, offset, true); |
| }; |
| |
| /** |
| * Returns true if the serialization must be done in big-endian format. |
| * Designed to allow injection of OS endianness. |
| * @abstract |
| * @ignore |
| */ |
| Geometry.prototype.useBESerialization = function () { |
| throw new Error('Not Implemented'); |
| }; |
| |
| module.exports = Geometry; |