1 /* 2 * List element functions 3 * 4 * Copyright (C) 2006-2020, Joachim Metz <joachim.metz@gmail.com> 5 * 6 * Refer to AUTHORS for acknowledgements. 7 * 8 * This program is free software: you can redistribute it and/or modify 9 * it under the terms of the GNU Lesser General Public License as published by 10 * the Free Software Foundation, either version 3 of the License, or 11 * (at your option) any later version. 12 * 13 * This program is distributed in the hope that it will be useful, 14 * but WITHOUT ANY WARRANTY; without even the implied warranty of 15 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 16 * GNU General Public License for more details. 17 * 18 * You should have received a copy of the GNU Lesser General Public License 19 * along with this program. If not, see <https://www.gnu.org/licenses/>. 20 */ 21 22 #if !defined( _LIBCDATA_LIST_ELEMENT_H ) 23 #define _LIBCDATA_LIST_ELEMENT_H 24 25 #include <common.h> 26 #include <types.h> 27 28 #include "libcdata_extern.h" 29 #include "libcdata_libcerror.h" 30 #include "libcdata_libcthreads.h" 31 #include "libcdata_types.h" 32 33 #if defined( __cplusplus ) 34 extern "C" { 35 #endif 36 37 typedef struct libcdata_internal_list_element libcdata_internal_list_element_t; 38 39 struct libcdata_internal_list_element 40 { 41 /* The list the element is part of 42 */ 43 intptr_t *parent_list; 44 45 /* The previous list element 46 */ 47 libcdata_list_element_t *previous_element; 48 49 /* The next list element 50 */ 51 libcdata_list_element_t *next_element; 52 53 /* The value 54 */ 55 intptr_t *value; 56 57 #if defined( HAVE_MULTI_THREAD_SUPPORT ) && !defined( HAVE_LOCAL_LIBCDATA ) 58 /* The read/write lock 59 */ 60 libcthreads_read_write_lock_t *read_write_lock; 61 #endif 62 }; 63 64 LIBCDATA_EXTERN \ 65 int libcdata_list_element_initialize( 66 libcdata_list_element_t **element, 67 libcerror_error_t **error ); 68 69 LIBCDATA_EXTERN \ 70 int libcdata_list_element_free( 71 libcdata_list_element_t **element, 72 int (*value_free_function)( 73 intptr_t **value, 74 libcerror_error_t **error ), 75 libcerror_error_t **error ); 76 77 int libcdata_list_element_get_parent_list( 78 libcdata_list_element_t *element, 79 intptr_t **parent_list, 80 libcerror_error_t **error ); 81 82 int libcdata_list_element_set_parent_list( 83 libcdata_list_element_t *element, 84 intptr_t *parent_list, 85 libcerror_error_t **error ); 86 87 LIBCDATA_EXTERN \ 88 int libcdata_list_element_get_previous_element( 89 libcdata_list_element_t *element, 90 libcdata_list_element_t **previous_element, 91 libcerror_error_t **error ); 92 93 LIBCDATA_EXTERN \ 94 int libcdata_list_element_set_previous_element( 95 libcdata_list_element_t *element, 96 libcdata_list_element_t *previous_element, 97 libcerror_error_t **error ); 98 99 LIBCDATA_EXTERN \ 100 int libcdata_list_element_get_next_element( 101 libcdata_list_element_t *element, 102 libcdata_list_element_t **next_element, 103 libcerror_error_t **error ); 104 105 LIBCDATA_EXTERN \ 106 int libcdata_list_element_set_next_element( 107 libcdata_list_element_t *element, 108 libcdata_list_element_t *next_element, 109 libcerror_error_t **error ); 110 111 LIBCDATA_EXTERN \ 112 int libcdata_list_element_get_elements( 113 libcdata_list_element_t *element, 114 libcdata_list_element_t **previous_element, 115 libcdata_list_element_t **next_element, 116 libcerror_error_t **error ); 117 118 LIBCDATA_EXTERN \ 119 int libcdata_list_element_set_elements( 120 libcdata_list_element_t *element, 121 libcdata_list_element_t *previous_element, 122 libcdata_list_element_t *next_element, 123 libcerror_error_t **error ); 124 125 LIBCDATA_EXTERN \ 126 int libcdata_list_element_get_value( 127 libcdata_list_element_t *element, 128 intptr_t **value, 129 libcerror_error_t **error ); 130 131 LIBCDATA_EXTERN \ 132 int libcdata_list_element_set_value( 133 libcdata_list_element_t *element, 134 intptr_t *value, 135 libcerror_error_t **error ); 136 137 #if defined( __cplusplus ) 138 } 139 #endif 140 141 #endif /* !defined( _LIBCDATA_LIST_ELEMENT_H ) */ 142 143