/* COPYRIGHT Esri - https://js.arcgis.com/5.1.0/LICENSE.txt */
import h from"./Rect.js";class t{constructor(t,e){this._width=0,this._height=0,this._free=[],this._width=t,this._height=e,this._free.push(new h(0,0,t,e))}get width(){return this._width}get height(){return this._height}allocate(t,e){if(t>this._width||e>this._height)return new h;let i=null,s=-1;for(let h=0;h<this._free.length;++h){const r=this._free[h];t<=r.width&&e<=r.height&&(null===i||r.y<=i.y&&r.x<=i.x)&&(i=r,s=h)}return null===i?new h:(this._free.splice(s,1),i.width<i.height?(i.width>t&&this._free.push(new h(i.x+t,i.y,i.width-t,e)),i.height>e&&this._free.push(new h(i.x,i.y+e,i.width,i.height-e))):(i.width>t&&this._free.push(new h(i.x+t,i.y,i.width-t,i.height)),i.height>e&&this._free.push(new h(i.x,i.y+e,t,i.height-e))),new h(i.x,i.y,t,e))}release(h){for(let t=0;t<this._free.length;++t){const e=this._free[t];if(e.y===h.y&&e.height===h.height&&e.x+e.width===h.x)e.width+=h.width;else if(e.x===h.x&&e.width===h.width&&e.y+e.height===h.y)e.height+=h.height;else if(h.y===e.y&&h.height===e.height&&h.x+h.width===e.x)e.x=h.x,e.width+=h.width;else{if(h.x!==e.x||h.width!==e.width||h.y+h.height!==e.y)continue;e.y=h.y,e.height+=h.height}this._free.splice(t,1),this.release(h)}this._free.push(h)}}export{t as default};
