1 /* 2 * Copyright 2014 Google Inc. 3 * 4 * Use of this source code is governed by a BSD-style license that can be 5 * found in the LICENSE file. 6 */ 7 8 // EXPERIMENTAL EXPERIMENTAL EXPERIMENTAL EXPERIMENTAL 9 // DO NOT USE -- FOR INTERNAL TESTING ONLY 10 11 #ifndef sk_data_DEFINED 12 #define sk_data_DEFINED 13 14 #include "sk_types.h" 15 16 SK_C_PLUS_PLUS_BEGIN_GUARD 17 18 /** 19 Returns a new empty sk_data_t. This call must be balanced with a call to 20 sk_data_unref(). 21 */ 22 SK_API sk_data_t* sk_data_new_empty(void); 23 /** 24 Returns a new sk_data_t by copying the specified source data. 25 This call must be balanced with a call to sk_data_unref(). 26 */ 27 SK_API sk_data_t* sk_data_new_with_copy(const void* src, size_t length); 28 /** 29 Pass ownership of the given memory to a new sk_data_t, which will 30 call free() when the refernce count of the data goes to zero. For 31 example: 32 size_t length = 1024; 33 void* buffer = malloc(length); 34 memset(buffer, 'X', length); 35 sk_data_t* data = sk_data_new_from_malloc(buffer, length); 36 This call must be balanced with a call to sk_data_unref(). 37 */ 38 SK_API sk_data_t* sk_data_new_from_malloc(const void* memory, size_t length); 39 /** 40 Returns a new sk_data_t using a subset of the data in the 41 specified source sk_data_t. This call must be balanced with a 42 call to sk_data_unref(). 43 */ 44 SK_API sk_data_t* sk_data_new_subset(const sk_data_t* src, size_t offset, size_t length); 45 46 /** 47 Increment the reference count on the given sk_data_t. Must be 48 balanced by a call to sk_data_unref(). 49 */ 50 SK_API void sk_data_ref(const sk_data_t*); 51 /** 52 Decrement the reference count. If the reference count is 1 before 53 the decrement, then release both the memory holding the sk_data_t 54 and the memory it is managing. New sk_data_t are created with a 55 reference count of 1. 56 */ 57 SK_API void sk_data_unref(const sk_data_t*); 58 59 /** 60 Returns the number of bytes stored. 61 */ 62 SK_API size_t sk_data_get_size(const sk_data_t*); 63 /** 64 Returns the pointer to the data. 65 */ 66 SK_API const void* sk_data_get_data(const sk_data_t*); 67 68 SK_C_PLUS_PLUS_END_GUARD 69 70 #endif 71