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; }
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); }
/* Функция, перемещающая итератор на заданное смещение со знаком */ 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++; } }
/* Функция, удаляющая первый элемент контейнера */ void LSQ_DeleteFrontElement(LSQ_HandleT handle){ TypeIterator *iterator = ITR(LSQ_GetFrontElement(handle)); if(iterator != LSQ_HandleInvalid){ LSQ_DeleteGivenElement(iterator); LSQ_DestroyIterator(iterator); } }
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); } }
/* Функция, удаляющая последний элемент контейнера */ 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); } }
/* Функция, добавляющая элемент в конец контейнера */ 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); } }
/* Функция, удаляющая элемент контейнера, указываемый заданным итератором. Все последующие элементы смещаются на * * одну позицию в сторону начала. */ 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); }
/* Функция, устанавливающая итератор на элемент с указанным номером */ 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); } }
/* Функция, добавляющая элемент в контейнер на позицию, указываемую в данный момент итератором. Элемент, на который * * указывает итератор, а также все последующие, сдвигается на одну позицию в конец. */ 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++; }
/* Функция разыменовывающая итератор. Возвращает указатель на элемент, на который ссылается данный итератор */ LSQ_BaseTypeT* LSQ_DereferenceIterator(LSQ_IteratorT iterator){ return(!LSQ_IsIteratorDereferencable(iterator))? NULL: (&(ITR(iterator)->node->data)); }
/* Функция, определяющая, указывает ли данный итератор на элемент, предшествующий первому в контейнере */ int LSQ_IsIteratorBeforeFirst(LSQ_IteratorT iterator){ return(iterator == NULL || ITR(iterator)->list == NULL)? 0:(ITR(iterator)->node == ITR(iterator)->list->BeforFirst); //проверка на нуллл контейнера }
/* Функция, определяющая, указывает ли данный итератор на элемент, следующий за последним в контейнере */ int LSQ_IsIteratorPastRear(LSQ_IteratorT iterator){ return(iterator == NULL || ITR(iterator)->list == NULL)? 0:(ITR(iterator)->node == ITR(iterator)->list->PastRear); //проверка на нуллл контейнера }
/* Функция, определяющая, может ли данный итератор быть разыменован */ 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); //проверка на нуллл контейнера }
}; /* 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 */
/* * 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 */