예제 #1
0
void      component_ref___swap(component_ref a, component_ref b) {
    const component_idx a_idx = RTI(a);
    const component_idx b_idx = RTI(b);
    RTI(a) = b_idx;
    ITR(b_idx) = a;
    RTI(b) = a_idx;
    ITR(a_idx) = b;
}
예제 #2
0
void      component_ref__dealloc_v(component_ref *refs, size_t count) {
    size_t i;
    for(i=0 ; i<count ; ++i) {
        component_idx srcidx = component_idx___prev(ASA.last_idx, count-i);
        component_idx dstidx = RTI(refs[i]);
        component_idx___copy(dstidx, srcidx);
        component_ref srcref = ITR(srcidx);
        RTI(srcref) = dstidx;
        ITR(dstidx) = srcref;
    }
    sl_fsb_give_indices16(&ASA.ref_to_idx_fsb, refs, count);
    ASA.last_idx = component_idx___prev(ASA.last_idx, count);
}
예제 #3
0
/* Функция, перемещающая итератор на заданное смещение со знаком */
void LSQ_ShiftPosition(LSQ_IteratorT iterator, LSQ_IntegerIndexT shift){
	if(iterator == NULL)
		return;

	if(shift > 0)
		while(shift > 0 && !LSQ_IsIteratorPastRear(iterator)){
			shift--;
			ITR(iterator)->node = ITR(iterator)->node->next;
		}
	else
		while(shift < 0 && !LSQ_IsIteratorBeforeFirst(iterator)){
			ITR(iterator)->node = ITR(iterator)->node->prev;
			shift++;
		}
}
예제 #4
0
/* Функция, удаляющая первый элемент контейнера */
void LSQ_DeleteFrontElement(LSQ_HandleT handle){
	TypeIterator *iterator = ITR(LSQ_GetFrontElement(handle));
	if(iterator != LSQ_HandleInvalid){
		LSQ_DeleteGivenElement(iterator);
		LSQ_DestroyIterator(iterator);
	}
}
예제 #5
0
void      component_ref___alloc_v(component_ref *refs, size_t count) {
    size_t left_to_allocate = count, tmp_l0 = LAST_IDX_L0(), tmp_l1 = LAST_IDX_L1();
    while(left_to_allocate > ASA.soas[tmp_l0].col_count - tmp_l1) {
        size_t new_chunk = component___chunkfunc(ASA.soa_count);
        assert(new_chunk && "The chunk function returned 0 !");
        ASA.ref_to_idx_lut = REALLOC(ASA.ref_to_idx_lut, (ASA.elem_count+new_chunk)*sizeof(ASA.ref_to_idx_lut[0]));
        ASA.idx_to_ref_lut = REALLOC(ASA.idx_to_ref_lut, (ASA.soa_count+1)*sizeof(ASA.idx_to_ref_lut[0]));
        ASA.idx_to_ref_lut[ASA.soa_count] = MALLOC(new_chunk*sizeof(ASA.idx_to_ref_lut[0][0]));
        ASA.soas = REALLOC(ASA.soas, (ASA.soa_count+1)*sizeof(ASA.soas[0]));
        ASA.soas[ASA.soa_count].row0 = MALLOC(new_chunk*sizeof(ASA.soas[0].row0[0]));
        ASA.soas[ASA.soa_count].row1 = MALLOC(new_chunk*sizeof(ASA.soas[0].row1[0]));
        ASA.soas[ASA.soa_count].col_count = new_chunk;
        ++(ASA.soa_count);
        ASA.elem_count += new_chunk;
        ++tmp_l0;
        tmp_l1 = 0;
        left_to_allocate = new_chunk<left_to_allocate ? left_to_allocate-new_chunk : 0;
    }
    sl_fsb_take_indices16(&ASA.ref_to_idx_fsb, refs, count);
    size_t i;
    for(i=0 ; i<count ; ++i) {
        RTI(refs[i]) = ASA.last_idx;
        ITR(ASA.last_idx) = refs[i];
        ASA.last_idx = component_idx___next(ASA.last_idx, 1);
    }
}
예제 #6
0
/* Функция, удаляющая последний элемент контейнера */
void LSQ_DeleteRearElement(LSQ_HandleT handle){
	TypeIterator *iterator = ITR(LSQ_GetPastRearElement(handle));
	if(iterator != LSQ_HandleInvalid){
		iterator->node = iterator->node->prev;
		LSQ_DeleteGivenElement(iterator);
		LSQ_DestroyIterator(iterator);
	}
}
예제 #7
0
/* Функция, добавляющая элемент в конец контейнера */
void LSQ_InsertRearElement(LSQ_HandleT handle, LSQ_BaseTypeT element){
	TypeIterator *iterator = ITR(LSQ_GetPastRearElement(handle));

	if(iterator != LSQ_HandleInvalid){
		LSQ_InsertElementBeforeGiven( iterator, element);
		LSQ_DestroyIterator(iterator);
	}
}
예제 #8
0
/* Функция, удаляющая элемент контейнера, указываемый заданным итератором. Все последующие элементы смещаются на     *
 * одну позицию в сторону начала.                                                                                    */
void LSQ_DeleteGivenElement(LSQ_IteratorT iterator){
	TypeListNode *node = NULL;
	if(iterator == NULL || !LSQ_IsIteratorDereferencable(iterator))
		return;
	ITR(iterator)->list->size--;
   ITR(iterator)->node->prev->next = ITR(iterator)->node->next;
   ITR(iterator)->node->next->prev = ITR(iterator)->node->prev;
	node = ITR(iterator)->node;
	ITR(iterator)->node = ITR(iterator)->node->next;
	free(node);
}
예제 #9
0
/* Функция, устанавливающая итератор на элемент с указанным номером */
void LSQ_SetPosition(LSQ_IteratorT iterator, LSQ_IntegerIndexT pos){
	if(iterator == NULL || ITR(iterator)->list == NULL)
		return;
	if(pos <= (ITR(iterator)->list->size / 2)){
		ITR(iterator)->node = ITR(iterator)->list->BeforFirst;
		LSQ_ShiftPosition(iterator, pos + 1);
	}else{
		ITR(iterator)->node = ITR(iterator)->list->PastRear;
		LSQ_ShiftPosition(iterator, pos - ITR(iterator)->list->size);

	}
}
예제 #10
0
/* Функция, добавляющая элемент в контейнер на позицию, указываемую в данный момент итератором. Элемент, на который  *
 * указывает итератор, а также все последующие, сдвигается на одну позицию в конец.                                  */
void LSQ_InsertElementBeforeGiven(LSQ_IteratorT iterator, LSQ_BaseTypeT newElement){
	TypeListNode *node = NULL;

	if(iterator == NULL)
		return;

	node = (TypeListNode*)malloc(sizeof(TypeListNode));
	if(node == NULL){
		free(node);
		return;
	}
	node->data = newElement;
	node->prev = ITR(iterator)->node->prev;
	node->next = ITR(iterator)->node;
	ITR(iterator)->node->prev->next = node;
	ITR(iterator)->node->prev = node;
	ITR(iterator)->node = ITR(iterator)->node->prev;
	ITR(iterator)->list->size++;
}
예제 #11
0
/* Функция разыменовывающая итератор. Возвращает указатель на элемент, на который ссылается данный итератор */
LSQ_BaseTypeT* LSQ_DereferenceIterator(LSQ_IteratorT iterator){
	return(!LSQ_IsIteratorDereferencable(iterator))? NULL: (&(ITR(iterator)->node->data));
}
예제 #12
0
/* Функция, определяющая, указывает ли данный итератор на элемент, предшествующий первому в контейнере */
int LSQ_IsIteratorBeforeFirst(LSQ_IteratorT iterator){
	return(iterator == NULL || ITR(iterator)->list == NULL)? 0:(ITR(iterator)->node == ITR(iterator)->list->BeforFirst);
//проверка на нуллл контейнера
}
예제 #13
0
/* Функция, определяющая, указывает ли данный итератор на элемент, следующий за последним в контейнере */
int LSQ_IsIteratorPastRear(LSQ_IteratorT iterator){
	return(iterator == NULL || ITR(iterator)->list == NULL)? 0:(ITR(iterator)->node == ITR(iterator)->list->PastRear);
//проверка на нуллл контейнера
}
예제 #14
0
/* Функция, определяющая, может ли данный итератор быть разыменован */
int LSQ_IsIteratorDereferencable(LSQ_IteratorT iterator){
	return(iterator == NULL || ITR(iterator)->list == NULL)? 0: (ITR(iterator)->node != ITR(iterator)->list->BeforFirst && ITR(iterator)->node != ITR(iterator)->list->PastRear);
//проверка на нуллл контейнера
}
예제 #15
0
};


/* SVR4 (aka the full official iBCS) is the base mapping - no exceptions,
 * other than the RESTART* values.
 */
struct map_segment svr4_err_map[] = {
        { 0,    0+sizeof(SVR4_err_table)-1,     SVR4_err_table },
        { 512,  512+sizeof(LNX_err_table)-1,    LNX_err_table },
        { -1 }
};

EXPORT_SYMBOL(svr4_err_map);

ABI_func svr4_generic_funcs[] = {
   { abi_syscall,	Fast	ITR(0, "syscall",	"")	}, /*    0 */
   { SC(exit),		-1	ITR(0, "exit",		"d")	}, /*    1 */
   { abi_fork,		Spl	ITR(0, "fork",		"")	}, /*    2 */
   { abi_read,		3	ITR(0, "read",		"dpd")	}, /*    3 */
   { SC(write),		-3	ITR(0, "write",		"dpd")	}, /*    4 */
   { svr4_open,		3	ITR(0, "open",		"soo")	}, /*    5 */
   { SC(close),		-1	ITR(0, "close",		"d")	}, /*    6 */
   { abi_wait,		Spl	ITR(0, "wait",		"xxx")	}, /*    7 */
   { SC(creat),		-2	ITR(0, "creat",		"so")	}, /*    8 */
   { SC(link),		-2	ITR(0, "link",		"ss")	}, /*    9 */
   { SC(unlink),	-1	ITR(0, "unlink",	"s")	}, /*   10 */
   { abi_exec,		Spl	ITR(0, "exec",		"sxx")	}, /*   11 */
   { SC(chdir),		-1	ITR(0, "chdir",		"s")	}, /*   12 */
   { abi_time,		0	ITR(0, "time",		"")	}, /*   13 */
   { abi_mknod,	3	ITR(0, "mknod",		"soo")	}, /*   14 */
   { SC(chmod),		-2	ITR(0, "chmod",		"so")	}, /*   15 */
예제 #16
0
파일: funcs.c 프로젝트: cpc26/abi_linux
/*
 *    abi/uw7/funcs.c - UnixWare 7.x system call dispatch table.
 *
 *  This software is under GPL
 */

#include <abi/abi.h>
#include <abi/abi4.h>
#include <abi/svr4.h>
#include <abi/uw7.h>
#include <abi/uw7_context.h>

extern void iBCS_class_XNX(struct pt_regs *regs);

ABI_func uw7_funcs[] = {
   { abi_syscall,	Fast	ITR(0, "syscall",	"")	}, /*    0 */
   { SC(exit),		-1	ITR(0, "exit",		"d")	}, /*    1 */
   { abi_fork,		Spl	ITR(0, "fork",		"")	}, /*    2 */
   { abi_read,		3	ITR(0, "read",		"dpd")	}, /*    3 */
   { SC(write),		-3	ITR(0, "write",		"dpd")	}, /*    4 */
   { svr4_open,		3	ITR(0, "open",		"soo")	}, /*    5 */
   { SC(close),		-1	ITR(0, "close",		"d")	}, /*    6 */
   { abi_wait,		Spl	ITR(0, "wait",		"xxx")	}, /*    7 */
   { SC(creat),		-2	ITR(0, "creat",		"so")	}, /*    8 */
   { SC(link),		-2	ITR(0, "link",		"ss")	}, /*    9 */
   { SC(unlink),	-1	ITR(0, "unlink",	"s")	}, /*   10 */
   { abi_exec,		Spl	ITR(0, "exec",		"sxx")	}, /*   11 */
   { SC(chdir),		-1	ITR(0, "chdir",		"s")	}, /*   12 */
   { abi_time,		0	ITR(0, "time",		"")	}, /*   13 */
   { abi_mknod,		3	ITR(0, "mknod",		"soo")	}, /*   14 */
   { SC(chmod),		-2	ITR(0, "chmod",		"so")	}, /*   15 */