/FileExtraction/Java_unseen/Wind-Development_WindSpigot/WindSpigot-Server/src/main/java/net/minecraft/server/Path.java
package net.minecraft.server;

public class Path {

	private PathPoint[] a = new PathPoint[128]; // CraftBukkit - reduce default size
	private int b;

	public Path() {
	}

	public PathPoint a(PathPoint pathpoint) {
		if (pathpoint.d >= 0) {
			throw new IllegalStateException("OW KNOWS!");
		} else {
			if (this.b == this.a.length) {
				PathPoint[] apathpoint = new PathPoint[this.b << 1];

				System.arraycopy(this.a, 0, apathpoint, 0, this.b);
				this.a = apathpoint;
			}

			this.a[this.b] = pathpoint;
			pathpoint.d = this.b;
			this.a(this.b++);
			return pathpoint;
		}
	}

	public void a() {
		this.b = 0;
	}

	public PathPoint c() {
		PathPoint pathpoint = this.a[0];

		this.a[0] = this.a[--this.b];
		this.a[this.b] = null;
		if (this.b > 0) {
			this.b(0);
		}

		pathpoint.d = -1;
		return pathpoint;
	}

	public void a(PathPoint pathpoint, float f) {
		float f1 = pathpoint.g;

		pathpoint.g = f;
		if (f < f1) {
			this.a(pathpoint.d);
		} else {
			this.b(pathpoint.d);
		}

	}

	private void a(int i) {
		PathPoint pathpoint = this.a[i];

		int j;

		for (float f = pathpoint.g; i > 0; i = j) {
			j = i - 1 >> 1;
			PathPoint pathpoint1 = this.a[j];

			if (f >= pathpoint1.g) {
				break;
			}

			this.a[i] = pathpoint1;
			pathpoint1.d = i;
		}

		this.a[i] = pathpoint;
		pathpoint.d = i;
	}

	private void b(int i) {
		PathPoint pathpoint = this.a[i];
		float f = pathpoint.g;

		while (true) {
			int j = 1 + (i << 1);
			int k = j + 1;

			if (j >= this.b) {
				break;
			}

			PathPoint pathpoint1 = this.a[j];
			float f1 = pathpoint1.g;
			PathPoint pathpoint2;
			float f2;

			if (k >= this.b) {
				pathpoint2 = null;
				f2 = Float.POSITIVE_INFINITY;
			} else {
				pathpoint2 = this.a[k];
				f2 = pathpoint2.g;
			}

			if (f1 < f2) {
				if (f1 >= f) {
					break;
				}

				this.a[i] = pathpoint1;
				pathpoint1.d = i;
				i = j;
			} else {
				if (f2 >= f) {
					break;
				}

				this.a[i] = pathpoint2;
				pathpoint2.d = i;
				i = k;
			}
		}

		this.a[i] = pathpoint;
		pathpoint.d = i;
	}

	public boolean e() {
		return this.b == 0;
	}
}
