diff vchar.c @ 0:e0bbaa717f41 draft default tip

lol J
author Jordi GutiƩrrez Hermoso <jordigh@octave.org>
date Mon, 25 Nov 2013 11:56:30 -0500 (2013-11-25)
parents
children
line wrap: on
line diff
new file mode 100644
--- /dev/null
+++ b/vchar.c
@@ -0,0 +1,42 @@
+/* Copyright 1990-2011, Jsoftware Inc.  All rights reserved. */
+/* License in license.txt.                                   */
+/*                                                                         */
+/* Verbs: Character Functions  u&(a.&i.) and u&.(a.&i.)                    */
+
+#include "j.h"
+
+
+static APFX(maxC, UC,UC,UC, MAX)
+static APFX(minC, UC,UC,UC, MIN)
+
+static AIFX(ltC,  B, UC,UC, <  )
+static AIFX(leC,  B, UC,UC, <= )
+static AIFX(geC,  B, UC,UC, >= )
+static AIFX(gtC,  B, UC,UC, >  )
+
+#define PLUSX +
+
+DF2(jtcharfn2){A z;B b;C c;I an,ar,*as,m,n,wn,wr,*ws,zn,zt;V*v;VF ado=0;
+ RZ(a&&w);
+ v=VAV(self); c=ID(v->f);
+ if(CUNDER==v->id)switch(c){
+  case CMAX:  zt=LIT; ado=maxC; break;
+  case CMIN:  zt=LIT; ado=minC; break;
+  case CAT:   z=VAV(v->f)->f; v=VAV(z); if(CAMP==v->id&&256==i0(v->f)&&CSTILE==ID(v->g));
+ }else switch(c){
+  case CEQ:   R eq(a,w);
+  case CNE:   R ne(a,w);
+  case CLT:   zt=B01; ado=ltC;  break;
+  case CLE:   zt=B01; ado=leC;  break;
+  case CGE:   zt=B01; ado=geC;  break;
+  case CGT:   zt=B01; ado=gtC;  break;
+ }
+ if(!ado)R df2(a,w,self);
+ an=AN(a); ar=AR(a); as=AS(a);
+ wn=AN(w); wr=AR(w); ws=AS(w);
+ ASSERT(!ICMP(as,ws,MIN(ar,wr)),EVLENGTH);
+ b=ar<=wr; zn=b?wn:an; m=b?an:wn; n=m?zn/m:0;
+ GA(z,zt,zn,b?wr:ar,b?ws:as); if(!zn)R z;
+ ado(jt,b,m,n,CAV(z),CAV(a),CAV(w));
+ R z;
+}