Exemplo n.º 1
0
Arquivo: UArray.c Projeto: bomma/io
void UArray_setEncoding_(UArray *self, CENCODING encoding)
{
	// ensure that size matches new encoding

	switch(encoding)
	{
		case CENCODING_ASCII:
		case CENCODING_UTF8:
			UArray_setItemType_(self, CTYPE_uint8_t);
			break;
		case CENCODING_UCS2:
			UArray_setItemType_(self, CTYPE_uint16_t);
			break;
		case CENCODING_UCS4:
			UArray_setItemType_(self, CTYPE_uint32_t);
			break;
		case CENCODING_NUMBER:
			// Don't change itemType when setting raw encoding. Raw encoding
			// used for vectors and numbers and the item type may have been set
			// before this call.
			break;
	}

	self->encoding = encoding;
}
Exemplo n.º 2
0
IoObject *IoODEMass_parameters(IoODEMass *self, IoObject *locals, IoMessage *m)
{
	// vector(theMass, cgx, cgy, cgz, I11, I22, I33, I12, I13, I23)

	UArray *u = UArray_new();
	int i, j = 0;

	UArray_setItemType_(u, CTYPE_float32_t);
	UArray_setSize_(u, 10);

	UArray_at_putDouble_(u, j++, DATA(self)->mass);

	for(i=0; i < 3; i++)
	{
		UArray_at_putDouble_(u, j++, DATA(self)->c[i]);
	}

	//              0    1    2   3   4    5    6   7   8    9   10  11
	// I == vector(I11, I12, I13, _, I12, I22, I23, _, I13, I23, I33, _)
	UArray_at_putDouble_(u, j++, DATA(self)->I[0 ]); // I11
	UArray_at_putDouble_(u, j++, DATA(self)->I[5 ]); // I22
	UArray_at_putDouble_(u, j++, DATA(self)->I[10]); // I33
	UArray_at_putDouble_(u, j++, DATA(self)->I[1 ]); // I12
	UArray_at_putDouble_(u, j++, DATA(self)->I[2 ]); // I13
	UArray_at_putDouble_(u, j++, DATA(self)->I[6 ]); // I23

	return IoSeq_newWithUArray_copy_(IOSTATE, u, 1);
}
Exemplo n.º 3
0
IOIMAGE_API IoObject *IoImage_filterGauss(IoImage *self, IoObject *locals, IoMessage *m)
{
	/*doc Image filterGauss(sigma)
	Returns new image as a result of applying filter. Implements Gauss smoothing filtering with parameter sigma.
	*/
	double sigma = IoMessage_locals_doubleArgAt_(m, locals, 0);
	int filterSize = round(sigma * 2.5) * 2 + 1;
	UArray* filter = UArray_new();
	UArray_setItemType_(filter, CTYPE_int8_t);
	UArray_setEncoding_(filter, CENCODING_NUMBER);
	UArray_setSize_(filter, filterSize * filterSize);
	int8_t *filterBytes = UArray_mutableBytes(filter);
	int x, y, x1, y1;
	for(y = 0; y < filterSize; y++)
	{
		y1 = y - filterSize / 2;
		for(x = 0; x < filterSize; x++)
		{
			x1 = x - filterSize / 2;
			filterBytes[x + y * filterSize] = exp(-(x1*x1 + y1*y1)/2/sigma) * filterSize * filterSize * 2;
		}
	}
	IoImage* toReturn = IoImage_newWithImage_(IOSTATE, Image_applyLinearFilter(DATA(self)->image, filterSize, filterSize, filter));
	UArray_free(filter);
	return toReturn;
}
Exemplo n.º 4
0
IOIMAGE_API IoObject *IoImage_filterMedian(IoImage *self, IoObject *locals, IoMessage *m)
{
	/*doc Image filterMedian(filterSizeX, filterSizeY)
	Returns new image as a result of applying filter.
	*/
	int filterSizeX = IoMessage_locals_intArgAt_(m, locals, 0);
	int filterSizeY = IoMessage_locals_intArgAt_(m, locals, 1);
	UArray* filter = UArray_new();
	UArray_setItemType_(filter, CTYPE_int8_t);
	UArray_setEncoding_(filter, CENCODING_NUMBER);
	UArray_setSize_(filter, filterSizeX * filterSizeY);
	memset(UArray_mutableBytes(filter), 1, filterSizeX * filterSizeY);
	IoImage* toReturn = IoImage_newWithImage_(IOSTATE, Image_applyWeightedMedianFilter(DATA(self)->image, filterSizeX, filterSizeY, filter));
	UArray_free(filter);
	return toReturn;
}
Exemplo n.º 5
0
IoRegexMatches *IoRegexMatches_proto(void *state)
{
	IoObject *self = IoObject_new(state);
	IoObject_tag_(self, IoRegexMatches_newTag(state));

	IoObject_setDataPointer_(self, calloc(1, sizeof(IoRegexMatchesData)));
	DATA(self)->regex = IONIL(self);
	DATA(self)->string = IOSYMBOL("");

	DATA(self)->captureArray = UArray_new();
	UArray_setItemType_(DATA(self)->captureArray, CTYPE_uint32_t);

	IoState_registerProtoWithId_(state, self, protoId);

	{
		IoMethodTable methodTable[] = {
			{"setRegex", IoRegexMatches_setRegex},
			{"regex", IoRegexMatches_regex},

			{"setString", IoRegexMatches_setString},
			{"string", IoRegexMatches_string},

			{"setPosition", IoRegexMatches_setPosition},
			{"position", IoRegexMatches_position},
			{"setEndPosition", IoRegexMatches_setEndPosition},
			{"endPosition", IoRegexMatches_endPosition},

			{"next", IoRegexMatches_next},
			{"anchored", IoRegexMatches_anchored},

			{"allowEmptyMatches", IoRegexMatches_allowEmptyMatches},
			{"disallowEmptyMatches", IoRegexMatches_disallowEmptyMatches},
			{"allowsEmptyMatches", IoRegexMatches_allowsEmptyMatches},

			{0, 0},
		};

		IoObject_addMethodTable_(self, methodTable);
	}

	return self;
}
Exemplo n.º 6
0
IoObject *IoODEMass_inertiaTensor(IoODEMass *self, IoObject *locals, IoMessage *m)
{
	UArray *u = UArray_new();
	int i, j;

	UArray_setItemType_(u, CTYPE_float32_t);
	UArray_setSize_(u, 9);

	// I == vector(I11, I12, I13, _, I12, I22, I23, _, I13, I23, I33, _)


	for(i = 0, j = 0; i < 12; i++)
	{
		if ((i + 1) % 4)
		{
			UArray_at_putDouble_(u, j++, DATA(self)->I[i]);
		}
	}

	return IoSeq_newWithUArray_copy_(IOSTATE, u, 1);
}
Exemplo n.º 7
0
Arquivo: IoDate.c Projeto: bomma/io
IoDate *IoDate_fromSerialization(IoDate *self, IoObject *locals, IoMessage *m)
{
	/*doc Date fromSerialization
	Sets the date based on the serialization sequence.  Return self.
	*/
	
	IoSeq *serializationSeq = IoMessage_locals_seqArgAt_(m, locals, 0);
	UArray *serialization = UArray_clone(IoSeq_rawUArray(serializationSeq));
	
	UArray_setItemType_(serialization, CTYPE_int32_t);
	if(UArray_size(serialization) != 4)
	{
		IoState_error_(IOSTATE, self, "Expected a serialization sequence comprising 4 int32 items.");
	}
	
	Date_fromSerialization(DATA(self), serialization);
	
	UArray_free(serialization);
	
	return self;
}
Exemplo n.º 8
0
IOIMAGE_API IoObject *IoImage_filterUnsharpMask(IoImage *self, IoObject *locals, IoMessage *m)
{
	/*doc Image filterUnsharpMask(a)
	Returns new image as a result of applying filter. Implements unsharp mask filtering. 
	The result is sharpened image.
	The parameter value may by any but it makes sense if it is > 0.
	*/
	int a = IoMessage_locals_intArgAt_(m, locals, 0);
	UArray* filter = UArray_new();
	UArray_setItemType_(filter, CTYPE_int8_t);
	UArray_setEncoding_(filter, CENCODING_NUMBER);
	UArray_setSize_(filter, 9);
	int8_t *filterBytes = UArray_mutableBytes(filter);
	
	filterBytes[0] = -1; filterBytes[1] = -1;    filterBytes[2] = -1;
	filterBytes[3] = -1; filterBytes[4] = a + 8; filterBytes[5] = -1;
	filterBytes[6] = -1; filterBytes[7] = -1;    filterBytes[8] = -1;
	IoImage* toReturn = IoImage_newWithImage_(IOSTATE, Image_applyLinearFilter(DATA(self)->image, 3, 3, filter));
	UArray_free(filter);
	return toReturn;
}
Exemplo n.º 9
0
Arquivo: IoBox.c Projeto: ADTSH/io
UArray *IoBox_rawResizeBy(IoBox *self,
	UArray *d,
	int resizeWidth, int resizeHeight,
	UArray *minSize, UArray *maxSize)
{
	double x, w, y, h;
	UArray *position = IoSeq_rawUArray(IoBox_rawOrigin(self));
	UArray *size     = IoSeq_rawUArray(IoBox_rawSize(self));
	UArray *outd     = UArray_new();

	UArray_setItemType_(outd, CTYPE_float32_t);
	UArray_setSize_(outd, 2);

	x = resizeXFunc(resizeWidth, UArray_x(d), UArray_x(position));
	w = resizeWFunc(resizeWidth, UArray_x(d), UArray_x(size));

	y = resizeXFunc(resizeHeight, UArray_y(d), UArray_y(position));
	h = resizeWFunc(resizeHeight, UArray_y(d), UArray_y(size));

	if (minSize)
	{
		w = max(w, UArray_x(minSize));
		h = max(h, UArray_y(minSize));
	}

	if (maxSize)
	{
		w = min(w, UArray_x(maxSize));
		h = min(h, UArray_y(maxSize));
	}

	UArray_setXY(outd, w - UArray_x(size), h - UArray_y(size));
	UArray_setXY(position, x, y);
	UArray_setXY(size, w, h);

	UArray_round(position);
	UArray_round(size);

	return outd;
}
Exemplo n.º 10
0
Arquivo: UArray.c Projeto: bomma/io
void UArray_convertToEncoding_(UArray *self, CENCODING encoding)
{
	switch(encoding)
	{
		case CENCODING_ASCII:
		case CENCODING_UTF8:
			UArray_convertToUTF8(self);
			break;
		case CENCODING_UCS2:
			UArray_convertToUCS2(self);
			break;
		case CENCODING_UCS4:
			UArray_convertToUCS4(self);
			break;
		case CENCODING_NUMBER:
			UArray_setItemType_(self, CTYPE_uint8_t);
			break;
	}

	self->encoding = encoding;
	UArray_changed(self);
}
Exemplo n.º 11
0
IO_METHOD(IoSeq, setItemType)
{
	/*doc Sequence setItemType(aTypeName)
	Sets the underlying machine type for the elements. 
	Valid names are uint8, uint16, uint32, uint64, int8, int16, int32, 
	int64, float32, and float64. Note that 64 bit types are only available 
	on platforms that support such types. Returns self. 
	*/

	CTYPE itemType;
	IoSeq *typeName;

	IO_ASSERT_NOT_SYMBOL(self);

	typeName = IoMessage_locals_symbolArgAt_(m, locals, 0);
	itemType = CTYPE_forName(CSTRING(typeName));

	IOASSERT(itemType != -1, "invalid item type name");

	UArray_setItemType_(DATA(self), itemType);
	IoObject_isDirty_(self, 1);
	return self;
}
Exemplo n.º 12
0
IOIMAGE_API IoObject *IoImage_filterKirsch(IoImage *self, IoObject *locals, IoMessage *m)
{
	/*doc Image filterKirsch(a)
	Returns new image as a result of applying Kirsch filter.
	The argument denotes direction: 0, 1, 2, ... -> 0, pi / 4, pi / 2, ...
	*/
	int a = IoMessage_locals_intArgAt_(m, locals, 0);
	a = ((a % 8) + 8) % 8;
	static int mapOfPixels[8] = {0, 1, 2, 5, 8, 7, 6, 3};
	static int contentsOfPixels[8] = {3, 3, 3, 3, -5, -5, -5, 3};
	UArray* filter = UArray_new();
	UArray_setItemType_(filter, CTYPE_int8_t);
	UArray_setEncoding_(filter, CENCODING_NUMBER);
	UArray_setSize_(filter, 9);
	int8_t *filterBytes = UArray_mutableBytes(filter);
	int i;
	for(i = 0; i < 8; i++)
	{
		filterBytes[(i + a) % 8] = contentsOfPixels[i];
	}
	IoImage* toReturn = IoImage_newWithImage_(IOSTATE, Image_applyLinearFilter(DATA(self)->image, 3, 3, filter));
	UArray_free(filter);
	return toReturn;
}