⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 fincarray.c

📁 c++写的一个脚本解释器
💻 C
字号:
#include <finc/finapi/fincarray.h>#ifdef USING_STRING_APIvoid finc_array_init(FinC* finc){	finc_insert_sys_api(finc, "array_insert", (ADT)finc_array_insert, "void");	finc_insert_sys_api(finc, "array_remove", (ADT)finc_array_remove, "void");	finc_insert_sys_api(finc, "array_append", (ADT)finc_array_append, "void");	finc_insert_sys_api(finc, "array_prepend", (ADT)finc_array_prepend, "void");	finc_insert_sys_api(finc, "array_size", (ADT)finc_array_size, "int");	finc_insert_sys_api(finc, "array_find", (ADT)finc_array_find, "void");	finc_insert_sys_api(finc, "array_first", (ADT)finc_array_first, "pointer");	finc_insert_sys_api(finc, "array_next", (ADT)finc_array_next, "pointer");	finc_insert_sys_api(finc, "array_prev", (ADT)finc_array_prev, "pointer");	finc_insert_sys_api(finc, "array_last", (ADT)finc_array_last, "pointer");	finc_insert_sys_api(finc, "array_current", (ADT)finc_array_current, "pointer");	finc_insert_sys_api(finc, "array_pos", (ADT)finc_array_pos, "int");}/*void array_insert(array a, ADT item, int index)*/FinCData* finc_array_insert(Vector* v){	FinCData* array;	FinCData* item;	FinCData* data_index;	int index;	array = vector_at(v, 0);	item = vector_at(v, 1);	data_index = vector_at(v, 2);	if (!array || !item || !data_index)	{		unref(array);		unref(item);		unref(data_index);		return NULL;	}	index = finc_access(data_index->raw, 0, int);	return NULL;}/*void array_remove(array a, int index)*/FinCData* finc_array_remove(Vector* v){	FinCData* array = NULL;	FinCData* index = NULL;	array = (FinCData*)vector_at(v, 0);	index = (FinCData*)vector_at(v, 1);	if ( (!array) || (array->type->array_type != FinCArrayType_Dynamic) || (!index))	{		unref(array);		unref(index);		return NULL;	}	return NULL;}/*void array_append(array a, ADT item)*/FinCData* finc_array_append(Vector* v){	FinCData* array = NULL;	FinCData* item = NULL;	array = (FinCData*)vector_at(v, 0);	item  = (FinCData*)vector_at(v, 1);	if ( (!array) || (array->type->array_type != FinCArrayType_Dynamic) || (!item))	{		unref(array);		unref(item);		return NULL;	}	return NULL;}/*void array_prepend(array a, ADT item)*/FinCData* finc_array_prepend(Vector* v){	FinCData* array = NULL;	FinCData* item = NULL;	array = (FinCData*)vector_at(v, 0);	item = (FinCData*)vector_at(v, 1);	if ( (!array) || (array->type->array_type != FinCArrayType_Dynamic) || (!item))	{		unref(array);		unref(item);		return NULL;	}	return NULL;}/*int array_size(array a)*/FinCData* finc_array_size(Vector* v){	FinCData* array;	FinCData* result;	FinCType* type;	array = (FinCData*)vector_at(v, 0);	if(!array) return NULL;	type = finc_type_new(FinCType_Int, FinCArrayType_None, 0);	result = finc_data_new(type, NULL);	unref(type);	finc_access(result->raw, 0, unsigned int) = array->type->array_size;	unref(array);	return result;}/*ADT array_find(array a, function func, ADT item)*/FinCData* finc_array_find(Vector* v){	return NULL;}/*ADT array_first(array a)*/FinCData* finc_array_first(Vector* v){	FinCData* array;	FinCData* first;	FinCData* result = NULL;	array = (FinCData*)vector_at(v, 0);	if (!array) return NULL;	first = finc_data_get_index ( array, 0 );	if(first)result = finc_data_new_copy(first);	unref(first);	unref(array);	return result;}/*ADT array_next(array a)*/FinCData* finc_array_next(Vector* v){	FinCData* array;	FinCData* next;	FinCData* result = NULL;	array = (FinCData*)vector_at(v, 0);	if (!array) return NULL;	array->array_stand = array->array_stand == array->type->array_size - 1 ?		array->type->array_size-1 : array->array_stand+1;	next = finc_data_get_index ( array, array->array_stand );	if(next)result = finc_data_new_copy(next);	unref(next);	unref(array);	return result;}/*ADT array_prev(array a)*/FinCData* finc_array_prev(Vector* v){	FinCData* array;	FinCData* prev;	FinCData* result = NULL;	array = (FinCData*)vector_at(v, 0);	if (!array) return NULL;	array->array_stand = array->array_stand == 0? 0 : array->array_stand-1;	prev = finc_data_get_index ( array, array->array_stand );	if(prev)result = finc_data_new_copy(prev);	unref(prev);	unref(array);	return result;}/*ADT array_last(array a)*/FinCData* finc_array_last(Vector* v){	FinCData* array;	FinCData* last;	FinCData* result = NULL;	array = (FinCData*)vector_at(v, 0);	if (!array) return NULL;	last = finc_data_get_index ( array, array->type->array_size );	if(last)result = finc_data_new_copy(last);	unref(last);	unref(array);	return result;}/*ADT array_current(array a)*/FinCData* finc_array_current(Vector* v){	FinCData* array;	FinCData* current;	FinCData* result = NULL;	array = (FinCData*)vector_at(v, 0);	if (!array) return NULL;	current = finc_data_get_index ( array, array->array_stand );	if(current)result = finc_data_new_copy(current);	unref(current);	unref(array);	return result;}/*int array_pos(array a)*/FinCData* finc_array_pos(Vector* v){	FinCData* array;	FinCData* result;	FinCType* type;	array = (FinCData*)vector_at(v, 0);	if (!array) return NULL;	type = finc_type_new(FinCType_Int, FinCArrayType_None, 0);	result = finc_data_new(type, NULL);	finc_access(result->raw, 0, int) = array->array_stand;	unref(type);	unref(array);	return result;}#endif

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -