Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 3 additions & 0 deletions CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -163,6 +163,7 @@ set(c_util_c_files
./src/memory_data.c
./src/object_lifetime_tracker.c
./src/paged_sparse_array.c
./src/thread_safe_paged_sparse_array.c
./src/rc_ptr.c
./src/rc_string.c
./src/rc_string_array.c
Expand Down Expand Up @@ -227,6 +228,8 @@ set(c_util_h_files
./inc/c_util/sync_wrapper.h
./inc/c_util/paged_sparse_array.h
./inc/c_util/paged_sparse_array_ll.h
./inc/c_util/thread_safe_paged_sparse_array.h
./inc/c_util/thread_safe_paged_sparse_array_ll.h
./inc/c_util/tarray_ll.h
./inc/c_util/tarray.h
./inc/c_util/tcall_dispatcher.h
Expand Down
412 changes: 412 additions & 0 deletions devdoc/thread_safe_paged_sparse_array_requirements.md

Large diffs are not rendered by default.

63 changes: 63 additions & 0 deletions inc/c_util/thread_safe_paged_sparse_array.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,63 @@
// Copyright (c) Microsoft. All rights reserved.
// Licensed under the MIT license. See LICENSE file in the project root for full license information.

#ifndef THREAD_SAFE_PAGED_SPARSE_ARRAY_H
#define THREAD_SAFE_PAGED_SPARSE_ARRAY_H

#include "c_util/thread_safe_paged_sparse_array_ll.h"

/*THREAD_SAFE_PAGED_SPARSE_ARRAY is-a THANDLE.*/
/*given a type "T" THREAD_SAFE_PAGED_SPARSE_ARRAY(T) expands to the name of the type. */
#define THREAD_SAFE_PAGED_SPARSE_ARRAY(T) THREAD_SAFE_PAGED_SPARSE_ARRAY_LL(T)

#define THREAD_SAFE_PAGED_SPARSE_ARRAY_CREATE_DECLARE(T) THREAD_SAFE_PAGED_SPARSE_ARRAY_LL_CREATE_DECLARE(T, T)
#define THREAD_SAFE_PAGED_SPARSE_ARRAY_CREATE_DEFINE(T) THREAD_SAFE_PAGED_SPARSE_ARRAY_LL_CREATE_DEFINE(T, T)

#define THREAD_SAFE_PAGED_SPARSE_ARRAY_DISPOSE_DEFINE(T) THREAD_SAFE_PAGED_SPARSE_ARRAY_LL_DISPOSE_DEFINE(T, T)

#define THREAD_SAFE_PAGED_SPARSE_ARRAY_INTERNAL_DEFINE(T) THREAD_SAFE_PAGED_SPARSE_ARRAY_LL_INTERNAL_DEFINE(T, T)

#define THREAD_SAFE_PAGED_SPARSE_ARRAY_ALLOCATE_DECLARE(T) THREAD_SAFE_PAGED_SPARSE_ARRAY_LL_ALLOCATE_DECLARE(T, T)
#define THREAD_SAFE_PAGED_SPARSE_ARRAY_ALLOCATE_DEFINE(T) THREAD_SAFE_PAGED_SPARSE_ARRAY_LL_ALLOCATE_DEFINE(T, T)

#define THREAD_SAFE_PAGED_SPARSE_ARRAY_RELEASE_DECLARE(T) THREAD_SAFE_PAGED_SPARSE_ARRAY_LL_RELEASE_DECLARE(T, T)
#define THREAD_SAFE_PAGED_SPARSE_ARRAY_RELEASE_DEFINE(T) THREAD_SAFE_PAGED_SPARSE_ARRAY_LL_RELEASE_DEFINE(T, T)

#define THREAD_SAFE_PAGED_SPARSE_ARRAY_GET_DECLARE(T) THREAD_SAFE_PAGED_SPARSE_ARRAY_LL_GET_DECLARE(T, T)
#define THREAD_SAFE_PAGED_SPARSE_ARRAY_GET_DEFINE(T) THREAD_SAFE_PAGED_SPARSE_ARRAY_LL_GET_DEFINE(T, T)

#define THREAD_SAFE_PAGED_SPARSE_ARRAY_FREE_EMPTY_PAGES_DECLARE(T) THREAD_SAFE_PAGED_SPARSE_ARRAY_LL_FREE_EMPTY_PAGES_DECLARE(T, T)
#define THREAD_SAFE_PAGED_SPARSE_ARRAY_FREE_EMPTY_PAGES_DEFINE(T) THREAD_SAFE_PAGED_SPARSE_ARRAY_LL_FREE_EMPTY_PAGES_DEFINE(T, T)

#define THREAD_SAFE_PAGED_SPARSE_ARRAY_CREATE(C) THREAD_SAFE_PAGED_SPARSE_ARRAY_LL_CREATE(C)
#define THREAD_SAFE_PAGED_SPARSE_ARRAY_ALLOCATE(C) THREAD_SAFE_PAGED_SPARSE_ARRAY_LL_ALLOCATE(C)
#define THREAD_SAFE_PAGED_SPARSE_ARRAY_RELEASE(C) THREAD_SAFE_PAGED_SPARSE_ARRAY_LL_RELEASE(C)
#define THREAD_SAFE_PAGED_SPARSE_ARRAY_GET(C) THREAD_SAFE_PAGED_SPARSE_ARRAY_LL_GET(C)
#define THREAD_SAFE_PAGED_SPARSE_ARRAY_FREE_EMPTY_PAGES(C) THREAD_SAFE_PAGED_SPARSE_ARRAY_LL_FREE_EMPTY_PAGES(C)

#define THREAD_SAFE_PAGED_SPARSE_ARRAY_INITIALIZE(T) THREAD_SAFE_PAGED_SPARSE_ARRAY_LL_INITIALIZE(T)
#define THREAD_SAFE_PAGED_SPARSE_ARRAY_ASSIGN(T) THREAD_SAFE_PAGED_SPARSE_ARRAY_LL_ASSIGN(T)
#define THREAD_SAFE_PAGED_SPARSE_ARRAY_MOVE(T) THREAD_SAFE_PAGED_SPARSE_ARRAY_LL_MOVE(T)
#define THREAD_SAFE_PAGED_SPARSE_ARRAY_INITIALIZE_MOVE(T) THREAD_SAFE_PAGED_SPARSE_ARRAY_LL_INITIALIZE_MOVE(T)

/*macro to be used in headers*/
#define THREAD_SAFE_PAGED_SPARSE_ARRAY_TYPE_DECLARE(T) \
/*hint: have THREAD_SAFE_PAGED_SPARSE_ARRAY_DEFINE_STRUCT_TYPE(T) before THREAD_SAFE_PAGED_SPARSE_ARRAY_TYPE_DECLARE*/ \
/*hint: have THANDLE_TYPE_DECLARE(THREAD_SAFE_PAGED_SPARSE_ARRAY_TYPEDEF_NAME(T)) before THREAD_SAFE_PAGED_SPARSE_ARRAY_TYPE_DECLARE*/ \
THREAD_SAFE_PAGED_SPARSE_ARRAY_CREATE_DECLARE(T) \
THREAD_SAFE_PAGED_SPARSE_ARRAY_ALLOCATE_DECLARE(T) \
THREAD_SAFE_PAGED_SPARSE_ARRAY_RELEASE_DECLARE(T) \
THREAD_SAFE_PAGED_SPARSE_ARRAY_GET_DECLARE(T) \
THREAD_SAFE_PAGED_SPARSE_ARRAY_FREE_EMPTY_PAGES_DECLARE(T) \

/*macro to be used in .c files, empty_pages is AUTO_FREE_EMPTY_PAGES or KEEP_EMPTY_PAGES, new_pages is DO_NOT_ZERO_NEW_PAGES or ZERO_NEW_PAGES*/
#define THREAD_SAFE_PAGED_SPARSE_ARRAY_TYPE_DEFINE_WITH_OPTIONS(T, empty_pages, new_pages) \
/*hint: have THANDLE_TYPE_DEFINE(THREAD_SAFE_PAGED_SPARSE_ARRAY_TYPEDEF_NAME(T)) before THREAD_SAFE_PAGED_SPARSE_ARRAY_TYPE_DEFINE_WITH_OPTIONS*/ \
THREAD_SAFE_PAGED_SPARSE_ARRAY_LL_TYPE_DEFINE_WITH_OPTIONS(T, T, empty_pages, new_pages) \

/*macro to be used in .c files, uses AUTO_FREE_EMPTY_PAGES and DO_NOT_ZERO_NEW_PAGES*/
#define THREAD_SAFE_PAGED_SPARSE_ARRAY_TYPE_DEFINE(T) \
/*hint: have THANDLE_TYPE_DEFINE(THREAD_SAFE_PAGED_SPARSE_ARRAY_TYPEDEF_NAME(T)) before THREAD_SAFE_PAGED_SPARSE_ARRAY_TYPE_DEFINE*/ \
THREAD_SAFE_PAGED_SPARSE_ARRAY_TYPE_DEFINE_WITH_OPTIONS(T, AUTO_FREE_EMPTY_PAGES, DO_NOT_ZERO_NEW_PAGES) \

#endif /*THREAD_SAFE_PAGED_SPARSE_ARRAY_H*/
Loading
Loading