sbool_t sm_ss_insert(sm_t **m, const ss_t *k, const ss_t *v) { ASSERT_RETURN_IF(!m, S_FALSE); struct SMapSS n; n.x.k = n.v = NULL; ss_cpy(&n.x.k, k); ss_cpy(&n.v, v); return st_insert((st_t **)m, (const stn_t *)&n); }
S_INLINE sbool_t sm_si_insert_aux(sm_t **m, const ss_t *k, const sint_t v, const st_rewrite_t rw_f) { ASSERT_RETURN_IF(!m, S_FALSE); struct SMapSI n; n.x.k = NULL; ss_cpy(&n.x.k, k); n.v = v; return st_insert_rw((st_t **)m, (const stn_t *)&n, rw_f); }
S_INLINE void sso1_set0(srt_stringo1 *so, const srt_string *s, srt_string *s0) { size_t ss; if (!so) return; if (!s) s = ss_void; ss = ss_size(s); if (ss <= OptStrMaxSize) { srt_string *s_out = (srt_string *)so->d.s_raw; ss_alloc_into_ext_buf(s_out, OptStrMaxSize); so->t = OptStr_D; ss_cpy(&s_out, s); } else { so->t = OptStr_I; if (s0) { so->i.s = s0; s0 = NULL; ss_cpy(&so->i.s, s); } else so->i.s = ss_dup(s); } ss_free(&s0); }
static size_t rgb2type(ss_t **out, enum ImgTypes ot, const ss_t *rgb0, const struct RGB_Info *ri, const int f) { ss_t *rgb_aux = NULL; const ss_t *rgb; switch (f) { /* Apply filter, if any */ case F_HDPCM: case F_HRDPCM: case F_HDXOR: case F_HRDXOR: case F_VDPCM: case F_VRDPCM: case F_VDXOR: case F_VRDXOR: case F_AVG3: case F_RAVG3: case F_PAETH: case F_RPAETH: case F_RSUB: case F_RRSUB: case F_GSUB: case F_RGSUB: case F_BSUB: case F_RBSUB: rgb = (f == F_HDPCM ? hrgb2dpcm : f == F_HRDPCM ? hdpcm2rgb : f == F_HDXOR ? hrgb2dxor : f == F_HRDXOR ? hdxor2rgb : f == F_VDPCM ? vrgb2dpcm : f == F_VRDPCM ? vdpcm2rgb : f == F_VDXOR ? vrgb2dxor : f == F_VRDXOR ? vdxor2rgb : f == F_AVG3 ? rgb2davg : f == F_RAVG3 ? davg2rgb : f == F_PAETH ? rgb2paeth : f == F_RPAETH ? paeth2rgb : f == F_RSUB ? rgb2rsub : f == F_RRSUB ? rsub2rgb : f == F_GSUB ? rgb2gsub : f == F_RGSUB ? gsub2rgb : f == F_BSUB ? rgb2bsub : bsub2rgb)(&rgb_aux, rgb0, ri) ? rgb_aux : rgb0; if (rgb == rgb0) fprintf(stderr, "filter error! (%i)\n", f); break; default:rgb = rgb0; break; } size_t r = ot == IMG_tga ? rgb2tga(out, rgb, ri) : ot == IMG_ppm || ot == IMG_pgm ? rgb2ppm(out, rgb, ri) : IF_PNG(ot == IMG_png ? rgb2png(out, rgb, ri) :) IF_JPG(ot == IMG_jpg ? rgb2jpg(out, rgb, ri) :) IF_LL1(ot == IMG_ll1 ? rgb2ll1(out, rgb, ri) :) ot == IMG_raw ? ss_size(ss_cpy(out, rgb)) : ot == IMG_none ? rgb_info(rgb, ri) : 0; ss_free(&rgb_aux); return r; }
ss_t *ss_dup(const ss_t *src) { ss_t *s = NULL; return ss_cpy(&s, src); }
S_INLINE void sso_set0(srt_stringo *so, const srt_string *s1, const srt_string *s2, srt_string *sa, srt_string *sb) { size_t s1s, s2s; srt_string *so1, *so2; if (!so) return; if (!s1) s1 = ss_void; if (!s2) s2 = ss_void; s1s = ss_size(s1); s2s = ss_size(s2); if (s1s + s2s <= OptStr_MaxSize_DD) { so1 = (srt_string *)so->kv.di.s_raw; ss_alloc_into_ext_buf(so1, OptStr_MaxSize_DI); ss_cpy(&so1, s1); so->t = OptStr_DD; so2 = (srt_string *)sso_get_s2(so); ss_alloc_into_ext_buf(so2, OptStr_MaxSize_DI - s1s); ss_cpy(&so2, s2); } else if (s1s <= OptStr_MaxSize_DI) { so1 = (srt_string *)so->kv.di.s_raw; ss_alloc_into_ext_buf(so1, OptStr_MaxSize_DI); ss_cpy(&so1, s1); if (sa || sb) { if (sa) { so->kv.di.si = sa; sa = NULL; } else { so->kv.di.si = sb; sb = NULL; } ss_cpy(&so->kv.di.si, s2); } else so->kv.di.si = ss_dup(s2); so->t = OptStr_DI; } else if (s2s <= OptStr_MaxSize_DI) { if (sa || sb) { if (sa) { so->kv.di.si = sa; sa = NULL; } else { so->kv.di.si = sb; sb = NULL; } ss_cpy(&so->kv.di.si, s1); } else so->kv.di.si = ss_dup(s1); so2 = (srt_string *)so->kv.di.s_raw; ss_alloc_into_ext_buf(so2, OptStr_MaxSize_DI); ss_cpy(&so2, s2); so->t = OptStr_ID; } else { if (sa) { so->kv.ii.s1 = sa; sa = NULL; ss_cpy(&so->kv.ii.s1, s1); } else so->kv.ii.s1 = ss_dup(s1); if (sb) { so->kv.ii.s2 = sb; sb = NULL; ss_cpy(&so->kv.ii.s2, s2); } else so->kv.ii.s2 = ss_dup(s2); so->t = OptStr_II; } ss_free(&sa); ss_free(&sb); }