ruby_rnv 0.4.1 → 0.4.2

Sign up to get free protection for your applications and to get access to all the features.
Files changed (4) hide show
  1. checksums.yaml +4 -4
  2. data/ext/rnv/src/drv.c +12 -0
  3. data/ext/rnv/src/type.h +9 -0
  4. metadata +2 -2
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: f815e167e18653e6820b447245834127448b9ac2b72c2f0228baefb40226007d
4
- data.tar.gz: d192a9e1faa7e62c25caf68fca1beaeb7a77f706a85ecf50175f70c5e4dd45f4
3
+ metadata.gz: 899300861f1a2b315f879d451a7a5ee472302fbdac26ea775a2e56e09793d98c
4
+ data.tar.gz: 4f2139ddde96c34a077e124600bb7cbbb0e98ef5db5fe5c57066bdcc8fd4c089
5
5
  SHA512:
6
- metadata.gz: 9d53f3238103630b7617fe91850bd4ad930781981cc3d67cd8a5f1d9cfb4ff90d9de6463483e2ee054bce3cbeb19f6407edeb5dd91008b222a464a6bd7ab07d0
7
- data.tar.gz: 3613bb75f3ef998a5a90af133fcbcc40b51a7bb983149bbcb8bae67e800a72c5a61978f26fb96aed8ec707d2ecbac2a4356fbe457382dbf85277be6638257074
6
+ metadata.gz: c9660b568d0a4fe092080bb095fd80125540ece28c669ecae73faa9391567a337fcd8799702b29bdcecd022b9613f76c3d9e6013f3c289000a5a98950bd67860
7
+ data.tar.gz: 63924d0755a95489733c62ccde564260750dcfea5e0a366e26d6663178b00e47d6ee095f18b8cee293c7c4eba457746a86cb9eedb696c7e63321449cbbf89536
data/ext/rnv/src/drv.c CHANGED
@@ -381,7 +381,18 @@ static int text(rnv_t *rnv, rn_st_t *rn_st, rx_st_t *rx_st, drv_st_t *drv_st, in
381
381
  ret=rn_nullable(list(rnv, rn_st, rx_st, drv_st, p1,s,n))?rnv->rn_empty:rnv->rn_notAllowed;
382
382
  break;
383
383
  case RN_P_DATA: rn_Data(p,dt,ps); rn_Datatype(dt,lib,typ);
384
+ int i;
385
+ // avoid dtl called multiple times for same data
386
+ for(i = 0;i<drv_st->n_dtl_cb;i++) {
387
+ if(drv_st->dtl_cb[i].p == p)
388
+ ret = drv_st->dtl_cb[i].ret;
389
+ }
390
+ if(!ret) {
384
391
  ret=getdtl(rnv, drv_st, lib)->allows(rnv,rn_st,rx_st, lib, rnv->rn_string+typ,rnv->rn_string+ps,s,n)?rnv->rn_empty:rnv->rn_notAllowed;
392
+ drv_st->dtl_cb[drv_st->n_dtl_cb].p = p;
393
+ drv_st->dtl_cb[drv_st->n_dtl_cb].ret = ret;
394
+ drv_st->n_dtl_cb++;
395
+ }
385
396
  break;
386
397
  case RN_P_DATA_EXCEPT: rn_DataExcept(p,p1,p2);
387
398
  ret=text(rnv, rn_st, rx_st, drv_st, p1,s,n)==rnv->rn_empty&&!rn_nullable(text(rnv, rn_st, rx_st, drv_st, p2,s,n))?rnv->rn_empty:rnv->rn_notAllowed;
@@ -395,6 +406,7 @@ static int text(rnv_t *rnv, rn_st_t *rn_st, rx_st_t *rx_st, drv_st_t *drv_st, in
395
406
  }
396
407
 
397
408
  static int textws(rnv_t *rnv, rn_st_t *rn_st, rx_st_t *rx_st, drv_st_t *drv_st, int p,char *s,int n) {
409
+ drv_st->n_dtl_cb = 0;
398
410
  int p1=text(rnv, rn_st, rx_st, drv_st, p,s,n),ws=1;
399
411
  char *end=s+n;
400
412
  while(s!=end) {if(!xmlc_white_space(*s)) {ws=0; break;} ++s;}
data/ext/rnv/src/type.h CHANGED
@@ -105,6 +105,12 @@ typedef struct rx_st
105
105
 
106
106
  } rx_st_t;
107
107
 
108
+ typedef struct dtl_cb
109
+ {
110
+ int p;
111
+ int ret;
112
+ } dtl_cb_t;
113
+
108
114
  typedef struct drv_st
109
115
  {
110
116
  struct dtl *dtl;
@@ -115,6 +121,9 @@ typedef struct drv_st
115
121
  struct hashtable ht_m;
116
122
  int (*memo)[5];
117
123
 
124
+ dtl_cb_t dtl_cb[256];
125
+ int n_dtl_cb;
126
+
118
127
  int drv_compact;
119
128
 
120
129
  int (*verror_handler)(void *data, int erno, char *format, va_list ap);
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: ruby_rnv
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.4.1
4
+ version: 0.4.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Julien Boulnois
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2021-04-12 00:00:00.000000000 Z
11
+ date: 2021-04-20 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler