jps 1.0.0 → 1.0.2
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.
- checksums.yaml +4 -4
- data/ext/jps/map_jps.cpp +137 -49
- data/ext/jps/map_jps.h +9 -0
- data/ext/jps/rjps.cpp +45 -21
- metadata +4 -4
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: ecf21875171d5aa914eb76e1d8ed2e5ffa3d7d85
|
4
|
+
data.tar.gz: be6079ef1db2857848bfa48ca937cc1abc5c082d
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 0aed6aa02665f99f2fba4ad677d9e3d743f558b4d91d6dc4a3a33a27f260f2f64fce7240752bfe9b06ca1e5123d04743ee827631fe37c965460f5a49bc7345d8
|
7
|
+
data.tar.gz: 6dbe99b14ff7dae534feada0e0a00acc5e2abef8fd2e741df9f1f78fe7f397c56929854989c29aa10990de8d551ea584c64e1b869d1cec41cb0bc8748a922373
|
data/ext/jps/map_jps.cpp
CHANGED
@@ -9,9 +9,12 @@
|
|
9
9
|
|
10
10
|
using namespace std;
|
11
11
|
|
12
|
-
Map *
|
13
|
-
vector<JPS::Position>
|
14
|
-
|
12
|
+
Map *gmap = NULL;
|
13
|
+
vector<JPS::Position> gpath;
|
14
|
+
|
15
|
+
typedef std::vector<Map *> VEC_MAPS;
|
16
|
+
typedef std::map<string, VEC_MAPS *> HASH_MAPS;
|
17
|
+
HASH_MAPS *hsMaps = NULL;
|
15
18
|
|
16
19
|
inline unsigned Map::operator()(unsigned x, unsigned y) const
|
17
20
|
{
|
@@ -32,16 +35,30 @@ void Map::clear()
|
|
32
35
|
delete[] this->data;
|
33
36
|
}
|
34
37
|
|
38
|
+
void Map::dispose()
|
39
|
+
{
|
40
|
+
int i,j;
|
41
|
+
for(j = 0; j < this->h; ++j)
|
42
|
+
{
|
43
|
+
for(i = 0; i < this->w; ++i)
|
44
|
+
{
|
45
|
+
this->data[j][i] = 0;
|
46
|
+
}
|
47
|
+
}
|
48
|
+
}
|
49
|
+
|
50
|
+
|
35
51
|
void Map::init(int width, int height)
|
36
52
|
{
|
37
53
|
this->w = width;
|
38
54
|
this->h = height;
|
39
55
|
this->data = new int*[height];
|
56
|
+
|
40
57
|
int i,j;
|
41
|
-
for(j = 0; j <
|
58
|
+
for(j = 0; j < this->h; ++j)
|
42
59
|
{
|
43
|
-
this->data[j] = new int[
|
44
|
-
for(i = 0; i <
|
60
|
+
this->data[j] = new int[this->w];
|
61
|
+
for(i = 0; i < this->w; ++i)
|
45
62
|
{
|
46
63
|
this->data[j][i] = 0;
|
47
64
|
}
|
@@ -50,42 +67,38 @@ void Map::init(int width, int height)
|
|
50
67
|
|
51
68
|
void clearMap()
|
52
69
|
{
|
53
|
-
if(
|
54
|
-
|
55
|
-
|
70
|
+
if(gmap){
|
71
|
+
recycleMap(gmap);
|
72
|
+
gmap = NULL;
|
56
73
|
}
|
57
74
|
}
|
58
75
|
|
59
76
|
void clearPath()
|
60
77
|
{
|
61
|
-
|
62
|
-
{
|
63
|
-
delete path;
|
64
|
-
path = NULL;
|
65
|
-
}
|
78
|
+
gpath.clear();
|
66
79
|
}
|
67
80
|
|
68
81
|
vector<JPS::Position> * findPath(int startX, int startY, int stopX, int stopY)
|
69
82
|
{
|
70
|
-
if(!
|
83
|
+
if(!gmap){
|
71
84
|
return NULL;
|
72
85
|
}
|
73
86
|
|
74
|
-
|
87
|
+
gpath.clear();
|
75
88
|
|
76
89
|
//开始和结束位置不能是障碍 不然找不到路径
|
77
90
|
//这里先设置成非障碍,查询结束后重置回去
|
78
|
-
int oldStartFlag =
|
79
|
-
int oldStopFlag =
|
80
|
-
|
81
|
-
|
91
|
+
int oldStartFlag = gmap->data[startY][startX];
|
92
|
+
int oldStopFlag = gmap->data[stopY][stopX];
|
93
|
+
gmap->data[startY][startX] = 0;
|
94
|
+
gmap->data[stopY][stopX] = 0;
|
82
95
|
|
83
96
|
JPS::PathVector waypoints;
|
84
97
|
JPS::PathVector result;
|
85
98
|
waypoints.push_back(JPS::Pos(JPS::PosType(startX), startY));
|
86
99
|
waypoints.push_back(JPS::Pos(JPS::PosType(stopX), stopY));
|
87
100
|
|
88
|
-
JPS::Searcher<Map> search(*
|
101
|
+
JPS::Searcher<Map> search(*gmap);
|
89
102
|
search.findPath(result, waypoints[0], waypoints[1], 1);
|
90
103
|
|
91
104
|
int curX = startX;
|
@@ -104,18 +117,18 @@ vector<JPS::Position> * findPath(int startX, int startY, int stopX, int stopY)
|
|
104
117
|
if(curX != x && curY != y)
|
105
118
|
{
|
106
119
|
JPS::Position pos1;
|
107
|
-
if(
|
120
|
+
if(gmap->data[curY][x] == 0)
|
108
121
|
{
|
109
122
|
pos1.x = x;
|
110
123
|
pos1.y = curY;
|
111
|
-
|
124
|
+
gpath.push_back(pos1);
|
112
125
|
curX = x;
|
113
126
|
}
|
114
|
-
else if(
|
127
|
+
else if(gmap->data[y][curX] == 0)
|
115
128
|
{
|
116
129
|
pos1.x = curX;
|
117
130
|
pos1.y = y;
|
118
|
-
|
131
|
+
gpath.push_back(pos1);
|
119
132
|
curY = y;
|
120
133
|
}
|
121
134
|
}
|
@@ -123,28 +136,28 @@ vector<JPS::Position> * findPath(int startX, int startY, int stopX, int stopY)
|
|
123
136
|
JPS::Position pos2;
|
124
137
|
pos2.x = x;
|
125
138
|
pos2.y = y;
|
126
|
-
|
139
|
+
gpath.push_back(pos2);
|
127
140
|
curX = x;
|
128
141
|
curY = y;
|
129
142
|
}
|
130
143
|
|
131
144
|
//查询结束后重置回去
|
132
|
-
|
133
|
-
|
134
|
-
return
|
145
|
+
gmap->data[startY][startX] = oldStartFlag;
|
146
|
+
gmap->data[stopY][stopX] = oldStopFlag;
|
147
|
+
return &gpath;
|
135
148
|
}
|
136
149
|
|
137
150
|
JPS::Position findDstPos(int startX,int startY, int endX, int endY,int step)
|
138
151
|
{
|
139
152
|
JPS::Position dstPos;
|
140
|
-
if(!
|
153
|
+
if(!gmap){
|
141
154
|
return dstPos;
|
142
155
|
}
|
143
156
|
|
144
|
-
int oldStartFlag =
|
145
|
-
int oldStopFlag =
|
146
|
-
|
147
|
-
|
157
|
+
int oldStartFlag = gmap->data[startY][startX];
|
158
|
+
int oldStopFlag = gmap->data[endY][endX];
|
159
|
+
gmap->data[startY][startX] = 0;
|
160
|
+
gmap->data[endY][endX] = 0;
|
148
161
|
|
149
162
|
JPS::PathVector waypoints;
|
150
163
|
|
@@ -152,7 +165,7 @@ JPS::Position findDstPos(int startX,int startY, int endX, int endY,int step)
|
|
152
165
|
waypoints.push_back(JPS::Pos(endX, endY));
|
153
166
|
|
154
167
|
JPS::PathVector result;
|
155
|
-
JPS::Searcher<Map> search(*
|
168
|
+
JPS::Searcher<Map> search(*gmap);
|
156
169
|
search.findPath(result, waypoints[0], waypoints[1], 1);
|
157
170
|
|
158
171
|
int curStep = 0;
|
@@ -173,9 +186,9 @@ JPS::Position findDstPos(int startX,int startY, int endX, int endY,int step)
|
|
173
186
|
if(curX != x && curY != y)
|
174
187
|
{
|
175
188
|
vector<int> v1;
|
176
|
-
if(
|
189
|
+
if(gmap->data[curY][x] == 0)
|
177
190
|
curX = x;
|
178
|
-
else if(
|
191
|
+
else if(gmap->data[y][curX] == 0)
|
179
192
|
curY = y;
|
180
193
|
curStep++;
|
181
194
|
|
@@ -199,8 +212,8 @@ JPS::Position findDstPos(int startX,int startY, int endX, int endY,int step)
|
|
199
212
|
}
|
200
213
|
}
|
201
214
|
|
202
|
-
|
203
|
-
|
215
|
+
gmap->data[startY][startX] = oldStartFlag;
|
216
|
+
gmap->data[endY][endX] = oldStopFlag;
|
204
217
|
|
205
218
|
return dstPos;
|
206
219
|
|
@@ -208,23 +221,98 @@ JPS::Position findDstPos(int startX,int startY, int endX, int endY,int step)
|
|
208
221
|
|
209
222
|
void initMap(int width,int height)
|
210
223
|
{
|
211
|
-
if(
|
224
|
+
if(gmap != NULL)
|
212
225
|
clearMap();
|
226
|
+
|
227
|
+
clearPath();
|
228
|
+
|
229
|
+
gmap = borrowMap(width, height);
|
230
|
+
}
|
231
|
+
|
232
|
+
void setMapPos(int posX, int posY,int flag)
|
233
|
+
{
|
234
|
+
if(!gmap){
|
235
|
+
return;
|
213
236
|
}
|
214
|
-
|
215
|
-
|
237
|
+
gmap->data[posY][posX] = flag;
|
238
|
+
}
|
239
|
+
|
240
|
+
int getMapPos(int posX, int posY)
|
241
|
+
{
|
242
|
+
if(!gmap){
|
243
|
+
return 0;
|
216
244
|
}
|
217
245
|
|
218
|
-
|
219
|
-
|
246
|
+
if(posX < 0 || posX >= gmap->w) return 1;
|
247
|
+
if(posY < 0 || posY >= gmap->h) return 1;
|
220
248
|
|
221
|
-
|
249
|
+
return gmap->data[posY][posX];
|
222
250
|
}
|
223
251
|
|
224
|
-
|
252
|
+
/**********************map pool**********************/
|
253
|
+
string makeKey(int width, int height)
|
225
254
|
{
|
226
|
-
|
227
|
-
|
255
|
+
char buff[8] = {0};
|
256
|
+
sprintf(buff, "%d_%d", width, height);
|
257
|
+
std::string ret = buff;
|
258
|
+
return ret;
|
259
|
+
}
|
260
|
+
|
261
|
+
Map * borrowMap(int width, int height)
|
262
|
+
{
|
263
|
+
assert(width > 0);
|
264
|
+
assert(height > 0);
|
265
|
+
|
266
|
+
std::string key = makeKey(width, height);
|
267
|
+
if(hsMaps == NULL)
|
268
|
+
hsMaps = new HASH_MAPS();
|
269
|
+
|
270
|
+
VEC_MAPS *pvecMaps = NULL;
|
271
|
+
HASH_MAPS::iterator it = hsMaps->find(key);
|
272
|
+
if(it != hsMaps->end()){
|
273
|
+
pvecMaps = it->second;
|
274
|
+
}else{
|
275
|
+
pvecMaps = new VEC_MAPS();
|
276
|
+
(*hsMaps)[key] = pvecMaps;
|
228
277
|
}
|
229
|
-
|
278
|
+
|
279
|
+
Map *ret = NULL;
|
280
|
+
if(pvecMaps->size() > 0){
|
281
|
+
ret = pvecMaps->back();
|
282
|
+
pvecMaps->pop_back();
|
283
|
+
}else{
|
284
|
+
ret = new Map();
|
285
|
+
ret->init(width, height);
|
286
|
+
pvecMaps->push_back(ret);
|
287
|
+
}
|
288
|
+
|
289
|
+
return ret;
|
290
|
+
}
|
291
|
+
|
292
|
+
void recycleMap(Map * pmap)
|
293
|
+
{
|
294
|
+
assert(pmap != NULL);
|
295
|
+
std::string key = makeKey(pmap->w, pmap->h);
|
296
|
+
HASH_MAPS::iterator it = hsMaps->find(key);
|
297
|
+
assert(it != hsMaps->end());
|
298
|
+
VEC_MAPS *pvecMaps = it->second;
|
299
|
+
|
300
|
+
pmap->dispose();
|
301
|
+
pvecMaps->push_back(pmap);
|
302
|
+
}
|
303
|
+
|
304
|
+
int getPooldMapKindSize()
|
305
|
+
{
|
306
|
+
return hsMaps->size();
|
230
307
|
}
|
308
|
+
|
309
|
+
int getPooldMapSize(int width, int height)
|
310
|
+
{
|
311
|
+
std::string key = makeKey(width, height);
|
312
|
+
HASH_MAPS::iterator it = hsMaps->find(key);
|
313
|
+
if(it == hsMaps->end()) return 0;
|
314
|
+
return it->second->size();
|
315
|
+
}
|
316
|
+
|
317
|
+
|
318
|
+
|
data/ext/jps/map_jps.h
CHANGED
@@ -2,11 +2,14 @@
|
|
2
2
|
#define MAP_JPS_H_
|
3
3
|
#include "jps.hh"
|
4
4
|
#include <vector>
|
5
|
+
#include <string>
|
6
|
+
#include <map>
|
5
7
|
#include <iostream>
|
6
8
|
using namespace std;
|
7
9
|
struct Map{
|
8
10
|
void init(int width, int height);
|
9
11
|
void clear();
|
12
|
+
void dispose();
|
10
13
|
unsigned operator()(unsigned x, unsigned y) const;
|
11
14
|
int w,h;
|
12
15
|
int **data;
|
@@ -19,4 +22,10 @@ using namespace std;
|
|
19
22
|
JPS::Position findDstPos(int startX,int startY, int endX, int endY,int step);
|
20
23
|
void initMap(int width,int height);
|
21
24
|
void setMapPos(int posX, int posY,int flag);
|
25
|
+
int getMapPos(int posX, int posY);
|
26
|
+
|
27
|
+
Map * borrowMap(int width, int height);
|
28
|
+
void recycleMap(Map * map);
|
29
|
+
int getPooldMapKindSize();
|
30
|
+
int getPooldMapSize(int width, int height);
|
22
31
|
#endif
|
data/ext/jps/rjps.cpp
CHANGED
@@ -4,16 +4,14 @@
|
|
4
4
|
#include "jps.hh"
|
5
5
|
#include <vector>
|
6
6
|
|
7
|
-
extern vector<JPS::Position>
|
8
|
-
extern Map *
|
7
|
+
extern vector<JPS::Position> gpath;
|
8
|
+
extern Map *gmap;
|
9
9
|
|
10
10
|
|
11
11
|
VALUE find_path(VALUE self, VALUE start_x, VALUE start_y, VALUE stop_x, VALUE stop_y)
|
12
12
|
{
|
13
|
-
if(
|
14
|
-
return rb_str_new2("Map is null, plz init
|
15
|
-
if(path == NULL)
|
16
|
-
return rb_str_new2("path is null, plz init map first!");
|
13
|
+
if(gmap == NULL)
|
14
|
+
return rb_str_new2("Map is null, plz init gmap first!");
|
17
15
|
|
18
16
|
int startX = NUM2INT(start_x);
|
19
17
|
int startY = NUM2INT(start_y);
|
@@ -28,7 +26,7 @@ VALUE find_path(VALUE self, VALUE start_x, VALUE start_y, VALUE stop_x, VALUE st
|
|
28
26
|
for(i=0; i< p->size(); ++i)
|
29
27
|
{
|
30
28
|
VALUE arr2 = rb_ary_new();
|
31
|
-
JPS::Position ret =
|
29
|
+
JPS::Position ret = gpath[i];
|
32
30
|
rb_ary_push(arr2, INT2NUM(ret.x));
|
33
31
|
rb_ary_push(arr2, INT2NUM(ret.y));
|
34
32
|
rb_ary_push(arr1, arr2);
|
@@ -38,9 +36,9 @@ VALUE find_path(VALUE self, VALUE start_x, VALUE start_y, VALUE stop_x, VALUE st
|
|
38
36
|
// return INT2FIX(p);
|
39
37
|
}
|
40
38
|
|
41
|
-
VALUE get_path_length(VALUE self)
|
39
|
+
VALUE get_path_length(VALUE self, VALUE path)
|
42
40
|
{
|
43
|
-
return INT2NUM(path
|
41
|
+
return INT2NUM(RARRAY_LEN(path));
|
44
42
|
}
|
45
43
|
|
46
44
|
VALUE clear_map(VALUE self)
|
@@ -52,10 +50,8 @@ VALUE clear_map(VALUE self)
|
|
52
50
|
|
53
51
|
VALUE find_dst_pos(VALUE self, VALUE start_x, VALUE start_y, VALUE end_x, VALUE end_y, VALUE step)
|
54
52
|
{
|
55
|
-
if(
|
56
|
-
return rb_str_new2("Map is null, plz init
|
57
|
-
if(path == NULL)
|
58
|
-
return rb_str_new2("path is null, plz init map first!");
|
53
|
+
if(gmap == NULL)
|
54
|
+
return rb_str_new2("Map is null, plz init gmap first!");
|
59
55
|
|
60
56
|
int startX = NUM2INT(start_x);
|
61
57
|
int startY = NUM2INT(start_y);
|
@@ -63,13 +59,13 @@ VALUE find_dst_pos(VALUE self, VALUE start_x, VALUE start_y, VALUE end_x, VALUE
|
|
63
59
|
int endY = NUM2INT(end_y);
|
64
60
|
int sp = NUM2INT(step);
|
65
61
|
|
66
|
-
if(startX < 0 || startX >=
|
62
|
+
if(startX < 0 || startX >= gmap->w)
|
67
63
|
return rb_str_new2("startX is overflow!");
|
68
|
-
if(startY < 0 || startY >=
|
64
|
+
if(startY < 0 || startY >= gmap->w)
|
69
65
|
return rb_str_new2("startY is overflow!");
|
70
|
-
if(endX < 0 || endX >=
|
66
|
+
if(endX < 0 || endX >= gmap->w)
|
71
67
|
return rb_str_new2("endX is overflow!");
|
72
|
-
if(endY < 0 || endY >=
|
68
|
+
if(endY < 0 || endY >= gmap->w)
|
73
69
|
return rb_str_new2("endY is overflow!");
|
74
70
|
|
75
71
|
JPS::Position ret = findDstPos(startX, startY, endX, endY, sp);
|
@@ -84,7 +80,7 @@ VALUE find_dst_pos(VALUE self, VALUE start_x, VALUE start_y, VALUE end_x, VALUE
|
|
84
80
|
VALUE get_path_point(VALUE self, VALUE idx)
|
85
81
|
{
|
86
82
|
int index = NUM2INT(idx);
|
87
|
-
JPS::Position ret =
|
83
|
+
JPS::Position ret = gpath[index];
|
88
84
|
VALUE point = rb_ary_new();
|
89
85
|
rb_ary_push(point, INT2NUM(ret.x));
|
90
86
|
rb_ary_push(point, INT2NUM(ret.y));
|
@@ -93,8 +89,8 @@ VALUE get_path_point(VALUE self, VALUE idx)
|
|
93
89
|
|
94
90
|
VALUE set_map_pos(VALUE self, VALUE posX, VALUE posY, VALUE flag)
|
95
91
|
{
|
96
|
-
if(
|
97
|
-
return rb_str_new2("Map is null, plz init
|
92
|
+
if(gmap == NULL)
|
93
|
+
return rb_str_new2("Map is null, plz init gmap first!");
|
98
94
|
int x = NUM2INT(posX);
|
99
95
|
int y = NUM2INT(posY);
|
100
96
|
int fg = NUM2INT(flag);
|
@@ -103,6 +99,18 @@ VALUE set_map_pos(VALUE self, VALUE posX, VALUE posY, VALUE flag)
|
|
103
99
|
return INT2NUM(0);
|
104
100
|
}
|
105
101
|
|
102
|
+
VALUE get_map_pos(VALUE self, VALUE posX, VALUE posY)
|
103
|
+
{
|
104
|
+
if(gmap == NULL)
|
105
|
+
return rb_str_new2("Map is null, plz init gmap first!");
|
106
|
+
|
107
|
+
int x = NUM2INT(posX);
|
108
|
+
int y = NUM2INT(posY);
|
109
|
+
int fg = getMapPos(x, y);
|
110
|
+
|
111
|
+
return INT2NUM(fg);
|
112
|
+
}
|
113
|
+
|
106
114
|
VALUE init_map(VALUE self, VALUE width, VALUE height)
|
107
115
|
{
|
108
116
|
int w = NUM2INT(width);
|
@@ -111,16 +119,32 @@ VALUE init_map(VALUE self, VALUE width, VALUE height)
|
|
111
119
|
return INT2NUM(0);
|
112
120
|
}
|
113
121
|
|
122
|
+
VALUE get_pooled_map_kind_size(VALUE self)
|
123
|
+
{
|
124
|
+
int si = getPooldMapKindSize();
|
125
|
+
return INT2NUM(si);
|
126
|
+
}
|
127
|
+
|
128
|
+
VALUE get_pooled_map_size(VALUE self, VALUE width, VALUE height)
|
129
|
+
{
|
130
|
+
int w = NUM2INT(width);
|
131
|
+
int h = NUM2INT(height);
|
132
|
+
int si = getPooldMapSize(w, h);
|
133
|
+
return INT2NUM(si);
|
134
|
+
}
|
114
135
|
|
115
136
|
extern "C" void Init_rjps()
|
116
137
|
{
|
117
138
|
VALUE jps = rb_define_module("Jps");
|
118
139
|
rb_define_module_function(jps, "find_path", RUBY_METHOD_FUNC(find_path), 4);
|
119
140
|
rb_define_module_function(jps, "init_map", RUBY_METHOD_FUNC(init_map), 2);
|
120
|
-
rb_define_module_function(jps, "get_path_length", RUBY_METHOD_FUNC(get_path_length),
|
141
|
+
rb_define_module_function(jps, "get_path_length", RUBY_METHOD_FUNC(get_path_length), 1);
|
121
142
|
rb_define_module_function(jps, "get_path_point", RUBY_METHOD_FUNC(get_path_point), 1);
|
122
143
|
rb_define_module_function(jps, "set_map_pos", RUBY_METHOD_FUNC(set_map_pos), 3);
|
144
|
+
rb_define_module_function(jps, "get_map_pos", RUBY_METHOD_FUNC(get_map_pos), 2);
|
123
145
|
rb_define_module_function(jps, "clear_map", RUBY_METHOD_FUNC(clear_map), 0);
|
124
146
|
rb_define_module_function(jps, "find_dst_pos", RUBY_METHOD_FUNC(find_dst_pos), 5);
|
147
|
+
rb_define_module_function(jps, "get_pooled_map_kind_size", RUBY_METHOD_FUNC(get_pooled_map_kind_size), 0);
|
148
|
+
rb_define_module_function(jps, "get_pooled_map_size", RUBY_METHOD_FUNC(get_pooled_map_size), 2);
|
125
149
|
}
|
126
150
|
|
metadata
CHANGED
@@ -1,17 +1,17 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: jps
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.0.
|
4
|
+
version: 1.0.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- ljf
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2022-07-08 00:00:00.000000000 Z
|
12
12
|
dependencies: []
|
13
13
|
description: jps automated test application
|
14
|
-
email:
|
14
|
+
email: duewnjie@gmail.com
|
15
15
|
executables: []
|
16
16
|
extensions:
|
17
17
|
- ext/jps/extconf.rb
|
@@ -42,7 +42,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
42
42
|
version: '0'
|
43
43
|
requirements: []
|
44
44
|
rubyforge_project:
|
45
|
-
rubygems_version: 2.
|
45
|
+
rubygems_version: 2.5.2.3
|
46
46
|
signing_key:
|
47
47
|
specification_version: 4
|
48
48
|
summary: jps
|