/* * Copyright 2014 Google Inc. * * Use of this source code is governed by a BSD-style license that can be * found in the LICENSE file. */ // EXPERIMENTAL EXPERIMENTAL EXPERIMENTAL EXPERIMENTAL // DO NOT USE -- FOR INTERNAL TESTING ONLY #ifndef sk_data_DEFINED #define sk_data_DEFINED #include "include/c/sk_types.h" SK_C_PLUS_PLUS_BEGIN_GUARD /** Returns a new empty sk_data_t. This call must be balanced with a call to sk_data_unref(). */ SK_API sk_data_t* sk_data_new_empty(void); /** Returns a new sk_data_t by copying the specified source data. This call must be balanced with a call to sk_data_unref(). */ SK_API sk_data_t* sk_data_new_with_copy(const void* src, size_t length); /** Pass ownership of the given memory to a new sk_data_t, which will call free() when the refernce count of the data goes to zero. For example: size_t length = 1024; void* buffer = malloc(length); memset(buffer, 'X', length); sk_data_t* data = sk_data_new_from_malloc(buffer, length); This call must be balanced with a call to sk_data_unref(). */ SK_API sk_data_t* sk_data_new_from_malloc(const void* memory, size_t length); /** Returns a new sk_data_t using a subset of the data in the specified source sk_data_t. This call must be balanced with a call to sk_data_unref(). */ SK_API sk_data_t* sk_data_new_subset(const sk_data_t* src, size_t offset, size_t length); /** Increment the reference count on the given sk_data_t. Must be balanced by a call to sk_data_unref(). */ SK_API void sk_data_ref(const sk_data_t*); /** Decrement the reference count. If the reference count is 1 before the decrement, then release both the memory holding the sk_data_t and the memory it is managing. New sk_data_t are created with a reference count of 1. */ SK_API void sk_data_unref(const sk_data_t*); /** Returns the number of bytes stored. */ SK_API size_t sk_data_get_size(const sk_data_t*); /** Returns the pointer to the data. */ SK_API const void* sk_data_get_data(const sk_data_t*); SK_C_PLUS_PLUS_END_GUARD #endif