1: <?php
 2: /*
 3:  * Copyright (c) 2014 @trashtoy
 4:  * https://github.com/trashtoy/
 5:  * 
 6:  * Permission is hereby granted, free of charge, to any person obtaining a copy of
 7:  * this software and associated documentation files (the "Software"), to deal in
 8:  * the Software without restriction, including without limitation the rights to use,
 9:  * copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the
10:  * Software, and to permit persons to whom the Software is furnished to do so,
11:  * subject to the following conditions:
12:  * 
13:  * The above copyright notice and this permission notice shall be included in all
14:  * copies or substantial portions of the Software.
15:  * 
16:  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
17:  * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
18:  * FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
19:  * COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
20:  * IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
21:  * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
22:  */
23: /**
24:  * PHP class file.
25:  * @auhtor trashtoy
26:  * @since  2.0.0
27:  */
28: namespace Peach\Util;
29: 
30: /**
31:  * 二つの値が等価かどうかを調べるためのインタフェースです.
32:  * {@link HashMap} などでキーの等価性をチェックするために使用されます.
33:  * 
34:  * @todo いわゆる "Latitude Zero" と区別するため, 違うインタフェース名にしたい
35:  */
36: interface Equator
37: {
38:     /**
39:      * 引数 $var1 と $var2 が等しいと判断した場合に TRUE を返します.
40:      * 
41:      * @param  mixed $var1
42:      * @param  mixed $var2
43:      * @return bool  引数の $var1, $var2 が等しい場合に TRUE を返します.
44:      */
45:     public function equate($var1, $var2);
46:     
47:     /**
48:      * 指定された値のハッシュ値を計算します.
49:      * もしもこのオブジェクトの equate($var1, $var2) が TRUE を返す場合,
50:      * hashCode($var1) と hashCode($var2) が必ず同じ値を返すようにしなければなりません.
51:      * 
52:      * この制約条件は, Java で例えると
53:      * {@link http://docs.oracle.com/javase/jp/7/api/java/lang/Object.html#equals(java.lang.Object) java.lang.Object#equals()},
54:      * {@link http://docs.oracle.com/javase/jp/7/api/java/lang/Object.html#hashCode() java.lang.Object#hashCode()}
55:      * で定義されている規約に相当します.
56:      * 
57:      * また, このメソッドは不正な値が指定された場合に任意の例外を投げる必要があります.
58:      * 
59:      * @param  mixed $var 任意の値
60:      * @return int        ハッシュ値
61:      * @throws Exception  不正な値が指定された場合
62:      */
63:     public function hashCode($var);
64: }
65: