PageRenderTime 45ms CodeModel.GetById 18ms RepoModel.GetById 0ms app.codeStats 0ms

/src/sys/java/fanx/util/OpUtil.java

https://bitbucket.org/bedlaczech/fan-1.0
Java | 192 lines | 129 code | 38 blank | 25 comment | 59 complexity | b3b440648707bcc37776a0714b4432f8 MD5 | raw file
Possible License(s): CC-BY-SA-3.0
  1. //
  2. // Copyright (c) 2006, Brian Frank and Andy Frank
  3. // Licensed under the Academic Free License version 3.0
  4. //
  5. // History:
  6. // 11 Jan 06 Brian Frank Creation
  7. //
  8. package fanx.util;
  9. import fan.sys.*;
  10. /**
  11. * OpUtil provides static methods used to implement special fcode opcodes.
  12. */
  13. public class OpUtil
  14. {
  15. //////////////////////////////////////////////////////////////////////////
  16. // Object Comparisions
  17. //////////////////////////////////////////////////////////////////////////
  18. public static boolean compareEQ(Object a, Object b)
  19. {
  20. if (a == null) return (b == null);
  21. return a.equals(b);
  22. }
  23. public static boolean compareNE(Object a, Object b)
  24. {
  25. if (a == null) return (b != null);
  26. return !a.equals(b);
  27. }
  28. public static long compare(Object a, Object b)
  29. {
  30. if (a == null) return (b == null) ? 0 : -1;
  31. if (b == null) return +1;
  32. return FanObj.compare(a, b);
  33. }
  34. public static boolean compareLT(Object a, Object b)
  35. {
  36. if (a == null) return (b != null);
  37. if (b == null) return false;
  38. return FanObj.compare(a, b) < 0;
  39. }
  40. public static boolean compareLE(Object a, Object b)
  41. {
  42. if (a == null) return true;
  43. if (b == null) return false;
  44. return FanObj.compare(a, b) <= 0;
  45. }
  46. public static boolean compareGE(Object a, Object b)
  47. {
  48. if (a == null) return (b == null);
  49. if (b == null) return true;
  50. return FanObj.compare(a, b) >= 0;
  51. }
  52. public static boolean compareGT(Object a, Object b)
  53. {
  54. if (a == null) return false;
  55. if (b == null) return true;
  56. return FanObj.compare(a, b) > 0;
  57. }
  58. //////////////////////////////////////////////////////////////////////////
  59. // sys::Bool Comparisions
  60. //////////////////////////////////////////////////////////////////////////
  61. public static boolean compareEQ(boolean a, boolean b) { return a == b; }
  62. public static boolean compareEQ(boolean a, Object b) { return (b instanceof Boolean) ? a == ((Boolean)b).booleanValue() : false; }
  63. public static boolean compareEQ(Object a, boolean b) { return (a instanceof Boolean) ? b == ((Boolean)a).booleanValue() : false; }
  64. public static boolean compareNE(boolean a, boolean b) { return a != b; }
  65. public static boolean compareNE(boolean a, Object b) { return (b instanceof Boolean) ? a != ((Boolean)b).booleanValue() : true; }
  66. public static boolean compareNE(Object a, boolean b) { return (a instanceof Boolean) ? b != ((Boolean)a).booleanValue() : true; }
  67. public static boolean compareLT(boolean a, boolean b) { return a == b ? false : !a; }
  68. public static boolean compareLT(boolean a, Object b) { return (b instanceof Boolean) ? compareLT(a, ((Boolean)b).booleanValue()) : compareLT((Object)a, b); }
  69. public static boolean compareLT(Object a, boolean b) { return (a instanceof Boolean) ? compareLT(((Boolean)a).booleanValue(), b) : compareLT(a, (Object)b); }
  70. public static boolean compareLE(boolean a, boolean b) { return a == b ? true : !a; }
  71. public static boolean compareLE(boolean a, Object b) { return (b instanceof Boolean) ? compareLE(a, ((Boolean)b).booleanValue()) : compareLE((Object)a, b); }
  72. public static boolean compareLE(Object a, boolean b) { return (a instanceof Boolean) ? compareLE(((Boolean)a).booleanValue(), b) : compareLE(a, (Object)b); }
  73. public static boolean compareGE(boolean a, boolean b) { return a == b ? true : a; }
  74. public static boolean compareGE(boolean a, Object b) { return (b instanceof Boolean) ? compareGE(a, ((Boolean)b).booleanValue()) : compareGE((Object)a, b); }
  75. public static boolean compareGE(Object a, boolean b) { return (a instanceof Boolean) ? compareGE(((Boolean)a).booleanValue(), b) : compareGE(a, (Object)b); }
  76. public static boolean compareGT(boolean a, boolean b) { return a == b ? false : a; }
  77. public static boolean compareGT(boolean a, Object b) { return (b instanceof Boolean) ? compareGT(a, ((Boolean)b).booleanValue()) : compareGT((Object)a, b); }
  78. public static boolean compareGT(Object a, boolean b) { return (a instanceof Boolean) ? compareGT(((Boolean)a).booleanValue(), b) : compareGT(a, (Object)b); }
  79. public static long compare(boolean a, boolean b) { return a == b ? 0 : (a ? +1 : -1); }
  80. public static long compare(boolean a, Object b) { return (b instanceof Boolean) ? compare(a, ((Boolean)b).booleanValue()) : compare((Object)a, b); }
  81. public static long compare(Object a, boolean b) { return (a instanceof Boolean) ? compare(((Boolean)a).booleanValue(), b) : compare(a, (Object)b); }
  82. //////////////////////////////////////////////////////////////////////////
  83. // sys::Int Comparisions
  84. //////////////////////////////////////////////////////////////////////////
  85. public static boolean compareEQ(long a, long b) { return a == b; }
  86. public static boolean compareEQ(long a, Object b) { return (b instanceof Long) ? a == ((Long)b).longValue() : false; }
  87. public static boolean compareEQ(Object a, long b) { return (a instanceof Long) ? b == ((Long)a).longValue() : false; }
  88. public static boolean compareNE(long a, long b) { return a != b; }
  89. public static boolean compareNE(long a, Object b) { return (b instanceof Long) ? a != ((Long)b).longValue() : true; }
  90. public static boolean compareNE(Object a, long b) { return (a instanceof Long) ? b != ((Long)a).longValue() : true; }
  91. public static boolean compareLT(long a, long b) { return a < b; }
  92. public static boolean compareLT(long a, Object b) { return (b instanceof Long) ? a < ((Long)b).longValue() : compareLT((Object)a, b); }
  93. public static boolean compareLT(Object a, long b) { return (a instanceof Long) ? ((Long)a).longValue() < b : compareLT(a, (Object)b); }
  94. public static boolean compareLE(long a, long b) { return a <= b; }
  95. public static boolean compareLE(long a, Object b) { return (b instanceof Long) ? a <= ((Long)b).longValue() : compareLE((Object)a, b); }
  96. public static boolean compareLE(Object a, long b) { return (a instanceof Long) ? ((Long)a).longValue() <= b : compareLE(a, (Object)b); }
  97. public static boolean compareGE(long a, long b) { return a >= b; }
  98. public static boolean compareGE(long a, Object b) { return (b instanceof Long) ? a >= ((Long)b).longValue() : compareGE((Object)a, b); }
  99. public static boolean compareGE(Object a, long b) { return (a instanceof Long) ? ((Long)a).longValue() >= b : compareGE(a, (Object)b); }
  100. public static boolean compareGT(long a, long b) { return a > b; }
  101. public static boolean compareGT(long a, Object b) { return (b instanceof Long) ? a > ((Long)b).longValue() : compareGT((Object)a, b); }
  102. public static boolean compareGT(Object a, long b) { return (a instanceof Long) ? ((Long)a).longValue() > b : compareGT(a, (Object)b); }
  103. public static long compare(long a, long b) { return a < b ? -1 : (a == b ? 0 : +1); }
  104. public static long compare(long a, Object b) { return (b instanceof Long) ? compare(a, ((Long)b).longValue()) : compare((Object)a, b); }
  105. public static long compare(Object a, long b) { return (a instanceof Long) ? compare(((Long)a).longValue(), b) : compare(a, (Object)b); }
  106. //////////////////////////////////////////////////////////////////////////
  107. // sys::Float Comparisions
  108. //////////////////////////////////////////////////////////////////////////
  109. public static boolean compareEQ(double a, double b) { return a == b; }
  110. public static boolean compareEQ(double a, Object b) { return (b instanceof Double) ? compareEQ(a, ((Double)b).doubleValue()) : false; }
  111. public static boolean compareEQ(Object a, double b) { return (a instanceof Double) ? compareEQ(((Double)a).doubleValue(), b) : false; }
  112. public static boolean compareNE(double a, double b) { return a != b;}
  113. public static boolean compareNE(double a, Object b) { return (b instanceof Double) ? compareNE(a, ((Double)b).doubleValue()) : true; }
  114. public static boolean compareNE(Object a, double b) { return (a instanceof Double) ? compareNE(((Double)a).doubleValue(), b) : true; }
  115. public static boolean compareLT(double a, double b) { return a < b; }
  116. public static boolean compareLT(double a, Object b) { return (b instanceof Double) ? compareLT(a, ((Double)b).doubleValue()) : compareLT((Object)a, b); }
  117. public static boolean compareLT(Object a, double b) { return (a instanceof Double) ? compareLT(((Double)a).doubleValue(), b) : compareLT(a, (Object)b); }
  118. public static boolean compareLE(double a, double b) { return a <= b; }
  119. public static boolean compareLE(double a, Object b) { return (b instanceof Double) ? compareLE(a, ((Double)b).doubleValue()) : compareLE((Object)a, b); }
  120. public static boolean compareLE(Object a, double b) { return (a instanceof Double) ? compareLE(((Double)a).doubleValue(), b) : compareLE(a, (Object)b); }
  121. public static boolean compareGE(double a, double b) { return a >= b; }
  122. public static boolean compareGE(double a, Object b) { return (b instanceof Double) ? compareGE(a, ((Double)b).doubleValue()) : compareGE((Object)a, b); }
  123. public static boolean compareGE(Object a, double b) { return (a instanceof Double) ? compareGE(((Double)a).doubleValue(), b) : compareGE(a, (Object)b); }
  124. public static boolean compareGT(double a, double b) { return a > b; }
  125. public static boolean compareGT(double a, Object b) { return (b instanceof Double) ? compareGT(a, ((Double)b).doubleValue()) : compareGT((Object)a, b); }
  126. public static boolean compareGT(Object a, double b) { return (a instanceof Double) ? compareGT(((Double)a).doubleValue(), b) : compareGT(a, (Object)b); }
  127. public static long compare(double a, Object b) { return (b instanceof Double) ? compare(a, ((Double)b).doubleValue()) : compare((Object)a, b); }
  128. public static long compare(Object a, double b) { return (a instanceof Double) ? compare(((Double)a).doubleValue(), b) : compare(a, (Object)b); }
  129. public static long compare(double a, double b)
  130. {
  131. if (Double.isNaN(a))
  132. {
  133. return (Double.isNaN(b)) ? 0 : -1;
  134. }
  135. if (Double.isNaN(b)) return +1;
  136. return a < b ? -1 : (a == b ? 0 : +1);
  137. }
  138. //////////////////////////////////////////////////////////////////////////
  139. // Is/As
  140. //////////////////////////////////////////////////////////////////////////
  141. public static boolean is(Object instance, Type type)
  142. {
  143. if (instance == null) return false;
  144. return FanObj.typeof(instance).fits(type);
  145. }
  146. public static Object toImmutable(Object obj)
  147. {
  148. if (obj == null) return null;
  149. if (FanObj.isImmutable(obj)) return obj;
  150. if (obj instanceof List) return ((List)obj).toImmutable();
  151. if (obj instanceof Map) return ((Map)obj).toImmutable();
  152. throw NotImmutableErr.make(FanObj.typeof(obj).toStr());
  153. }
  154. }