void fmt_tofrom_array(unsigned long (*func)(char*,const char*,unsigned long),
		      array* dest,array* src) {
  unsigned long needed;
  char* x;
  if (array_failed(dest) || array_failed(src)) { array_fail(dest); return; }
  needed=func(0,array_start(src),array_bytes(src));
  if (array_allocate(dest,1,array_bytes(dest)+needed-1)) {
    x=((char*)array_start(dest))+array_bytes(dest)-needed;
    func(x,array_start(src),array_bytes(src));
  } else
    array_fail(dest);
}
void fmt_tofrom_array(size_t (*func)(char*,const char*,size_t),
		      array* dest,array* src) {
  size_t needed;
  char* x;
  if (array_failed(dest) || array_failed(src)) { array_fail(dest); return; }
  needed=func(0,array_start(src),array_bytes(src));
  if (array_bytes(dest)+needed>needed &&
      array_allocate(dest,1,array_bytes(dest)+needed-1)) {
    x=((char*)array_start(dest))+array_bytes(dest)-needed;
    func(x,array_start(src),array_bytes(src));
  } else
    array_fail(dest);
}
Example #3
0
void
array_cate(array* to, const array* const from, int64 pos, int64 stop) {
  if(pos < 0 || stop < pos) {
    array_fail(to);
    return;
  }
  array_catb(to, from->p + pos, stop - pos);
}
Example #4
0
static void test_right_failed()
{
	PREPARE_ARRAY(x, p, int, sizeof(int), 10);
	PREPARE_ARRAY(y, q, int, sizeof(int), 10);
	array_fail(&y);
	array_cat(&x, &y);
	assert(array_failed(&x));
}
Example #5
0
int main() {
  array_t array = ARRAY_INIT(4);
  array_resize(&array, 3);
  if (array_bytes(&array) != 12)
    return 1;
  array_fail(&array);
  if (array_bytes(&array) != 0)
    return 2;
  return 0;
}
Example #6
0
void fmt_to_array(size_t (*func)(char*,const char*,size_t),
		  array* a,const char* src,size_t len) {
  size_t needed=func(0,src,len);
  if (array_bytes(a)+needed>=needed &&
      array_allocate(a,1,array_bytes(a)+needed-1)) {
    char* x=((char*)array_start(a))+array_bytes(a)-needed;
    func(x,src,len);
  } else
    array_fail(a);
}
Example #7
0
void array_catb(array* to,const char* from,uint64 len) {
  long l;
  if (!len) return;
  if (to->allocated<0) return;
  if (to->initialized+len<to->initialized) {
fail:
    array_fail(to);
    return;
  }
  l=to->initialized;
  if (!array_allocate(to,1,to->initialized+len-1))
    goto fail;
  byte_copy(to->p+l,to->initialized-l,from);
}
Example #8
0
static void test_failed()
{
	PREPARE_ARRAY(x, p, int, sizeof(int), 10);
	PREPARE_ARRAY(y, q, int, sizeof(int), 10);
	array_fail(&x);
	array_cat(&x, &y);

	struct array z = y;

	assert(array_failed(&x));
	assert(!array_failed(&y));
	assert(y.p == z.p);
	assert(y.a == z.a);
	assert(y.len == z.len);
}