import Feature from"../Feature.js";import GeometryLayout from"../geom/GeometryLayout.js";import LineString from"../geom/LineString.js";import TextFeature from"./TextFeature.js";import{assert}from"../asserts.js";import{flipXY}from"../geom/flat/flip.js";import{get as getProjection}from"../proj.js";import{getStrideForLayout}from"../geom/SimpleGeometry.js";import{inflateCoordinates}from"../geom/flat/inflate.js";import{transformGeometryWithOptions}from"./Feature.js";class Polyline extends TextFeature{constructor(e){super();e=e||{};this.dataProjection=getProjection("EPSG:4326"),this.factor_=e.factor||1e5,this.geometryLayout_=e.geometryLayout||GeometryLayout.XY}readFeatureFromText(e,t){e=this.readGeometryFromText(e,t);return new Feature(e)}readFeaturesFromText(e,t){return[this.readFeatureFromText(e,t)]}readGeometryFromText(e,t){var r=getStrideForLayout(this.geometryLayout_),e=decodeDeltas(e,r,this.factor_),e=(flipXY(e,0,e.length,r,e),inflateCoordinates(e,0,e.length,r)),r=new LineString(e,this.geometryLayout_);return transformGeometryWithOptions(r,!1,this.adaptOptions(t))}writeFeatureText(e,t){e=e.getGeometry();return e?this.writeGeometryText(e,t):(assert(!1,40),"")}writeFeaturesText(e,t){return this.writeFeatureText(e[0],t)}writeGeometryText(e,t){t=(e=transformGeometryWithOptions(e,!0,this.adaptOptions(t))).getFlatCoordinates(),e=e.getStride();return flipXY(t,0,t.length,e,t),encodeDeltas(t,e,this.factor_)}}function encodeDeltas(r,o,e){e=e||1e5;let n;const s=new Array(o);for(n=0;n<o;++n)s[n]=0;for(let e=0,t=r.length;e<t;)for(n=0;n<o;++n,++e){var i=r[e],a=i-s[n];s[n]=i,r[e]=a}return encodeFloats(r,e)}function decodeDeltas(e,r,t){t=t||1e5;let o;const n=new Array(r);for(o=0;o<r;++o)n[o]=0;const s=decodeFloats(e,t);for(let e=0,t=s.length;e<t;)for(o=0;o<r;++o,++e)n[o]+=s[e],s[e]=n[o];return s}function encodeFloats(r,e){var o=e||1e5;for(let e=0,t=r.length;e<t;++e)r[e]=Math.round(r[e]*o);return encodeSignedIntegers(r)}function decodeFloats(e,t){var r=t||1e5;const o=decodeSignedIntegers(e);for(let e=0,t=o.length;e<t;++e)o[e]/=r;return o}function encodeSignedIntegers(r){for(let e=0,t=r.length;e<t;++e){var o=r[e];r[e]=o<0?~(o<<1):o<<1}return encodeUnsignedIntegers(r)}function decodeSignedIntegers(e){const r=decodeUnsignedIntegers(e);for(let e=0,t=r.length;e<t;++e){var o=r[e];r[e]=1&o?~(o>>1):o>>1}return r}function encodeUnsignedIntegers(r){let o="";for(let e=0,t=r.length;e<t;++e)o+=encodeUnsignedInteger(r[e]);return o}function decodeUnsignedIntegers(r){const o=[];let n=0,s=0;for(let e=0,t=r.length;e<t;++e){var i=r.charCodeAt(e)-63;n|=(31&i)<<s,i<32?(o.push(n),n=0,s=0):s+=5}return o}function encodeUnsignedInteger(e){let t,r="";for(;32<=e;)t=63+(32|31&e),r+=String.fromCharCode(t),e>>=5;return t=e+63,r+=String.fromCharCode(t)}export default Polyline;export{encodeDeltas,decodeDeltas,encodeFloats,decodeFloats,encodeSignedIntegers,decodeSignedIntegers,encodeUnsignedIntegers,decodeUnsignedIntegers,encodeUnsignedInteger};