parsecs 0.2.17 → 0.2.18
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/libnativemath/extconf.rb +3 -1
- data/ext/libnativemath/libnativemath.cpp +11 -6
- data/ext/libnativemath/libnativemath.h +1 -2
- data/ext/libnativemath/libnativemath.i +1 -26
- data/lib/parsec.rb +13 -11
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: d850257e0e5d9d26760ea04e158f9f08e96f1440b8495b0f1dc81973e4b68f23
|
4
|
+
data.tar.gz: 270303f76489572601d29a3cee954bd7d4c00908bf0bb5eb6cd05ab6f6f3fe4e
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 722c0c885e316e152350f47461bd1fae9e4c3dae0ded6f4bb0347c277ebf741cdec076d06492cb004ebf3b47d628eda31ace66dc041710fa7e2c388a6b39b115
|
7
|
+
data.tar.gz: be27c26f0f36f5c7567fb38170bbf9ba386d0ee7b4af7577d1d3bc16e8f96d120aeb0b265434963ec6da6a3f3142a2f524115911eb2f10f977d770a792b391ac
|
@@ -37,9 +37,11 @@ libs.each do |lib|
|
|
37
37
|
$LOCAL_LIBS << "#{lib} "
|
38
38
|
end
|
39
39
|
|
40
|
+
GIT_REPOSITORY = 'https://github.com/niltonvasques/equations-parser.git'.freeze
|
41
|
+
|
40
42
|
Dir.chdir(BASEDIR) do
|
41
43
|
system('git init')
|
42
|
-
system(
|
44
|
+
system("git submodule add #{GIT_REPOSITORY} ext/equations-parser")
|
43
45
|
system('git submodule update --init --recursive')
|
44
46
|
|
45
47
|
Dir.chdir('ext/equations-parser/') do
|
@@ -1,4 +1,5 @@
|
|
1
1
|
/* ext/libnativemath.cpp */
|
2
|
+
#include <string>
|
2
3
|
#include <iostream>
|
3
4
|
#include <cmath>
|
4
5
|
#include "mpParser.h"
|
@@ -33,17 +34,21 @@ Value Calc(string input) {
|
|
33
34
|
return ans;
|
34
35
|
}
|
35
36
|
|
36
|
-
|
37
|
+
string native_direct_eval(string input) {
|
37
38
|
Value ans = Calc(input);
|
38
39
|
return ans.AsString();
|
39
40
|
}
|
40
41
|
|
41
|
-
|
42
|
+
string native_eval(string input) {
|
42
43
|
Value ans = Calc(input);
|
44
|
+
stringstream_type ss;
|
43
45
|
|
44
|
-
|
45
|
-
|
46
|
+
// Converting to json-like string
|
47
|
+
ss << _T("{");
|
48
|
+
ss << _T("\"value\": \"") << ans.AsString() << _T("\"");
|
49
|
+
ss << _T(", ");
|
50
|
+
ss << _T("\"type\": \"") << ans.GetType() << _T("\"");
|
51
|
+
ss << _T("}");
|
46
52
|
|
47
|
-
|
48
|
-
return 0;
|
53
|
+
return ss.str();
|
49
54
|
}
|
@@ -6,29 +6,4 @@
|
|
6
6
|
%}
|
7
7
|
|
8
8
|
extern std::string native_direct_eval(std::string input);
|
9
|
-
|
10
|
-
%typemap(in, numinputs=0) (char *value, char *value_type) {
|
11
|
-
$1 = (char *)malloc(100 * sizeof(char));
|
12
|
-
$2 = (char *)malloc(2 * sizeof(char));
|
13
|
-
};
|
14
|
-
%typemap(argout) (char *value, char *value_type) {
|
15
|
-
if(result == 0) {
|
16
|
-
$result = rb_hash_new();
|
17
|
-
rb_hash_aset($result, rb_str_new2("value"), rb_str_new2($1));
|
18
|
-
switch (*$2) {
|
19
|
-
case 'i': rb_hash_aset($result, rb_str_new2("type"), rb_str_new2("int")); break;
|
20
|
-
case 'f': rb_hash_aset($result, rb_str_new2("type"), rb_str_new2("float")); break;
|
21
|
-
case 'm': rb_hash_aset($result, rb_str_new2("type"), rb_str_new2("matrix")); break;
|
22
|
-
case 's': rb_hash_aset($result, rb_str_new2("type"), rb_str_new2("string")); break;
|
23
|
-
case 'b': rb_hash_aset($result, rb_str_new2("type"), rb_str_new2("boolean")); break;
|
24
|
-
}
|
25
|
-
} else {
|
26
|
-
$result = Qfalse;
|
27
|
-
}
|
28
|
-
}
|
29
|
-
|
30
|
-
%typemap(freearg) (char *value, char *value_type) {
|
31
|
-
free($1);
|
32
|
-
free($2);
|
33
|
-
}
|
34
|
-
extern int native_eval(std::string input, char *value, char *value_type);
|
9
|
+
extern std::string native_eval(std::string input);
|
data/lib/parsec.rb
CHANGED
@@ -1,28 +1,29 @@
|
|
1
1
|
require 'string_to_boolean_refinements'
|
2
2
|
require 'libnativemath'
|
3
|
+
require 'json'
|
3
4
|
|
4
5
|
module Parsec
|
5
6
|
# This is the main class responsible to evaluate the equations
|
6
7
|
class Parsec
|
7
8
|
using StringToBooleanRefinements
|
8
9
|
|
9
|
-
VERSION = '0.2.
|
10
|
+
VERSION = '0.2.18'.freeze
|
10
11
|
|
11
12
|
# evaluates the equation
|
12
13
|
def self.eval_equation(equation)
|
13
14
|
remove_spaces(equation)
|
14
15
|
|
15
|
-
convert(Libnativemath.native_eval(equation))
|
16
|
+
convert(JSON.parse(Libnativemath.native_eval(equation)))
|
16
17
|
end
|
17
18
|
|
18
19
|
# returns true or raise an error
|
19
20
|
def self.validate_syntax(equation)
|
20
|
-
validate(Libnativemath.native_eval(equation), true)
|
21
|
+
validate(JSON.parse(Libnativemath.native_eval(equation)), true)
|
21
22
|
end
|
22
23
|
|
23
24
|
# returns true or an error string
|
24
25
|
def self.verify_syntax(equation)
|
25
|
-
validate(Libnativemath.native_eval(equation), false)
|
26
|
+
validate(JSON.parse(Libnativemath.native_eval(equation)), false)
|
26
27
|
end
|
27
28
|
|
28
29
|
private_class_method
|
@@ -40,21 +41,22 @@ module Parsec
|
|
40
41
|
end
|
41
42
|
|
42
43
|
case ans['type']
|
43
|
-
when '
|
44
|
-
when '
|
45
|
-
when '
|
46
|
-
when '
|
47
|
-
when 'c'
|
44
|
+
when 'i' then return ans['value'].to_i
|
45
|
+
when 'f' then return ans['value'].to_f
|
46
|
+
when 'b' then return ans['value'].to_bool
|
47
|
+
when 's' then return error_check(ans['value'])
|
48
|
+
when 'c' then return 'complex number' # Maybe future implementation
|
49
|
+
when 'm' then return 'matrix value' # Maybe future implementation
|
48
50
|
end
|
49
51
|
end
|
50
52
|
|
51
|
-
def self.
|
53
|
+
def self.error_check(output)
|
52
54
|
raise SyntaxError, output.sub('Error: ', '') if output.include?('Error')
|
53
55
|
output.delete('\"')
|
54
56
|
end
|
55
57
|
|
56
58
|
def self.validate(ans, raise_error)
|
57
|
-
if (ans['type'] == '
|
59
|
+
if (ans['type'] == 's') && ans['value'].include?('Error: ')
|
58
60
|
raise SyntaxError, ans['value'].sub('Error: ', '') if raise_error
|
59
61
|
return ans['value'].sub('Error: ', '')
|
60
62
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: parsecs
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.2.
|
4
|
+
version: 0.2.18
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Nilton Vasques
|
@@ -10,7 +10,7 @@ authors:
|
|
10
10
|
autorequire:
|
11
11
|
bindir: bin
|
12
12
|
cert_chain: []
|
13
|
-
date: 2018-06-
|
13
|
+
date: 2018-06-05 00:00:00.000000000 Z
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|
16
16
|
name: minitest
|