// Convert to UTF-8 #include "push.h" typedef struct{ns * b; int p; ns * down; int val; pull * * c;} bl; void uniToUtf8(ele, ds *); static void fin(ns * bp){bl * b = (bl *)bp; int n = -- b -> p; if(n == 1) {cont = (b -> c); b -> b = (ns *)uniToUtf8; on (b -> down, 128 | (63 & b -> val));} else on(b -> down, 128 | (63 & (b -> val >> (6*(n-1)))));} void uniToUtf8(ele e, ds * bp){bl * b = (bl *)bp; if(e < (1<<7)) on(b -> down, e); else {int n = e < (1<<21)?(e < (1<<16)?(e < (1<<11)?2:3):4) :(e < (1<<26)? 5:(e < (1<<31)?6: errorx(1))); b -> b = (ns *)fin; b -> val = e; b -> c = cont; b -> p = n; cont = (pull * *)bp; on (b -> down, ~(255 >> n) | (e >> (6*n))); }} // http://en.wikipedia.org/wiki/UTF-8