Beispiel #1
0
Datei: UArray.c Projekt: bomma/io
void UArray_setItemType_(UArray *self, CTYPE type)
{
	size_t itemSize = CTYPE_size(type);
	div_t q = div(UArray_sizeInBytes(self), itemSize);

	if (q.rem != 0)
	{
		q.quot += 1;
		UArray_setSize_(self, (q.quot * itemSize) / self->itemSize);
	}

	self->itemType = type;

	self->itemSize = itemSize;
	self->size = q.quot;

	// ensure encoding is sane for type

	if (UArray_isFloatType(self))
	{
		self->encoding = CENCODING_NUMBER;
	}
	else if (self->encoding == CENCODING_ASCII)
	{
		switch(self->itemSize)
		{
			case 2: self->encoding = CENCODING_UCS2; break;
			case 4: self->encoding = CENCODING_UCS4; break;
			case 8: self->encoding = CENCODING_NUMBER; break;
		}
	}
}
Beispiel #2
0
UArray *UArray_asNumberArrayString(const UArray *self)
{
    UArray *out = UArray_new();
    UArray_setEncoding_(out, CENCODING_ASCII);

    UARRAY_INTFOREACH(self, i, v,
                      char s[128];

                      if(UArray_isFloatType(self))
{
    sprintf(s, "%f", (double)v);
    }
    else
    {
        sprintf(s, "%i", (int)v);
    }

    if(i != UArray_size(self) -1 ) strcat(s, ", ");
    UArray_appendBytes_size_(out, (unsigned char *)s, strlen(s));
                     );
Beispiel #3
0
IO_METHOD(IoSeq, at)
{
	/*doc Sequence at(aNumber)
	Returns a value at the index specified by aNumber.
	Returns nil if the index is out of bounds.
	*/

	size_t i = IoMessage_locals_sizetArgAt_(m, locals, 0);
	UArray *a = DATA(self);

	//IOASSERT((i < UArray_size(DATA(self))), "index out of bounds");
	if(i >= UArray_size(DATA(self))) return IONIL(self);

	if(UArray_isFloatType(a))
	{
		return IONUMBER(UArray_doubleAt_(a, i));
	}
	else
	{
		return IONUMBER(UArray_longAt_(a, i));
	}
}
Beispiel #4
0
IO_METHOD(IoSeq, atPut)
{
	/*doc Sequence atPut(aNumberIndex, aNumber)
	Sets the value at the index specified by aNumberIndex to aNumber. Returns self. 
	*/

	size_t i = IoMessage_locals_longArgAt_(m, locals, 0);
	UArray *a = DATA(self);

	IO_ASSERT_NOT_SYMBOL(self);

	if (UArray_isFloatType(a))
	{
		double v = IoMessage_locals_doubleArgAt_(m, locals, 1);
		UArray_at_putDouble_(a, i, v);
	}
	else
	{
		long v = IoMessage_locals_longArgAt_(m, locals, 1);
		UArray_at_putLong_(a, i, v);
	}

	return self;
}