ruby_rnv 0.4.1 → 0.4.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.
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