propane 0.6.0-java → 0.7.0-java

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -28,7 +28,7 @@ public class PropaneLibrary implements Library{
28
28
  * @param runtime
29
29
  */
30
30
  public static void load(final Ruby runtime) {
31
- MathTool.createMathTool(runtime);
31
+ MathToolModule.createMathToolModule(runtime);
32
32
  Deglut.createDeglut(runtime);
33
33
  Vec2.createVec2(runtime);
34
34
  Vec3.createVec3(runtime);
@@ -0,0 +1,190 @@
1
+ /**
2
+ * This class allows JRubyArt to watch for changes to sketch files
3
+ * specifically those with a 'rb' or 'glsl' extension requires user to supply
4
+ * a path String and code listener to constructor. The code listener should
5
+ * accept a filesystem WatchEvent
6
+ */
7
+
8
+ /*
9
+ * This code is a modified version of WatchDir.java
10
+ * Copyright (c) 2008, 2010, Oracle and/or its affiliates. All rights reserved.
11
+ *
12
+ * Redistribution and use in source and binary forms, with or without
13
+ * modification, are permitted provided that the following conditions
14
+ * are met:
15
+ *
16
+ * - Redistributions of source code must retain the above copyright
17
+ * notice, this list of conditions and the following disclaimer.
18
+ *
19
+ * - Redistributions in binary form must reproduce the above copyright
20
+ * notice, this list of conditions and the following disclaimer in the
21
+ * documentation and/or other materials provided with the distribution.
22
+ *
23
+ * - Neither the name of Oracle nor the names of its
24
+ * contributors may be used to endorse or promote products derived
25
+ * from this software without specific prior written permission.
26
+ *
27
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS
28
+ * IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
29
+ * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
30
+ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
31
+ * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
32
+ * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
33
+ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
34
+ * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
35
+ * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
36
+ * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
37
+ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
38
+ */
39
+ package monkstone;
40
+
41
+ import java.io.IOException;
42
+ import java.nio.file.FileSystems;
43
+ import java.nio.file.FileVisitResult;
44
+ import java.nio.file.Files;
45
+ import java.nio.file.Path;
46
+ import java.nio.file.Paths;
47
+ import java.nio.file.SimpleFileVisitor;
48
+ import static java.nio.file.StandardWatchEventKinds.*;
49
+ import java.nio.file.WatchEvent;
50
+ import java.nio.file.WatchKey;
51
+ import java.nio.file.WatchService;
52
+ import java.nio.file.attribute.BasicFileAttributes;
53
+ import java.util.HashMap;
54
+ import java.util.Map;
55
+
56
+ /**
57
+ * Example to watch a directory (or tree) for changes to files.
58
+ */
59
+ public class WatchSketchDir {
60
+
61
+ private final WatchService watcher;
62
+ private final Map<WatchKey, Path> keys;
63
+ private boolean trace = false;
64
+
65
+ @SuppressWarnings("unchecked")
66
+ static <T> WatchEvent<T> cast(WatchEvent<?> event) {
67
+ return (WatchEvent<T>) event;
68
+ }
69
+
70
+
71
+ /**
72
+ * Register the given directory with the WatchService
73
+ */
74
+ private void register(Path dir) throws IOException {
75
+ WatchKey key = dir.register(watcher, ENTRY_MODIFY);
76
+ if (trace) {
77
+ Path prev = keys.get(key);
78
+ if (prev == null) {
79
+ System.out.format("register: %s\n", dir);
80
+ } else if (!dir.equals(prev)) {
81
+ System.out.format("update: %s -> %s\n", prev, dir);
82
+ }
83
+ }
84
+ keys.put(key, dir);
85
+ }
86
+
87
+ /**
88
+ * Register the given directory, and all its sub-directories, with the
89
+ * WatchService.
90
+ */
91
+ private void registerAll(final Path start) throws IOException {
92
+ // register directory and sub-directories
93
+ Files.walkFileTree(start, new SimpleFileVisitor<Path>() {
94
+ @Override
95
+ public FileVisitResult preVisitDirectory(Path dir, BasicFileAttributes attrs)
96
+ throws IOException {
97
+ register(dir);
98
+ return FileVisitResult.CONTINUE;
99
+ }
100
+ });
101
+ }
102
+
103
+ static final WatchSketchDir watch(String dir) throws IOException{
104
+ return new WatchSketchDir(dir);
105
+ }
106
+
107
+ /**
108
+ * Creates a WatchService and registers the given directory
109
+ * @param dir String
110
+ * @param obj CodeListener
111
+ * @throws IOException
112
+ */
113
+ private WatchSketchDir(String dir) throws IOException {
114
+ this(Paths.get(dir));
115
+ }
116
+
117
+ /**
118
+ * Creates a WatchService and registers the given directory
119
+ *
120
+ * @param dir Path
121
+ * @param obj CodeListener
122
+ * @throws java.io.IOException
123
+ */
124
+ private WatchSketchDir(Path dir) throws IOException {
125
+ this.watcher = FileSystems.getDefault().newWatchService();
126
+ this.keys = new HashMap<>();
127
+
128
+ System.out.format("Scanning Codebase\n", dir);
129
+ registerAll(dir);
130
+ System.out.format("Watching %s\n", dir);
131
+
132
+ // enable trace after initial registration
133
+ this.trace = true;
134
+ }
135
+
136
+ /**
137
+ * Process all events for keys queued to the watcher
138
+ */
139
+ public void addListener(CodeListener obj) {
140
+ for (;;) {
141
+
142
+ // wait for key to be signalled
143
+ WatchKey key;
144
+ try {
145
+ key = watcher.take();
146
+ } catch (InterruptedException x) {
147
+ return;
148
+ }
149
+
150
+ Path dir = keys.get(key);
151
+ if (dir == null) {
152
+ System.err.println("WatchKey not recognized!!");
153
+ continue;
154
+ }
155
+
156
+ key.pollEvents().stream().forEach((WatchEvent<?> event) -> {
157
+ WatchEvent.Kind kind = event.kind();
158
+ // TBD - provide example of how OVERFLOW event is handled
159
+ if (!(kind == OVERFLOW)) {
160
+ // Context for directory entry event is the file name of entry
161
+ WatchEvent<Path> ev = cast(event);
162
+ Path name = ev.context();
163
+ Path child = dir.resolve(name);
164
+ if (kind == ENTRY_MODIFY){
165
+ if (child.toFile().getAbsolutePath().endsWith(".rb")
166
+ || child.toFile().getAbsolutePath().endsWith(".glsl")) {
167
+
168
+ obj.code_event(event);
169
+ key.reset();
170
+ }
171
+ }
172
+ // if directory is created, and watching recursively, then
173
+ // register it and its sub-directories
174
+ }
175
+ });
176
+
177
+ // reset key and remove from set if directory no longer accessible
178
+ boolean valid = key.reset();
179
+ if (!valid) {
180
+ keys.remove(key);
181
+
182
+ // all directories are inaccessible
183
+ if (keys.isEmpty()) {
184
+ break;
185
+ }
186
+ }
187
+ }
188
+ }
189
+
190
+ }
@@ -1,10 +1,29 @@
1
+ /*
2
+ * Copyright (c) 2015-16 Martin Prout
3
+ *
4
+ * This library is free software; you can redistribute it and/or
5
+ * modify it under the terms of the GNU Lesser General Public
6
+ * License as published by the Free Software Foundation; either
7
+ * version 2.1 of the License, or (at your option) any later version.
8
+ *
9
+ * http://creativecommons.org/licenses/LGPL/2.1/
10
+ *
11
+ * This library is distributed in the hope that it will be useful,
12
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
13
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
14
+ * Lesser General Public License for more details.
15
+ *
16
+ * You should have received a copy of the GNU Lesser General Public
17
+ * License along with this library; if not, write to the Free Software
18
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
19
+ */
20
+
1
21
  package monkstone.fastmath;
2
22
 
3
23
  import org.jruby.Ruby;
4
- import org.jruby.RubyClass;
24
+ import org.jruby.RubyInteger;
5
25
  import org.jruby.RubyModule;
6
- import org.jruby.RubyObject;
7
- import org.jruby.anno.JRubyClass;
26
+ import org.jruby.anno.JRubyModule;
8
27
  import org.jruby.anno.JRubyMethod;
9
28
  import org.jruby.runtime.ThreadContext;
10
29
  import org.jruby.runtime.builtin.IRubyObject;
@@ -13,8 +32,8 @@ import org.jruby.runtime.builtin.IRubyObject;
13
32
  *
14
33
  * @author Martin Prout
15
34
  */
16
- @JRubyClass(name = "DegLut")
17
- public class Deglut extends RubyObject {
35
+ @JRubyModule(name = "DegLut")
36
+ public class Deglut {
18
37
 
19
38
  /**
20
39
  * Lookup table for degree cosine/sine, has a fixed precision 1.0
@@ -34,10 +53,10 @@ public class Deglut extends RubyObject {
34
53
 
35
54
  private final static int NINETY = 90;
36
55
  private final static int FULL = 360;
37
- private static final long serialVersionUID = -1466528933765940101L;
56
+ private static final long serialVersionUID = -1466528933765940101L;
38
57
 
39
58
  /**
40
- * Initialise sin table with values (first quadrant only)
59
+ * Initialize sin table with values (first quadrant only)
41
60
  */
42
61
  public static final void initTable() {
43
62
  if (initialized == false) {
@@ -46,41 +65,31 @@ public class Deglut extends RubyObject {
46
65
  }
47
66
  initialized = true;
48
67
  }
49
- }
50
-
51
-
68
+ }
69
+
52
70
  /**
53
71
  *
54
- * @param runtime
72
+ * @param runtime Ruby
55
73
  */
56
74
 
57
75
  public static void createDeglut(final Ruby runtime){
58
76
  RubyModule deglutModule = runtime.defineModule("DegLut");
59
77
  deglutModule.defineAnnotatedMethods(Deglut.class);
60
78
  Deglut.initTable();
61
- }
62
-
63
-
64
- /**
65
- *
66
- * @param runtime
67
- * @param klass
68
- */
69
- private Deglut(Ruby runtime, RubyClass klass) {
70
- super(runtime, klass);
71
79
  }
72
-
80
+
81
+
73
82
  /**
74
83
  *
75
- * @param context
76
- * @param klazz
77
- * @param other
78
- * @return sin float
84
+ * @param context ThreadContext
85
+ * @param recv IRubyObject
86
+ * @param other IRubyObject degrees
87
+ * @return sin IRubyObject
79
88
  */
80
- @JRubyMethod(name = "sin", meta = true)
89
+ @JRubyMethod(name = "sin", module = true)
81
90
 
82
- public static IRubyObject sin(ThreadContext context, IRubyObject klazz, IRubyObject other) {
83
- int thet = (Integer) other.toJava(Integer.class);
91
+ public static IRubyObject sin(ThreadContext context, IRubyObject recv, IRubyObject other) {
92
+ int thet = (int) ((RubyInteger)other).getLongValue();
84
93
  while (thet < 0) {
85
94
  thet += FULL; // Needed because negative modulus plays badly in java
86
95
  }
@@ -89,19 +98,19 @@ public class Deglut extends RubyObject {
89
98
  double result = (theta < NINETY) ? SIN_DEG_LUT[y] : (theta < 180)
90
99
  ? SIN_DEG_LUT[NINETY - y] : (theta < 270)
91
100
  ? -SIN_DEG_LUT[y] : -SIN_DEG_LUT[NINETY - y];
92
- return context.getRuntime().newFloat(result);
101
+ return context.runtime.newFloat(result);
93
102
  }
94
103
 
95
104
  /**
96
105
  *
97
- * @param context
98
- * @param klazz
99
- * @param other
100
- * @return cos float
106
+ * @param context ThreadContext
107
+ * @param recv IRubyObject
108
+ * @param other IRubyObject degrees
109
+ * @return cos IRubyObject
101
110
  */
102
- @JRubyMethod(name = "cos", meta = true)
103
- public static IRubyObject cos(ThreadContext context, IRubyObject klazz, IRubyObject other) {
104
- int thet = (Integer) other.toJava(Integer.class);
111
+ @JRubyMethod(name = "cos", module = true)
112
+ public static IRubyObject cos(ThreadContext context, IRubyObject recv, IRubyObject other) {
113
+ int thet = (int) ((RubyInteger)other).getLongValue();
105
114
  while (thet < 0) {
106
115
  thet += FULL; // Needed because negative modulus plays badly in java
107
116
  }
@@ -110,6 +119,6 @@ public class Deglut extends RubyObject {
110
119
  double result = (theta < NINETY) ? SIN_DEG_LUT[NINETY - y] : (theta < 180)
111
120
  ? -SIN_DEG_LUT[y] : (theta < 270)
112
121
  ? -SIN_DEG_LUT[NINETY - y] : SIN_DEG_LUT[y];
113
- return context.getRuntime().newFloat(result);
122
+ return context.runtime.newFloat(result);
114
123
  }
115
124
  }
@@ -0,0 +1,6 @@
1
+ /*
2
+ * To change this license header, choose License Headers in Project Properties.
3
+ * To change this template file, choose Tools | Templates
4
+ * and open the template in the editor.
5
+ */
6
+ package monkstone.fastmath;
@@ -12,7 +12,7 @@ public class AppRender implements JRender {
12
12
 
13
13
  /**
14
14
  *
15
- * @param app
15
+ * @param app PApplet
16
16
  */
17
17
  public AppRender(final PApplet app) {
18
18
  this.app = app;
@@ -20,8 +20,8 @@ public class AppRender implements JRender {
20
20
 
21
21
  /**
22
22
  *
23
- * @param x
24
- * @param y
23
+ * @param x double
24
+ * @param y double
25
25
  */
26
26
  @Override
27
27
  public void vertex(double x, double y) {
@@ -30,8 +30,8 @@ public class AppRender implements JRender {
30
30
 
31
31
  /**
32
32
  *
33
- * @param x
34
- * @param y
33
+ * @param x double
34
+ * @param y double
35
35
  */
36
36
  @Override
37
37
  public void curveVertex(double x, double y) {
@@ -40,9 +40,9 @@ public class AppRender implements JRender {
40
40
 
41
41
  /**
42
42
  *
43
- * @param x
44
- * @param y
45
- * @param z
43
+ * @param x double
44
+ * @param y double
45
+ * @param z double
46
46
  */
47
47
  @Override
48
48
  public void vertex(double x, double y, double z) {
@@ -51,9 +51,9 @@ public class AppRender implements JRender {
51
51
 
52
52
  /**
53
53
  *
54
- * @param x
55
- * @param y
56
- * @param z
54
+ * @param x double
55
+ * @param y double
56
+ * @param z double
57
57
  */
58
58
  @Override
59
59
  public void normal(double x, double y, double z) {
@@ -62,11 +62,11 @@ public class AppRender implements JRender {
62
62
 
63
63
  /**
64
64
  *
65
- * @param x
66
- * @param y
67
- * @param z
68
- * @param u
69
- * @param v
65
+ * @param x double
66
+ * @param y double
67
+ * @param z double
68
+ * @param u double
69
+ * @param v double
70
70
  */
71
71
  @Override
72
72
  public void vertex(double x, double y, double z, double u, double v) {
@@ -75,13 +75,12 @@ public class AppRender implements JRender {
75
75
 
76
76
  /**
77
77
  *
78
- * @param x
79
- * @param y
80
- * @param z
78
+ * @param x double
79
+ * @param y double
80
+ * @param z double
81
81
  */
82
82
  @Override
83
83
  public void curveVertex(double x, double y, double z) {
84
84
  app.curveVertex((float) x, (float) y, (float) z);
85
85
  }
86
-
87
86
  }
@@ -4,53 +4,53 @@ package monkstone.vecmath;
4
4
  *
5
5
  * @author Martin Prout
6
6
  */
7
- public interface JRender {
7
+ public interface JRender {
8
8
 
9
9
  /**
10
10
  *
11
- * @param x
12
- * @param y
11
+ * @param x double
12
+ * @param y double
13
13
  */
14
14
  public void vertex(double x, double y);
15
15
 
16
16
  /**
17
17
  *
18
- * @param x
19
- * @param y
18
+ * @param x double
19
+ * @param y double
20
20
  */
21
21
  public void curveVertex(double x, double y);
22
22
 
23
23
  /**
24
24
  *
25
- * @param x
26
- * @param y
27
- * @param z
25
+ * @param x double
26
+ * @param y double
27
+ * @param z double
28
28
  */
29
29
  public void vertex(double x, double y, double z);
30
30
 
31
31
  /**
32
32
  *
33
- * @param x
34
- * @param y
35
- * @param z
36
- * @param u
37
- * @param v
33
+ * @param x double
34
+ * @param y double
35
+ * @param z double
36
+ * @param u double
37
+ * @param v double
38
38
  */
39
39
  public void vertex(double x, double y, double z, double u, double v);
40
40
 
41
41
  /**
42
42
  *
43
- * @param x
44
- * @param y
45
- * @param z
43
+ * @param x double
44
+ * @param y double
45
+ * @param z double
46
46
  */
47
47
  public void curveVertex(double x, double y, double z);
48
48
 
49
49
  /**
50
50
  *
51
- * @param x
52
- * @param y
53
- * @param z
51
+ * @param x double
52
+ * @param y double
53
+ * @param z double
54
54
  */
55
55
  public void normal(double x, double y, double z);
56
56
  }