OSDN Git Service

vmdパッケージ導入
[mikutoga/TogaGem.git] / src / main / java / jp / sourceforge / mikutoga / vmd / FrameNumbered.java
diff --git a/src/main/java/jp/sourceforge/mikutoga/vmd/FrameNumbered.java b/src/main/java/jp/sourceforge/mikutoga/vmd/FrameNumbered.java
new file mode 100644 (file)
index 0000000..7e7fabc
--- /dev/null
@@ -0,0 +1,70 @@
+/*
+ * frame-numbered interface
+ *
+ * License : The MIT License
+ * Copyright(c) 2011 MikuToga Partners
+ */
+
+package jp.sourceforge.mikutoga.vmd;
+
+import java.util.Comparator;
+
+/**
+ * キーフレーム番号を持つオブジェクトの抽象化インタフェース。
+ */
+public interface FrameNumbered {
+
+    /** 昇順での比較子。 */
+    Comparator<FrameNumbered> COMPARATOR = new FrameComparator();
+
+    /**
+     * フレーム番号を設定する。
+     * @param num フレーム番号
+     */
+    void setFrameNumber(int num);
+
+    /**
+     * フレーム番号を返す。
+     * @return フレーム番号
+     */
+    int getFrameNumber();
+
+
+    /**
+     * フレーム番号による比較子Comparator。
+     * フレーム番号の昇順を定義づける。
+     */
+    @SuppressWarnings("serial")
+    class FrameComparator
+            implements Comparator<FrameNumbered> {
+
+        /**
+         * コンストラクタ。
+         */
+        public FrameComparator(){
+            super();
+            return;
+        }
+
+        /**
+         * {@inheritDoc}
+         * @param o1 {@inheritDoc}
+         * @param o2 {@inheritDoc}
+         * @return {@inheritDoc}
+         */
+        @Override
+        @SuppressWarnings("PMD.CompareObjectsWithEquals")
+        public int compare(FrameNumbered o1, FrameNumbered o2){
+            if(o1 == o2) return 0;
+            if(o1 == null) return -1;
+            if(o2 == null) return +1;
+
+            int num1 = o1.getFrameNumber();
+            int num2 = o2.getFrameNumber();
+
+            return num1 - num2;
+        }
+
+    }
+
+}