示例#1
0
cc_int32 ccs_list_add (ccs_list_t   io_list,
                       ccs_object_t in_object)
{
    cc_int32 err = ccNoError;
    cc_uint64 add_index;
    
    if (!io_list  ) { err = cci_check_error (ccErrBadParam); }
    if (!in_object) { err = cci_check_error (ccErrBadParam); }
    
    if (!err) {
        add_index = cci_array_count (io_list->objects);
        
        err = cci_array_insert (io_list->objects, in_object, add_index);
    }
    
    if (!err) {
        /* Fixup iterator indexes */
        cc_uint64 i;
        
        for (i = 0; !err && i < cci_array_count (io_list->iterators); i++) {
            ccs_list_iterator_t iterator = cci_array_object_at_index (io_list->iterators, i);
            
            err = ccs_list_iterator_update (iterator, ccs_list_action_insert, add_index);
        }        
    }    
    
    return cci_check_error (err);    
}
示例#2
0
cc_int32 ccs_list_push_front (ccs_list_t       io_list,
                              cci_identifier_t in_identifier)
{
    cc_int32 err = ccNoError;
    cc_uint64 push_front_index;
    
    if (!io_list      ) { err = cci_check_error (ccErrBadParam); }
    if (!in_identifier) { err = cci_check_error (ccErrBadParam); }
    
    if (!err) {
        err = ccs_list_find_index (io_list, in_identifier, &push_front_index);
    }
    
    if (!err) {
        err = cci_array_push_front (io_list->objects, push_front_index);        
    }
    
    if (!err) {
        /* Fixup iterator indexes */
        cc_uint64 i;
        
        for (i = 0; !err && i < cci_array_count (io_list->iterators); i++) {
            ccs_list_iterator_t iterator = cci_array_object_at_index (io_list->iterators, i);
            
            err = ccs_list_iterator_update (iterator, 
                                            ccs_list_action_push_front, 
                                            push_front_index);
        }        
    }    
    
    return cci_check_error (err);    
}
示例#3
0
static cc_int32 ccs_list_find_iterator_index (ccs_list_t        in_list,
                                              cci_identifier_t  in_identifier,
                                              cc_uint64        *out_object_index)
{
    cc_int32 err = ccNoError;
    cc_int32 found = 0;
    
    if (!in_list         ) { err = cci_check_error (ccErrBadParam); }
    if (!in_identifier   ) { err = cci_check_error (ccErrBadParam); }
    if (!out_object_index) { err = cci_check_error (ccErrBadParam); }
    
    if (!err && !found) {
        cc_uint64 i;
        
        for (i = 0; !err && i < cci_array_count (in_list->iterators); i++) {
            cc_uint32 equal = 0;
            ccs_list_iterator_t iterator = cci_array_object_at_index (in_list->iterators, i);
            
            err = cci_identifier_compare (iterator->identifier, in_identifier, &equal);
            
            if (!err && equal) {
                found = 1;
                *out_object_index = i;
            }
        }        
    }
    
    if (!err && !found) {
        err = cci_check_error (in_list->object_not_found_err); 
    }
    
    return cci_check_error (err);    
}
示例#4
0
cc_int32 ccs_list_iterator_current (ccs_list_iterator_t  io_list_iterator,
                                    ccs_object_t        *out_object)
{
    cc_int32 err = ccNoError;
    
    if (!io_list_iterator) { err = cci_check_error (ccErrBadParam); }
    if (!out_object      ) { err = cci_check_error (ccErrBadParam); }
    
    if (!err) {
        if (io_list_iterator->current < cci_array_count (io_list_iterator->list->objects)) {
            *out_object = cci_array_object_at_index (io_list_iterator->list->objects, 
                                                     io_list_iterator->current);
        } else {
            err = ccIteratorEnd;
        }
    }
    
    return cci_check_error (err);    
}
示例#5
0
cc_int32 ccs_list_release (ccs_list_t io_list)
{
    cc_int32 err = ccNoError;
    
    if (!io_list) { err = ccErrBadParam; }
    
    if (!err) {
        cc_uint64 i;
        
        for (i = 0; i < cci_array_count (io_list->iterators); i++) {
            ccs_list_iterator_release (cci_array_object_at_index (io_list->iterators, i));
        }
        free (io_list->iterators);
        cci_array_release (io_list->objects);
        free (io_list);
    }
    
    return err;        
}
示例#6
0
cc_int32 ccs_list_find_iterator (ccs_list_t           in_list,
                                 cci_identifier_t     in_identifier,
                                 ccs_list_iterator_t *out_list_iterator)
{
    cc_int32 err = ccNoError;
    cc_uint64 i;
    
    if (!in_list          ) { err = cci_check_error (ccErrBadParam); }
    if (!in_identifier    ) { err = cci_check_error (ccErrBadParam); }
    if (!out_list_iterator) { err = cci_check_error (ccErrBadParam); }
    
    if (!err) {
        err = ccs_list_find_iterator_index (in_list, in_identifier, &i);
    }
    
    if (!err) {
        *out_list_iterator = cci_array_object_at_index (in_list->iterators, i);
    }
    
    return cci_check_error (err);    
}
示例#7
0
文件: ccs_array.c 项目: aosm/Kerberos
inline ccs_client_t ccs_client_array_object_at_index (ccs_client_array_t io_array,
                                                      cc_uint64          in_position)
{
    return cci_array_object_at_index (io_array, in_position);
}
示例#8
0
文件: ccs_array.c 项目: Akasurde/krb5
ccs_generic_list_iterator_t ccs_iteratorref_array_object_at_index (ccs_iteratorref_array_t io_array,
                                                                   cc_uint64               in_position)
{
    return (ccs_generic_list_iterator_t) cci_array_object_at_index (io_array,
                                                                    in_position);
}
示例#9
0
文件: ccs_array.c 项目: Akasurde/krb5
ccs_callback_t ccs_callbackref_array_object_at_index (ccs_callbackref_array_t io_array,
						      cc_uint64               in_position)
{
    return (ccs_callback_t) cci_array_object_at_index (io_array, in_position);
}
static ccs_list_iterator_t ccs_list_iterator_at_index (ccs_list_t in_list,
						       cc_uint64  in_index)
{
    return (ccs_list_iterator_t) cci_array_object_at_index (in_list->iterators, in_index);   
}