예제 #1
0
void knh_Bytes_putc(Ctx *ctx, knh_Bytes_t *ba, int ch)
{
	if(BA_size(ba) == ba->capacity) {
		knh_Bytes_expands(ctx, ba, ba->capacity * 2);
	}
	ba->bu.ubuf[BA_size(ba)] = ch;
	BA_size(ba) += 1;
}
예제 #2
0
void knh_Bytes_ensureSize(Ctx *ctx, knh_Bytes_t *ba, size_t len)
{
	DBG_ASSERT(!knh_Bytes_isStatic(ba));
	if(ba->capacity < len) {
		knh_Bytes_expands(ctx, ba, len);
	}
	BA_size(ba) = len;
}
예제 #3
0
knh_Bytes_t* new_Bytes(Ctx *ctx, size_t capacity)
{
	knh_Bytes_t *ba = new_(Bytes);
	if(capacity > 0) {
		knh_Bytes_expands(ctx, ba, capacity);
	}
	return ba;
}
예제 #4
0
파일: bytes.c 프로젝트: shinpei/konoha-wand
void knh_Bytes_putc(CTX ctx, knh_Bytes_t *ba, int ch)
{
	size_t capacity = ba->dim->capacity;
	if(BA_size(ba) == capacity) {
		knh_Bytes_expands(ctx, ba, k_grow(capacity));
	}
	ba->bu.ubuf[BA_size(ba)] = ch;
	BA_size(ba) += 1;
}
예제 #5
0
파일: bytes.c 프로젝트: shinpei/konoha-wand
void knh_Bytes_ensureSize(CTX ctx, knh_Bytes_t *ba, size_t len)
{
	size_t blen = ba->bu.len + len;
	if(ba->dim->capacity < blen) {
		size_t newsize = k_grow(ba->dim->capacity);
		if(newsize < blen) newsize = k_goodsize(blen);
		knh_Bytes_expands(ctx, ba, newsize);
	}
}
예제 #6
0
파일: bytes.c 프로젝트: shinpei/konoha-wand
knh_Bytes_t* new_Bytes(CTX ctx, const char *name, size_t capacity)
{
	knh_Bytes_t *ba = new_(Bytes);
	ba->DBG_name = name;
	if(capacity > 0) {
		knh_Bytes_expands(ctx, ba, capacity);
	}
	return ba;
}
예제 #7
0
파일: bytes.c 프로젝트: shinpei/konoha-wand
const char *knh_Bytes_ensureZero(CTX ctx, knh_Bytes_t *ba)
{
	size_t size = BA_size(ba);
	size_t capacity = ba->dim->capacity;
	if(size == capacity) {
		knh_Bytes_expands(ctx, ba, k_grow(capacity));
	}
	ba->bu.ubuf[BA_size(ba)] = 0;
	return ba->bu.text;
}
예제 #8
0
void knh_Bytes_write(Ctx *ctx, knh_Bytes_t *ba, knh_bytes_t t)
{
	if(t.len == 0) return ;
	if(BA_size(ba) + t.len >= ba->capacity) {
		size_t newsize = ba->capacity * 2;
		if(newsize < BA_size(ba) + t.len) newsize = knh_good_size(BA_size(ba) + t.len);
		knh_Bytes_expands(ctx, ba, newsize);
	}
	knh_memcpy(ba->bu.ubuf + BA_size(ba), t.ustr, t.len);
	BA_size(ba) += t.len;
}
예제 #9
0
파일: os.c 프로젝트: shinpei/konoha-wand
knh_path_t* knh_path_open_(CTX ctx, const char *scheme, knh_bytes_t t, knh_path_t *ph)
{
	knh_Bytes_t *ba = ctx->bufa;
	ph->pstart = ba->bu.len;
	if(!(ba->bu.len + K_PATHMAX < ba->dim->capacity)) {
		knh_Bytes_expands(ctx, ba, K_PAGESIZE);  // K_PATHMAX < KPAGESIZE;
	}
	ba->bu.len += K_PATHMAX;
	knh_path_reset(ctx, ph, scheme, t);
	return ph;
}
예제 #10
0
파일: bytes.c 프로젝트: shinpei/konoha-wand
void knh_Bytes_write(CTX ctx, knh_Bytes_t *ba, knh_bytes_t t)
{
	size_t capacity = ba->dim->capacity;
	if(t.len == 0) return ;
	if(BA_size(ba) + t.len >= capacity) {
		size_t newsize = k_grow(capacity);
		if(newsize < BA_size(ba) + t.len) newsize = k_goodsize(BA_size(ba) + t.len);
		knh_Bytes_expands(ctx, ba, newsize);
	}
	knh_memcpy(ba->bu.ubuf + BA_size(ba), t.utext, t.len);
	BA_size(ba) += t.len;
}
예제 #11
0
const char *knh_Bytes_ensureZero(Ctx *ctx, knh_Bytes_t *ba)
{
	DBG_ASSERT(!knh_Bytes_isStatic(ba));
	size_t size = BA_size(ba);
	if(size == ba->capacity) {
		knh_Bytes_expands(ctx, ba, ba->capacity * 2);
	}
	ba->bu.ubuf[BA_size(ba)] = 0;
//	if(ba->bu.text[size] != 0) {
//		DBG_P("@@@@ pos=%d, ch=%d, %c", size, ba->bu.ubuf[size], ba->bu.ubuf[size]);
//		knh_bzero(ba->bu.ubuf + size, ba->capacity - size);
//	}
	return ba->bu.text;
}