java-decompiler: post-import cleanup (unneeded files dropped)

master
Roman Shevchenko 10 years ago
parent b3705cf400
commit 270a3f6e22
  1. 9
      .classpath
  2. 3
      .gitignore
  3. 17
      .project
  4. 2
      .settings/org.eclipse.core.resources.prefs
  5. 11
      .settings/org.eclipse.jdt.core.prefs
  6. 51
      dist/docs/license_en.txt
  7. 62
      dist/docs/lizenz_de.txt
  8. BIN
      lib/ncss/ccl.jar
  9. BIN
      lib/ncss/javacc.jar
  10. BIN
      lib/ncss/javancss.jar
  11. BIN
      lib/proguard.jar
  12. BIN
      lib/proguard_4_11.jar
  13. BIN
      lib/timer/hrtlib.dll
  14. BIN
      lib/timer/timer.jar
  15. 0
      readme.txt
  16. 57
      test/test/BradTest.java
  17. 42
      test/test/TestAnnotationsEclipse.java
  18. 59
      test/test/input/TestEclipse7.java
  19. 59
      test/test/input/TestJavac7.java
  20. 58
      test/test/input/TestJavac8.java
  21. 81
      test/test/misc/ExtTest.java
  22. 65
      test/test/misc/GenericTest.java
  23. 9
      test/test/misc/ITest.java
  24. 115
      test/test/misc/MainClass.java
  25. 83
      test/test/misc/MiscTest.java
  26. 33
      test/test/misc/MultipleClassTest.java
  27. 19
      test/test/misc/ParentFieldTest.java
  28. 27
      test/test/misc/SuperTest.java
  29. 22
      test/test/misc/ann/RequestForEnhancement.java
  30. 17
      test/test/misc/en/AutocastTest.java
  31. 60
      test/test/misc/en/FastSetTest.java
  32. 22
      test/test/misc/en/FinallyTest.java
  33. 52
      test/test/misc/en/Foo.java
  34. 22
      test/test/misc/en/InnerTest$1.java
  35. 13
      test/test/misc/en/InnerTest.java
  36. 20
      test/test/misc/en/InnerTestOld.java
  37. 34
      test/test/misc/en/ListInsertTest.java
  38. 51
      test/test/misc/en/Operation.java
  39. 19
      test/test/misc/en/SwitchInTest.java
  40. 31
      test/test/misc/en/TestOperation.java
  41. 15
      test/test/output/TestEclipse7.java
  42. 129
      test/test/output/TestJavac7.java
  43. 104
      test/test/output/TestJavac8.java
  44. 187
      test/test/util/DotExporter.java
  45. 25
      test/test/util/MemoryMonitor.java
  46. 31
      test/test/util/Timer.java
  47. 71
      test/test/util/ZipStripper.java
  48. 68
      timer/HRTimerResolution.java
  49. 31
      timer/SystemTimerResolution.java
  50. 86
      timer/com/vladium/utils/timing/HRTimer.java
  51. 54
      timer/com/vladium/utils/timing/ITimer.java
  52. 31
      timer/com/vladium/utils/timing/ITimerConstants.java
  53. 74
      timer/com/vladium/utils/timing/JavaSystemTimer.java
  54. 74
      timer/com/vladium/utils/timing/TimerFactory.java
  55. 71
      timer/native/com_vladium_utils_timing_HRTimer.c
  56. 22
      timer/native/com_vladium_utils_timing_HRTimer.h

@ -1,9 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<classpath>
<classpathentry kind="src" path="src"/>
<classpathentry kind="src" path="timer"/>
<classpathentry kind="src" path="test"/>
<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/>
<classpathentry kind="lib" path="lib/timer/timer.jar"/>
<classpathentry kind="output" path="bin"/>
</classpath>

3
.gitignore vendored

@ -1,3 +0,0 @@
bin/
dist/full/
dist/obfuscated/

@ -1,17 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<projectDescription>
<name>Fernflower</name>
<comment></comment>
<projects>
</projects>
<buildSpec>
<buildCommand>
<name>org.eclipse.jdt.core.javabuilder</name>
<arguments>
</arguments>
</buildCommand>
</buildSpec>
<natures>
<nature>org.eclipse.jdt.core.javanature</nature>
</natures>
</projectDescription>

@ -1,2 +0,0 @@
eclipse.preferences.version=1
encoding//test/test/misc/en/InnerTest.java=UTF-8

@ -1,11 +0,0 @@
eclipse.preferences.version=1
org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled
org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.7
org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve
org.eclipse.jdt.core.compiler.compliance=1.7
org.eclipse.jdt.core.compiler.debug.lineNumber=generate
org.eclipse.jdt.core.compiler.debug.localVariable=generate
org.eclipse.jdt.core.compiler.debug.sourceFile=generate
org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
org.eclipse.jdt.core.compiler.source=1.7

@ -1,51 +0,0 @@
Fernflower Freeware License 1.0
This license applies to the Fernflower decompiler (hereafter “Software")
including any associated files, information and examples.
You are hereby granted a non-exclusive and non-transferable license to
use and distribute the Software in binary form according to the following
terms and conditions.
1) Copies and Redistribution
You may copy and distribute unmodified binary copies of the Software
provided that you keep this license intact. You must NOT charge money
or fees for the Software except to cover the absolutely necessary
distribution costs.
Any other form of redistribution is prohibited. Especially you are not
allowed to redistribute the Software as part of any other software
collection or other product.
2) Use
You may use the Software "as is" in any commercial or non-commercial environment
for any purpose.
3) Contact Information
The sole author and owner of Fernflower is Stiver. Address all correspondence regarding
this license to:
fernflower.decompiler@gmail.com
http://www.reversed-java.com
4) Disclaimer of Warranty
THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
SUCH DAMAGE.

@ -1,62 +0,0 @@
Fernflower Freeware Lizenz 1.0
Gegenstand der vorliegenden Lizenz ist der Fernflower Decompiler (im Folgenden "Software" genannt)
einschließlich aller dazu gehörenden Dateien, Informationen und Beispiele.
Hiermit erhalten Sie eine nicht-ausschlieĂźliche und nicht-ĂĽbertragbare Lizenz
für die Nutzung und Weitergabe der Software gemäß den nachfolgenden
Bedingungen.
1) Kopieren und Weitergeben
Sie dürfen die Software kopieren und exakte Binärkopien unverändert
weitergeben, vorausgesetzt, diese Lizenz bleibt in der ursprĂĽnglichen Form
erhalten. Sie dĂĽrfen KEINE wie auch immer geartete Bezahlung oder GebĂĽhren
fĂĽr die Software verlangen, auĂźer um die absolut unvermeidbaren Selbstkosten
der Weitergabe zu decken.
Jede andere Form der Weitergabe ist untersagt. Insbesondere ist es nicht gestattet,
die Software als Teil einer anderen Softwaresammlung oder eines anderen Produktes
weiterzugeben.
2) Nutzung
Sie können die Software beliebig in jeder kommerziellen oder nicht-kommerziellen Umgebung
zu jedem Zweck einsetzen.
3) Kontaktinformation
Der einzige Autor und EigentĂĽmer von Fernflower ist Stiver. Alle RĂĽckfragen bezĂĽglich dieser Lizenz
sind an
fernflower.decompiler@gmail.com
http://www.reversed-java.com
zu richten.
4) GARANTIE- UND HAFTUNGSBESCHRĂ„NKUNGEN
DIESE SOFTWARE WIRD IHNEN AUF DER GRUNDLAGE DES GEGENWĂ„RTIGEN ZUSTANDS ZUR
VERFĂśGUNG GESTELLT. ES GIBT KEINE GARANTIE, WEDER AUSDRĂśCKLICH NOCH IMPLIZIT.
DIES SCHLIEĂźT AUCH GARANTIEANSPRĂśCHE BEZĂśGLICH DER VERKAUFSQUALITĂ„T,
VERKĂ„UFLICHKEIT ODER EIGNUNG FĂśR EINEN BESTIMMTEN ZWECk AUS, ODER SOLCHE, DIE
DURCH GELTENDES RECHT, GESETZLICHE VORSCHRIFTEN, GESCHĂ„FTSGEBRAUCH ODER
HANDELSVERKEHR VERURSACHT WERDEN. DAS GESAMTE RISIKO IN BEZUG AUF DIE ERGEBNISSE
UND DIE LEISTUNG DES PROGRAMMS LIEGT BEI IHNEN. WEDER DER AUTOR NOCH IRGENDEIN
AN DEM PROJEKT BETEILIGTER HAT IRGENDEINE HAFTUNGSVERPFLICHTUNG IHNEN ODER
IRGENDEINER ANDEREN PERSON ODER INSTITUTION GEGENĂśBER FĂśR JEDWEDE INDIREKTE,
ZUFĂ„LLIGE, BESONDERE SCHĂ„DEN ODER IRGENDWELCHE FOLGESCHĂ„DEN. DIES GILT AUCH FĂśR
SCHĂ„DEN AUS ENTGANGENEM GEWINN, VERLORENEN ODER BESCHĂ„DIGTEN DATEN ODER FĂśR
ANDERE KOMMERZIELLE ODER WIRTSCHAFTLICHE VERLUSTE, SELBST DANN, WENN DER AUTOR
ODER IRGENDEIN AN DEM PROJEKT BETEILIGTER AUF DIE MĂ–GLICHKEIT DERARTIGER SCHĂ„DEN
HINGEWIESEN WURDE ODER DIESE VORHERSEHBAR WAREN, ODER FĂśR ANSPRĂśCHE DRITTER. DIE
HIER FESTGELEGTEN HAFTUNGSBESCHRĂ„NKUNGEN GELTEN UNABHĂ„NGUG DAVON, OB DER VERMEINTLICHE
ODER TATSĂ„CHLICHE VERTRAGSBRUCH EINE GRUNDSĂ„TZLICHE BEDINGUNG ODER
VERTRAGSVEREINBARUNG BERĂśHRT, ODER EIN GRUNDSĂ„TZLICHER VERTRAGSBRUCH IST. DIESER
ABSATZ IST EIN ESSENZIELLER TEIL DIESER LIZENZ. ES IST VERBOTEN DAS PROGRAMM ZU
BENUTZEN OHNE DASS DIESEM ABSATZ ZUGESTIMMT WIRD.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

@ -1,57 +0,0 @@
package test;
import java.util.LinkedList;
import java.util.List;
public class BradTest {
public void testForLoop() {
for(int i = 0; i < 5; i++) {
System.out.println(i);
}
int[] testArray = new int[] {};
for(int i : testArray) {
System.out.println(i);
}
int k = 0;
int j = 0;
while(j < 5) {
System.out.println("Test while.");
j++;
if(j < 3) {
continue;
}
k++;
}
List keys = new java.util.ArrayList();
for(Object test : keys) {
System.out.println(test);
System.out.println(test);
System.out.println(test);
}
List<BradTest> objects = new LinkedList<BradTest>();
for(BradTest test : objects) {
System.out.println(test);
}
}
}

@ -1,42 +0,0 @@
package test;
import java.lang.annotation.Annotation;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.reflect.Constructor;
import java.lang.reflect.Method;
public class TestAnnotationsEclipse {
public String a;
@Retention(RetentionPolicy.CLASS)
@interface MyAnnotation {}
public static void main(String[] args) {
TestInner a = new TestAnnotationsEclipse().new TestInner();
for(Constructor mt : a.getClass().getConstructors()) {
Annotation[][] ann = mt.getParameterAnnotations();
System.out.println(ann.length);
}
}
protected class TestInner {
public TestInner() {}
public TestInner(String param1, Object param2, @MyAnnotation boolean param3) {
System.out.println(param1);
System.out.println(param2);
System.out.println(param3);
}
public void accessField() {
System.out.println(TestAnnotationsEclipse.this.a);
}
}
}

@ -1,59 +0,0 @@
package test.input;
import java.io.FileReader;
import java.io.IOException;
import java.lang.reflect.Method;
public class TestEclipse7 {
// public void testTryResources() throws IOException {
//
// try (FileReader reader = new FileReader("file"); FileReader reader1 = new FileReader("file")) {
// System.out.println();
// }
//
// }
//
// public void testTryResources1() throws IOException {
//
// try (FileReader reader = new FileReader("file")) {
// System.out.println("block");
// } catch(RuntimeException ex) {
// System.out.println(ex.toString());
// } finally {
// System.out.println("finally");
// }
//
// }
public void testMultiCatch() {
try {
Method method = getClass().getDeclaredMethod("foo");
} catch (NoSuchMethodException | SecurityException e) {
e.printStackTrace();
}
}
// public void testSwitchString() {
//
// String s = "";
// switch(s) {
// case "Aa": // "xyz":
// System.out.println("!");
// break;
// case "BB": // "abc":
// System.out.println("?");
// break;
// case "__":
// System.out.println("_");
// break;
// default:
// System.out.println("#");
// }
//
// }
}

@ -1,59 +0,0 @@
package test.input;
import java.io.FileReader;
import java.io.IOException;
import java.lang.reflect.Method;
public class TestJavac7 {
public void testTryResources() throws IOException {
try (FileReader reader = new FileReader("file"); FileReader reader1 = new FileReader("file")) {
System.out.println();
}
}
public void testTryResources1() throws IOException {
try (FileReader reader = new FileReader("file")) {
System.out.println("block");
} catch(RuntimeException ex) {
System.out.println(ex.toString());
} finally {
System.out.println("finally");
}
}
public void testMultiCatch() {
try {
Method method = getClass().getDeclaredMethod("foo");
} catch (NoSuchMethodException | SecurityException e) {
e.printStackTrace();
}
}
public void testSwitchString() {
String s = "";
switch(s) {
case "Aa": // "xyz":
System.out.println("!");
break;
case "BB": // "abc":
System.out.println("?");
break;
case "__":
System.out.println("_");
break;
default:
System.out.println("#");
}
}
}

@ -1,58 +0,0 @@
package test.input;
import java.io.FileReader;
import java.io.IOException;
import java.lang.reflect.Method;
import java.util.Arrays;
import java.util.List;
public class TestJavac8 {
// public static void main(String args[]) {
// new TestJavac8().testLambda();
// }
//
// public void testTryResources() throws IOException {
//
// try (FileReader reader = new FileReader("file"); FileReader reader1 = new FileReader("file")) {
// System.out.println();
// }
//
// }
//
// public void testMultiCatch() {
//
// try {
// Method method = getClass().getDeclaredMethod("foo");
// } catch (NoSuchMethodException | SecurityException e) {
// e.printStackTrace();
// }
// }
//
//
// private void testSwitchString() {
//
// String s = "";
// switch(s) {
// case "Aa": // "xyz":
// System.out.println("!");
// break;
// case "BB": // "abc":
// System.out.println("?");
// break;
// case "__":
// System.out.println("_");
// break;
// default:
// System.out.println("#");
// }
//
// }
public void testLambda() {
List<Integer> list = Arrays.asList(1, 2, 3, 4, 5, 6, 7);
list.forEach(n -> {int a = 2 * n; System.out.println(a);});
}
}

@ -1,81 +0,0 @@
package test.misc;
import java.io.IOException;
import java.sql.Timestamp;
import java.util.ArrayList;
import java.util.Date;
import java.util.HashMap;
import java.util.Map.Entry;
public class ExtTest<E> extends ArrayList<E> {
public static void main(String[] args) {
Date d = new Date(); Timestamp t = new Timestamp(d.getTime());
System.out.println(d.after(t));
System.out.println((int)-1);
System.out.println((int)1);
System.out.println((Integer)1);
System.out.println((Integer)1);
Class c = String.class;
Integer Integer = 0;
Integer = (Integer)-1;
int z = 0;
z = z+++(++z);
Entry ent = (Entry)new HashMap().entrySet().iterator().next();
label1: {
System.out.println("1");
if(Math.random() > 4) {
break label1;
}
System.out.println("2");
}
System.out.println("3");
}
public <T extends E> void test(T o) {
}
public void testException() throws IOException {
// if(true) {
// throw new RuntimeException();
// } else {
// throw new IOException();
// }
// throw true?new IOException():new IOException();
// throw true?new ClassCastException():new IOException();
}
public static int ttt() {
Object obj = new Integer(5);
synchronized (new Integer(3)) {
System.out.println(obj);
obj = null;
}
System.out.println("1");
if(Math.random() > 1) {
System.out.println("2");
} else {
System.out.println("3");
}
System.out.println("4");
int a = 0;
try {
a = 2;
return a;
} finally {
a = 4;
}
}
}

@ -1,65 +0,0 @@
package test.misc;
import java.io.Serializable;
import java.util.AbstractCollection;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Date;
import java.util.List;
public class GenericTest<T extends Object & Serializable> {
@test.misc.ann.RequestForEnhancement(
id = 2868724,
synopsis = "Enable time-travel",
engineer = "Mr. Peabody",
date = "4/1/3007",
arr = {"1","2","3"},
cl = Void.class
)
@Deprecated
public boolean test(@Deprecated Collection c) {
return true;
}
public int testparam(boolean t, @Deprecated List lst, double d) {
return 0;
}
}
class GenericTestChild<E extends Collection> extends GenericTest<GenericTestChild<AbstractCollection>> implements Serializable {
// public <T> void test(Collection<T> c) {
// T var1 = c.iterator().next();
// c.add(var1);
// }
public List<String>[][] field;
public <T extends Date & List> void test(List<? super ArrayList> list1, List<?> list) {
// l2: {
// l1: {
// if(Math.random() > 2){
// break l1;
// }
//
// System.out.println("1");
// break l2;
// }
//
// System.out.println("2");
// }
if(Math.random() > 2){
System.out.println("2");
} else {
System.out.println("1");
}
}
}

@ -1,9 +0,0 @@
package test.misc;
import java.io.Serializable;
public interface ITest extends Serializable, Comparable<Long> {
public void test();
}

@ -1,115 +0,0 @@
package test.misc;
import java.util.ArrayList;
import java.util.List;
public class MainClass {
private int intfield;
private static int stfield;
private static void statmeth(int t) {
System.out.println(t);
}
private String maintest(int v) {
System.out.println(v+"test!");
return "";
}
public MainClass() {
super();
}
public void mainclosure() {
final int local1 = (int)Math.random();
List l = new ArrayList(new ArrayList()) {
{
System.out.println(intfield);
}
public void anontest() {
System.out.println(local1);
}
};
class LocalClass {
public LocalClass(String s) {
System.out.println(s);
statmeth(4);
}
public void localtest() {
int i = intfield;
intfield = 4;
maintest(i);
System.out.println(local1);
System.out.println(stfield);
stfield = 3;
}
class LocalMemberClass {
}
}
boolean t = false;
if(t) {
LocalClass lc = new LocalClass("1");
LocalClass.LocalMemberClass rt = lc.new LocalMemberClass();;
} else {
if(Math.random() > 1) {
LocalClass lc1 = new LocalClass("1");
}
System.out.println();
}
}
public class MemberClass {
public MemberClass(String z) {
System.out.println(z);
}
public void membertest() {
int i = intfield;
maintest(i);
stfield = 5;
Member2Class.Member3Class t = (new Member2Class()).new Member3Class();
}
public class Member2Class1 {
public class Member3Class1 {
}
}
class Member2Class {
public void member2test() {
int i = intfield;
maintest(i);
Member2Class1.Member3Class1 t;
}
public class Member3Class {
}
}
}
}

@ -1,83 +0,0 @@
package test.misc;
public class MiscTest {
public static double test = 1 / 0;
public static void main(String[] args) {
System.out.println(test);
String s = "a b";
s = s.replaceAll(" ", " &nbsp");
System.out.println(s);
try {
throw null;
} catch(RuntimeException ex) {
System.out.println(ex);
}
int a = 3;
if(a == 1) {
System.out.println("1");
} else if(a == 2) {
System.out.println("2");
} else if(a == 3) {
System.out.println("3");
} else if(a == 4) {
System.out.println("4");
} else if(a == 5) {
System.out.println("5");
} else if(a == 6) {
System.out.println("6");
} else if(a == 7) {
System.out.println("7");
}
if(a == 0) {
return;
} else {
System.out.println("0");
}
if(a==4) {
System.out.println("assert");
assert a==4 && a==5;
} else {
assert false;
}
assert a==5: Math.random();
assert false: Math.random();
assert true;
assert true: Math.random();
/*
label: {
if(a == 0) {
System.out.println("0");
} else if(a == 1) {
System.out.println("01");
} else {
if(a == -1) {
System.out.println("-1");
} else {
System.out.println("-2");
}
break label;
}
System.out.println("end");
}
System.out.println("end1");
*/
}
}

@ -1,33 +0,0 @@
package test.misc;
public class MultipleClassTest {
public int field = this.hashCode();
public void test() {
class Test1 {
public int t1() {
// System.out.println("1");
try {
return 2;
} finally {
System.out.println("1");
return 3;
}
}
}
class Test2 {
public void t2() {
System.out.println("2");
//new Test1().t1();
}
}
// new Test1().t1();
}
}

@ -1,19 +0,0 @@
package test.misc;
public class ParentFieldTest {
public int test = 0;
private class Parent extends ParentFieldTest {
private class Child {
public void test() {
System.out.println(ParentFieldTest.this.test);
}
}
}
}

@ -1,27 +0,0 @@
package test.misc;
import java.util.ArrayList;
public class SuperTest extends ArrayList {
public SuperTest() {
super(3);
super.modCount = 2;
SuperTest.super.size();
}
public int size() {
System.out.println("1");
return 0;
}
class SuperTest1 {
public void test() {
SuperTest.super.size();
SuperTest.super.modCount = 2;
}
}
}

@ -1,22 +0,0 @@
package test.misc.ann;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
/**
* Describes the Request-For-Enhancement(RFE) that led
* to the presence of the annotated API element.
*/
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.METHOD)
public @interface RequestForEnhancement {
int id();
String synopsis();
String engineer() default "[unassigned]";
String date() default "[unimplemented]";
String[] arr();
Class cl();
}

@ -1,17 +0,0 @@
package test.misc.en;
import java.util.HashMap;
public class AutocastTest {
public static void main(String[] args) {
HashMap<Integer, Integer> map = new HashMap<Integer, Integer>();
Integer key = new Integer(1);
Integer value = map.containsKey(key)?0:map.get(key);
System.out.println(value == null);
}
}

@ -1,60 +0,0 @@
package test.misc.en;
import java.util.Arrays;
import java.util.HashSet;
import java.util.Set;
import java.util.SortedSet;
import java.util.TreeSet;
import de.fernflower.util.FastSetFactory;
import de.fernflower.util.FastSetFactory.FastSet;
public class FastSetTest {
public static void main(String[] args) {
SortedSet<Integer> set = new TreeSet<Integer>();
for(int i=0;i<3;i++) {
set.add(i);
}
// for(Integer s : set) {
// System.out.println(s);
// }
FastSetFactory<Integer> factory = new FastSetFactory<Integer>(set);
// factory.print();
// int index = 1;
// for(int i=0;i<100;i++) {
// if(i % 32 == 0) {
// index = 1;
// }
//
// System.out.println(index);
// index<<=1;
//
// }
FastSet<Integer> set1 = factory.spawnEmptySet();
set1.addAll(new HashSet<Integer>(Arrays.asList(new Integer[]{0, 1, 2, 3, 4, 5, 6, 7, 8, 9})));
FastSet<Integer> set2 = set1.getCopy();
set2.remove(4);
set2.remove(5);
set2.add(10);
set1.symdiff(set2);
Set<Integer> set3 = new TreeSet<Integer>(set1.toPlainSet());
for(Integer s : set3) {
System.out.println(s);
}
}
}

@ -1,22 +0,0 @@
package test.misc.en;
public class FinallyTest {
public FinallyTest() {
int i;
try {
try {
i = 0;
} finally {
i = 1;
}
i = 2;
} finally {
i = 3;
}
System.out.println(i);
}
}

@ -1,52 +0,0 @@
package test.misc.en;
class Foo {
public Foo() {}
public Foo(String test) {}
private void foo() {
System.out.println("qwe");
}
static class Bar extends Foo {
void bar() {
System.out.println("1");
//((Foo)this).foo();
}
}
static class Bar1 extends Bar {
void bar() {
super.bar();
//System.out.println("2");
//((Foo)this).foo();
}
}
static class Bar2 extends Bar1 {
void bar1() {
super.bar();
}
}
public static void main(String[] args) {
new Bar2().bar();
}
public int testfin() {
int i;
try {
System.out.println();
i = 0;
} finally {
System.out.println();
}
return i;
}
}

@ -1,22 +0,0 @@
package test.misc.en;
class InnerTest$1 extends Foo implements Runnable {
// $FF: synthetic field
final String val$test;
// $FF: synthetic field
final int val$test1;
InnerTest$1(String var1, int var2) {
super();
this.val$test = var1;
this.val$test1 = var2;
}
public void run() {
System.out.println(this.val$test);
System.out.println(this.val$test1);
}
}

@ -1,13 +0,0 @@
package test.misc.en;
import test.misc.en.InnerTest$1;
public class InnerTest {
public static void main(String[] args) throws Throwable {
String test = args[0];
int test1 = Integer.parseInt(args[1]);
new InnerTest$1(test, test1);
System.out.println("готово");
}
}

@ -1,20 +0,0 @@
package test.misc.en;
public class InnerTestOld {
public static void main(String[] args) {
final String test = args[0];
final int test1 = Integer.parseInt(args[1]);
Runnable r = new Runnable() {
public void run() {
System.out.println(test);
System.out.println(test1);
}
};
System.out.println("done");
}
}

@ -1,34 +0,0 @@
package test.misc.en;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Date;
import java.util.LinkedList;
import java.util.List;
public class ListInsertTest {
public static void main(String[] args) {
List<Integer> lst1 = new ArrayList<Integer>(Arrays.asList(new Integer[]{1, 2, 3}));
List<Integer> lst2 = new LinkedList<Integer>(Arrays.asList(new Integer[]{1, 2, 3}));
Date d = new Date();
for(int i=0;i<300000;i++) {
lst1.add(1, i);
}
System.out.println(new Date().getTime() - d.getTime());
d = new Date();
for(int i=0;i<300000;i++) {
lst2.add(1, i);
}
System.out.println(new Date().getTime() - d.getTime());
}
}

@ -1,51 +0,0 @@
package test.misc.en;
public enum Operation {
PLUS(2) {
double eval(double x, double y) { return x + y; }
},
MINUS(7) {
double eval(double x, double y) { return x - y; }
},
TIMES(8) {
double eval(double x, double y) { return x * y; }
},
DIVIDED_BY(0) {
double eval(double x, double y) { return x / y; }
};
// Perform the arithmetic operation represented by this constant
abstract double eval(double x, double y);
Operation(int t) {
// class LocalClass {
//
// }
//
// LocalClass e = null;
System.out.println();
}
public static void main(String args[]) {
double x = Double.parseDouble(args[0]);
double y = Double.parseDouble(args[1]);
Operation opp = Operation.DIVIDED_BY;
switch(opp) {
case MINUS:
System.out.println();
case PLUS:
}
for (Operation op : Operation.values()) {
System.out.println(x + " " + op + " " + y + " = " + op.eval(x, y));
}
}
}

@ -1,19 +0,0 @@
package test.misc.en;
public class SwitchInTest {
public static void main(String[] args) {
short t = 2;
switch(t) {
case -56:
case 0:
case 3:
case 129:
System.out.println();
default:
}
}
}

@ -1,31 +0,0 @@
package test.misc.en;
public class TestOperation {
public void test() {
double x = 2;
double y = 3;
Operation opp = Operation.DIVIDED_BY;
switch(opp) {
case MINUS:
System.out.println();
case PLUS:
}
switch(Operation.MINUS) {
case DIVIDED_BY:
System.out.println();
case PLUS:
case TIMES:
}
for (Operation op : Operation.values()) {
System.out.println(x + " " + op + " " + y + " = " + op.eval(x, y));
}
}
}

@ -1,15 +0,0 @@
package test.output;
import java.lang.reflect.Method;
public class TestEclipse7 {
public void testMultiCatch() {
try {
Method e = this.getClass().getDeclaredMethod("foo", new Class[0]);
} catch (SecurityException | NoSuchMethodException var2) {
var2.printStackTrace();
}
}
}

@ -1,129 +0,0 @@
package test.output;
import java.io.FileReader;
import java.io.IOException;
import java.lang.reflect.Method;
public class TestJavac7 {
public void testTryResources() throws IOException {
FileReader var1 = new FileReader("file");
Throwable var2 = null;
try {
FileReader var3 = new FileReader("file");
Throwable var4 = null;
try {
System.out.println();
} catch (Throwable var27) {
var4 = var27;
throw var27;
} finally {
if(var3 != null) {
if(var4 != null) {
try {
var3.close();
} catch (Throwable var26) {
var4.addSuppressed(var26);
}
} else {
var3.close();
}
}
}
} catch (Throwable var29) {
var2 = var29;
throw var29;
} finally {
if(var1 != null) {
if(var2 != null) {
try {
var1.close();
} catch (Throwable var25) {
var2.addSuppressed(var25);
}
} else {
var1.close();
}
}
}
}
public void testTryResources1() throws IOException {
try {
FileReader var1 = new FileReader("file");
Throwable var2 = null;
try {
System.out.println("block");
} catch (Throwable var20) {
var2 = var20;
throw var20;
} finally {
if(var1 != null) {
if(var2 != null) {
try {
var1.close();
} catch (Throwable var19) {
var2.addSuppressed(var19);
}
} else {
var1.close();
}
}
}
} catch (RuntimeException var22) {
System.out.println(var22.toString());
} finally {
System.out.println("finally");
}
}
public void testMultiCatch() {
try {
Method var1 = this.getClass().getDeclaredMethod("foo", new Class[0]);
} catch (SecurityException var2) {
var2.printStackTrace();
}
}
public void testSwitchString() {
String var1 = "";
byte var3 = -1;
switch(var1.hashCode()) {
case 2112:
if(var1.equals("BB")) {
var3 = 1;
} else if(var1.equals("Aa")) {
var3 = 0;
}
break;
case 3040:
if(var1.equals("__")) {
var3 = 2;
}
}
switch(var3) {
case 0:
System.out.println("!");
break;
case 1:
System.out.println("?");
break;
case 2:
System.out.println("_");
break;
default:
System.out.println("#");
}
}
}

@ -1,104 +0,0 @@
package test.output;
import java.io.FileReader;
import java.io.IOException;
import java.lang.reflect.Method;
public class TestJavac8 {
public static void main(String[] var0) {
(new TestJavac8()).testLambda();
}
public void testTryResources() throws IOException {
FileReader var1 = new FileReader("file");
Throwable var2 = null;
try {
FileReader var3 = new FileReader("file");
Throwable var4 = null;
try {
System.out.println();
} catch (Throwable var27) {
var4 = var27;
throw var27;
} finally {
if(var3 != null) {
if(var4 != null) {
try {
var3.close();
} catch (Throwable var26) {
var4.addSuppressed(var26);
}
} else {
var3.close();
}
}
}
} catch (Throwable var29) {
var2 = var29;
throw var29;
} finally {
if(var1 != null) {
if(var2 != null) {
try {
var1.close();
} catch (Throwable var25) {
var2.addSuppressed(var25);
}
} else {
var1.close();
}
}
}
}
public void testMultiCatch() {
try {
Method var1 = this.getClass().getDeclaredMethod("foo", new Class[0]);
} catch (SecurityException var2) {
var2.printStackTrace();
}
}
private void testSwitchString() {
String var1 = "";
byte var3 = -1;
switch(var1.hashCode()) {
case 2112:
if(var1.equals("BB")) {
var3 = 1;
} else if(var1.equals("Aa")) {
var3 = 0;
}
break;
case 3040:
if(var1.equals("__")) {
var3 = 2;
}
}
switch(var3) {
case 0:
System.out.println("!");
break;
case 1:
System.out.println("?");
break;
case 2:
System.out.println("_");
break;
default:
System.out.println("#");
}
}
public void testLambda() {
}
}

@ -1,187 +0,0 @@
package test.util;
import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.Collections;
import java.util.HashSet;
import java.util.List;
import de.fernflower.code.cfg.BasicBlock;
import de.fernflower.code.cfg.ControlFlowGraph;
import de.fernflower.modules.decompiler.StatEdge;
import de.fernflower.modules.decompiler.sforms.DirectGraph;
import de.fernflower.modules.decompiler.sforms.DirectNode;
import de.fernflower.modules.decompiler.stats.Statement;
import de.fernflower.modules.decompiler.vars.VarVersionEdge;
import de.fernflower.modules.decompiler.vars.VarVersionNode;
import de.fernflower.modules.decompiler.vars.VarVersionsGraph;
public class DotExporter {
public static String toDotFormat(Statement stat) {
StringBuffer buffer = new StringBuffer();
buffer.append("digraph G {\r\n");
for(Statement st : stat.getStats()) {
String sourceid = st.id + (st.getSuccessorEdges(StatEdge.TYPE_EXCEPTION).isEmpty()?"":"000000");
buffer.append(sourceid+" [shape=box,label=\""+sourceid+"\"];\r\n");
for(StatEdge edge : st.getSuccessorEdges(Statement.STATEDGE_DIRECT_ALL)) {
String destid = edge.getDestination().id + (edge.getDestination().getSuccessorEdges(StatEdge.TYPE_EXCEPTION).isEmpty()?"":"000000");
buffer.append(sourceid+"->"+destid+";\r\n");
if(!stat.getStats().contains(edge.getDestination())) {
buffer.append(destid+" [label=\""+destid+"\"];\r\n");
}
}
for(StatEdge edge : st.getSuccessorEdges(StatEdge.TYPE_EXCEPTION)) {
String destid = edge.getDestination().id + (edge.getDestination().getSuccessorEdges(StatEdge.TYPE_EXCEPTION).isEmpty()?"":"000000");
buffer.append(sourceid+" -> "+destid+" [style=dotted];\r\n");
if(!stat.getStats().contains(edge.getDestination())) {
buffer.append(destid+" [label=\""+destid+"\"];\r\n");
}
}
}
buffer.append("}");
return buffer.toString();
}
public static String toDotFormat(ControlFlowGraph graph, boolean showMultipleEdges) {
StringBuffer buffer = new StringBuffer();
buffer.append("digraph G {\r\n");
List<BasicBlock> blocks = graph.getBlocks();
for(int i=0;i<blocks.size();i++) {
BasicBlock block = (BasicBlock)blocks.get(i);
buffer.append(block.id+" [shape=box,label=\""+block.id+"\"];\r\n");
List<BasicBlock> suc = block.getSuccs();
if(!showMultipleEdges) {
HashSet<BasicBlock> set = new HashSet<BasicBlock>();
set.addAll(suc);
suc = Collections.list(Collections.enumeration(set));
}
for(int j=0;j<suc.size();j++) {
buffer.append(block.id+"->"+((BasicBlock)suc.get(j)).id+";\r\n");
}
suc = block.getSuccExceptions();
if(!showMultipleEdges) {
HashSet<BasicBlock> set = new HashSet<BasicBlock>();
set.addAll(suc);
suc = Collections.list(Collections.enumeration(set));
}
for(int j=0;j<suc.size();j++) {
buffer.append(block.id+" -> "+((BasicBlock)suc.get(j)).id+" [style=dotted];\r\n");
}
}
buffer.append("}");
return buffer.toString();
}
public static String toDotFormat(VarVersionsGraph graph) {
StringBuffer buffer = new StringBuffer();
buffer.append("digraph G {\r\n");
List<VarVersionNode> blocks = graph.nodes;
for(int i=0;i<blocks.size();i++) {
VarVersionNode block = blocks.get(i);
buffer.append((block.var*1000+block.version)+" [shape=box,label=\""+block.var+"_"+block.version+"\"];\r\n");
for(VarVersionEdge edge: block.succs) {
VarVersionNode dest = edge.dest;
buffer.append((block.var*1000+block.version)+"->"+(dest.var*1000+dest.version)+(edge.type==VarVersionEdge.EDGE_PHANTOM?" [style=dotted]":"")+";\r\n");
}
}
buffer.append("}");
return buffer.toString();
}
public static String toDotFormat(DirectGraph graph) {
StringBuffer buffer = new StringBuffer();
buffer.append("digraph G {\r\n");
List<DirectNode> blocks = graph.nodes;
for(int i=0;i<blocks.size();i++) {
DirectNode block = blocks.get(i);
buffer.append(directBlockIdToDot(block.id)+" [shape=box,label=\""+directBlockIdToDot(block.id)+"\"];\r\n");
for(DirectNode dest: block.succs) {
buffer.append(directBlockIdToDot(block.id)+"->"+directBlockIdToDot(dest.id)+";\r\n");
}
}
buffer.append("}");
return buffer.toString();
}
private static String directBlockIdToDot(String id) {
id = id.replaceAll("_try", "999");
id = id.replaceAll("_tail", "888");
id = id.replaceAll("_init", "111");
id = id.replaceAll("_cond", "222");
id = id.replaceAll("_inc", "333");
return id;
}
public static void toDotFile(ControlFlowGraph graph, File file, boolean showMultipleEdges) throws FileNotFoundException, IOException {
BufferedOutputStream out = new BufferedOutputStream(new FileOutputStream(file));
out.write(toDotFormat(graph, showMultipleEdges).getBytes());
out.close();
}
public static void toDotFile(VarVersionsGraph graph, File file) throws FileNotFoundException, IOException {
BufferedOutputStream out = new BufferedOutputStream(new FileOutputStream(file));
out.write(toDotFormat(graph).getBytes());
out.close();
}
public static void toDotFile(DirectGraph graph, File file) throws FileNotFoundException, IOException {
BufferedOutputStream out = new BufferedOutputStream(new FileOutputStream(file));
out.write(toDotFormat(graph).getBytes());
out.close();
}
public static void toDotFile(Statement stat, File file) throws FileNotFoundException, IOException {
BufferedOutputStream out = new BufferedOutputStream(new FileOutputStream(file));
out.write(toDotFormat(stat).getBytes());
out.close();
}
}

@ -1,25 +0,0 @@
package test.util;
public class MemoryMonitor implements Runnable {
public static boolean run = false;
public void run() {
while(run) {
try {
Thread.sleep(500);
} catch(InterruptedException ex) {
ex.printStackTrace();
}
//Runtime.getRuntime().gc();
System.err.println((Runtime.getRuntime().totalMemory() - Runtime.getRuntime().freeMemory())/(1024*1024));
}
}
}

@ -1,31 +0,0 @@
package test.util;
import java.util.HashMap;
public class Timer {
private static HashMap<String, Double> mapValue = new HashMap<String, Double>();
public static void addTime(int index, long value) {
addTime(String.valueOf(index), value);
}
public static double getTime(int index) {
return mapValue.get(String.valueOf(index));
}
public static void addTime(String index, double value) {
Double val = mapValue.get(index);
if(val != null) {
value+=val.doubleValue();
}
mapValue.put(index, value);
}
public static double getTime(String index) {
Double value = mapValue.get(index);
return value==null?0:value.doubleValue();
}
}

@ -1,71 +0,0 @@
package test.util;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.util.Enumeration;
import java.util.zip.ZipEntry;
import java.util.zip.ZipFile;
import java.util.zip.ZipOutputStream;
public class ZipStripper {
public static void main(String[] args) {
try {
String sourceFileName = args[0];
File sourceFile = new File(sourceFileName);
File tempFile = new File(sourceFile.getParentFile(), "tmp31415926535.zip");
tempFile.createNewFile();
ZipOutputStream outTemp = new ZipOutputStream(new FileOutputStream(tempFile));
ZipFile archive = new ZipFile(sourceFile);
Enumeration<? extends ZipEntry> en = archive.entries();
while(en.hasMoreElements()) {
ZipEntry entr = en.nextElement();
outTemp.putNextEntry(new ZipEntry(entr.getName()));
if(!entr.isDirectory()) {
InputStream in = archive.getInputStream(entr);
copyInputStream(in, outTemp);
in.close();
}
}
outTemp.flush();
outTemp.close();
archive.close();
String destFileName = args[1];
if(sourceFileName.equals(destFileName)) {
sourceFile.delete();
}
tempFile.renameTo(new File(destFileName));
} catch(Exception ex) {
ex.printStackTrace();
}
}
public static void copyInputStream(InputStream in, OutputStream out)throws IOException {
byte[] buffer = new byte[1024];
int len;
while((len = in.read(buffer)) >= 0) {
out.write(buffer, 0, len);
}
}
}

@ -1,68 +0,0 @@
import java.text.DecimalFormat;
import com.vladium.utils.timing.ITimer;
import com.vladium.utils.timing.TimerFactory;
// ----------------------------------------------------------------------------
/**
* A demo class to show off the higher resolution available from HRTimer class
* and to investigate the resolution offered by Java "time-related"
* methods other than System.currentTimeMillis().<P>
*
* Make sure that hrtlib.dll JNI lib is in java.library.path or TimerFactory
* will fall back to the Java system timer:
* <PRE>
* >java -Djava.library.path=(dir containing hrtlib.dll) HRTimerResolution
* </PRE>
*
* @author (C) <a href="mailto:vroubtsov@illinoisalumni.org">Vlad Roubtsov</a>, 2002
*/
public class HRTimerResolution
{
// public: ................................................................
public static void main (final String [] args) throws Exception
{
final DecimalFormat format = new DecimalFormat ();
format.setMinimumFractionDigits (3);
format.setMaximumFractionDigits (3);
// create an ITimer using the Factory class:
final ITimer timer = TimerFactory.newTimer ();
// JIT/hotspot warmup:
for (int i = 0; i < 3000; ++ i)
{
timer.start ();
timer.stop ();
timer.getDuration ();
timer.reset ();
}
final Object lock = new Object (); // this is used by monitor.wait() below
for (int i = 0; i < 5; ++ i)
{
timer.start ();
// uncomment various lines below to see the resolution
// offered by other Java time-related methods; with all
// lines commented out this loop reports time elapsed
// between successive calls to t.start() and t.stop(), thus
// providing an estimate for timer's raw resolution
synchronized (lock) { lock.wait (1); }
//Thread.currentThread ().sleep (1);
//Thread.currentThread ().sleep (0, 500);
//Thread.currentThread ().join (1);
timer.stop ();
System.out.println ("duration = "
+ format.format (timer.getDuration ()) + " ms");
timer.reset ();
}
}
} // end of class
// ----------------------------------------------------------------------------

@ -1,31 +0,0 @@
// ----------------------------------------------------------------------------
/**
* A simple class to see what the Java system timer resolution is on your
* system.
*
* @author (C) <a href="mailto:vroubtsov@illinoisalumni.org">Vlad Roubtsov</a>, 2002
*/
public class SystemTimerResolution
{
// public: ................................................................
public static void main (final String [] args)
{
// JIT/hotspot warmup:
for (int r = 0; r < 3000; ++ r) System.currentTimeMillis ();
long time = System.currentTimeMillis (), time_prev = time;
for (int i = 0; i < 5; ++ i)
{
// busy wait until system time changes:
while (time == time_prev)
time = System.currentTimeMillis ();
System.out.println ("delta = " + (time - time_prev) + " ms");
time_prev = time;
}
}
} // end of class
// ----------------------------------------------------------------------------

@ -1,86 +0,0 @@
package com.vladium.utils.timing;
// ----------------------------------------------------------------------------
/**
* A package-private implementation of {@link ITimer} based around native
* <code>getTime</code> method. It will work on any platform for which a JNI
* implementation of "hrtlib" library is available.<P>
*
* {@link TimerFactory} acts as the Factory for this class.<P>
*
* MT-safety: an instance of this class is safe to be used within the same
* thread only.
*
* @author (C) <a href="mailto:vroubtsov@illinoisalumni.org">Vlad Roubtsov</a>, 2002
*/
final class HRTimer implements ITimer, ITimerConstants
{
// public: ................................................................
public void start ()
{
if (DO_STATE_CHECKS)
{
if (m_state != STATE_READY)
throw new IllegalStateException (this + ": start() must be called from READY state, current state is " + STATE_NAMES [m_state]);
}
if (DO_STATE_CHECKS) m_state = STATE_STARTED;
m_data = getTime ();
}
public void stop ()
{
// latch stop time in a local var before doing anything else:
final double data = getTime ();
if (DO_STATE_CHECKS)
{
if (m_state != STATE_STARTED)
throw new IllegalStateException (this + ": stop() must be called from STARTED state, current state is " + STATE_NAMES [m_state]);
}
m_data = data - m_data;
if (DO_STATE_CHECKS) m_state = STATE_STOPPED;
}
public double getDuration ()
{
if (DO_STATE_CHECKS)
{
if (m_state != STATE_STOPPED)
throw new IllegalStateException (this + ": getDuration() must be called from STOPPED state, current state is " + STATE_NAMES [m_state]);
}
return m_data;
}
public void reset ()
{
if (DO_STATE_CHECKS) m_state = STATE_READY;
}
// protected: .............................................................
// package: ...............................................................
// private: ...............................................................
/*
* This is supposed to return a fractional count of milliseconds elapsed
* since some indeterminate moment in the past. The exact starting point
* is not relevant because this timer class reports time differences only.
*
* JNI code in HRTIMER_LIB library is supposed to implement this. */
private static native double getTime ();
private int m_state; // used to keep track of timer state
private double m_data; // timing data
private static final String HRTIMER_LIB = "hrtlib";
} // end of class
// ----------------------------------------------------------------------------

@ -1,54 +0,0 @@
package com.vladium.utils.timing;
// ----------------------------------------------------------------------------
/**
* A simple interface for measuring time intervals. An instance of this goes
* through the following lifecycle states:
* <DL>
* <DT> <EM>ready</EM>
* <DD> timer is ready to start a new measurement
* <DT> <EM>started</EM>
* <DD> timer has recorded the starting time interval point
* <DT> <EM>stopped</EM>
* <DD> timer has recorded the ending time interval point
* </DL>
* See individual methods for details.<P>
*
* If this library has been compiled with {@link ITimerConstants#DO_STATE_CHECKS}
* set to 'true' the implementation will enforce this lifecycle model and throw
* IllegalStateException when it is violated.
*
* @author (C) <a href="mailto:vroubtsov@illinoisalumni.org">Vlad Roubtsov</a>, 2002
*/
public interface ITimer
{
// public: ................................................................
/**
* Starts a new time interval and advances this timer instance to 'started'
* state. This method can be called from 'ready' state only. */
void start ();
/**
* Terminates the current time interval and advances this timer instance to
* 'stopped' state. Interval duration will be available via
* {@link #getDuration()} method. This method can be called from 'started'
* state only. */
void stop ();
/**
* Returns the duration of the time interval that elapsed between the last
* calls to {@link #start()} and {@link #stop()}. This method can be called
* any number of times from 'stopped' state and will return the same value
* each time.<P>
* * @return interval duration in milliseconds */
double getDuration ();
/**
* This method can be called from any state and will reset this timer
* instance back to 'ready' state. */
void reset ();
} // end of interface
// ----------------------------------------------------------------------------

@ -1,31 +0,0 @@
package com.vladium.utils.timing;
// ----------------------------------------------------------------------------
/**
* A package-private collection of constants used by {@link ITimer} implementations
* in <code>HRTimer</code> and <code>JavaSystemTimer</code> classes.
*
* @author (C) <a href="mailto:vroubtsov@illinoisalumni.org">Vlad Roubtsov</a>, 2002
*/
interface ITimerConstants
{
// public: ................................................................
/**
* Conditional compilation flag to enable/disable state checking in timer
* implementations. Just about the only reason you might want to disable
* this is to reduce the timer overhead, but in practice the gain is very
* small. */
static final boolean DO_STATE_CHECKS = true;
/**
* Timer state enumeration. */
static final int STATE_READY = 0, STATE_STARTED = 1, STATE_STOPPED = 2;
/**
* User-friendly timer state names indexed by their state values. */
static final String [] STATE_NAMES = {"READY", "STARTED", "STOPPED"};
} // end of interface
// ----------------------------------------------------------------------------

@ -1,74 +0,0 @@
package com.vladium.utils.timing;
// ----------------------------------------------------------------------------
/**
* A package-private implementation of {@link ITimer} based around Java system
* timer [<code>System.currentTimeMillis()</code> method]. It is used when
* <code>HRTimer</code> implementation is unavailable.<P>
*
* {@link TimerFactory} acts as the Factory for this class.<P>
*
* MT-safety: an instance of this class is safe to be used within the same
* thread only.
*
* @author (C) <a href="mailto:vroubtsov@illinoisalumni.org">Vlad Roubtsov</a>, 2002
*/
final class JavaSystemTimer implements ITimer, ITimerConstants
{
// public: ................................................................
public void start ()
{
if (DO_STATE_CHECKS)
{
if (m_state != STATE_READY)
throw new IllegalStateException (this + ": start() must be called from READY state, current state is " + STATE_NAMES [m_state]);
}
if (DO_STATE_CHECKS) m_state = STATE_STARTED;
m_data = System.currentTimeMillis ();
}
public void stop ()
{
// latch stop time in a local var before doing anything else:
final long data = System.currentTimeMillis ();
if (DO_STATE_CHECKS)
{
if (m_state != STATE_STARTED)
throw new IllegalStateException (this + ": stop() must be called from STARTED state, current state is " + STATE_NAMES [m_state]);
}
m_data = data - m_data;
if (DO_STATE_CHECKS) m_state = STATE_STOPPED;
}
public double getDuration ()
{
if (DO_STATE_CHECKS)
{
if (m_state != STATE_STOPPED)
throw new IllegalStateException (this + ": getDuration() must be called from STOPPED state, current state is " + STATE_NAMES [m_state]);
}
return m_data;
}
public void reset ()
{
if (DO_STATE_CHECKS) m_state = STATE_READY;
}
// protected: .............................................................
// package: ...............................................................
// private: ...............................................................
private int m_state; // used to keep track of timer state
private long m_data; // timing data
} // end of class
// ----------------------------------------------------------------------------

@ -1,74 +0,0 @@
package com.vladium.utils.timing;
// ----------------------------------------------------------------------------
/**
* This non-instantiable non-extendible class acts as a Factory for {@link ITimer}
* implementations.
*
* @author (C) <a href="mailto:vroubtsov@illinoisalumni.org">Vlad Roubtsov</a>, 2002
*/
public abstract class TimerFactory
{
// public: ................................................................
private static final String HRTIMER_LIB = "hrtlib";
/**
* Creates a new instance of {@link ITimer} which is returned in 'ready'
* state. If the JNI-based/high-resolution implementation is not available
* this will return an instance of <code>JavaSystemTimer</code>, so this
* method is guaranteed not to fail.
*
* @return ITimer a new timer instance in 'ready' state [never null] */
public static void initialize(String path) {
UnsatisfiedLinkError exception = null;
try {
System.loadLibrary (HRTIMER_LIB);
} catch (UnsatisfiedLinkError e) {
if(path != null) {
try {
System.load(path);
} catch (UnsatisfiedLinkError ex) {
exception = ex;
}
} else {
exception = e;
}
}
if(exception != null) {
System.out.println ("native lib '" + HRTIMER_LIB
+ "' not found in 'java.library.path': "
+ System.getProperty ("java.library.path")
+path==null?"":(" or in "+path));
throw exception; // re-throw
}
}
public static ITimer newTimer ()
{
// try
// {
return new HRTimer ();
// }
// catch (Throwable t)
// {
// return new JavaSystemTimer ();
// }
}
// protected: .............................................................
// package: ...............................................................
// private: ...............................................................
private TimerFactory () {} // prevent subclassing
} // end of class
// ----------------------------------------------------------------------------

@ -1,71 +0,0 @@
/* ------------------------------------------------------------------------- */
/*
* A win32 implementation of JNI methods in com.vladium.utils.timing.HRTimer
* class. The author compiled it using Microsoft Visual C++ but the code
* should be easy to use with any compiler for win32 platform.
*
* For simplicity, this implementaion assumes JNI 1.2+ and omits error handling.
*
* (C) 2002, Vladimir Roubtsov [vroubtsov@illinoisalumni.org]
*/
/* ------------------------------------------------------------------------- */
#if !defined NDEBUG
#include <stdio.h>
#endif // NDEBUG
#include <windows.h>
#include "com_vladium_utils_timing_HRTimer.h"
// scale factor for converting a performancce counter reading into milliseconds:
static jdouble s_scaleFactor;
/* ------------------------------------------------------------------------- */
/*
* This method was added in JNI 1.2. It is executed once before any other
* methods are called and is ostensibly for negotiating JNI spec versions, but
* can also be conveniently used for initializing variables that will not
* change throughout the lifetime of this process.
*/
JNIEXPORT jint JNICALL
JNI_OnLoad (JavaVM * vm, void * reserved)
{
LARGE_INTEGER counterFrequency;
QueryPerformanceFrequency (& counterFrequency);
// NOTE: counterFrequency will be zero for a machine that does not have
// support for a high-resolution counter. This is only likely for very
// old hardware but for a robust implementation you should handle this
// case.
#if !defined NDEBUG
printf ("PCFrequency called: %I64d\n", counterFrequency.QuadPart);
#endif
s_scaleFactor = counterFrequency.QuadPart / 1000.0;
return JNI_VERSION_1_2;
}
/* ......................................................................... */
/*
* Class: com_vladium_utils_timing_HRTimer
* Method: getTime
* Signature: ()D
*/
JNIEXPORT jdouble JNICALL
Java_com_vladium_utils_timing_HRTimer_getTime (JNIEnv * e, jclass cls)
{
LARGE_INTEGER counterReading;
QueryPerformanceCounter (& counterReading);
return counterReading.QuadPart / s_scaleFactor;
}
/* ------------------------------------------------------------------------- */
/* end of file */

@ -1,22 +0,0 @@
/* DO NOT EDIT THIS FILE - it is machine generated */
#include <jni.h>
/* Header for class com_vladium_utils_timing_HRTimer */
#ifndef _Included_com_vladium_utils_timing_HRTimer
#define _Included_com_vladium_utils_timing_HRTimer
#ifdef __cplusplus
extern "C" {
#endif
/*
* Class: com_vladium_utils_timing_HRTimer
* Method: getTime
* Signature: ()D
*/
JNIEXPORT jdouble JNICALL
Java_com_vladium_utils_timing_HRTimer_getTime (JNIEnv *, jclass);
#ifdef __cplusplus
}
#endif
#endif
Loading…
Cancel
Save