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 "include/c/sk_types.h"
15
16SK_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*/
22SK_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*/
27SK_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*/
38SK_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*/
44SK_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*/
50SK_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*/
57SK_API void sk_data_unref(const sk_data_t*);
58
59/**
60 Returns the number of bytes stored.
61*/
62SK_API size_t sk_data_get_size(const sk_data_t*);
63/**
64 Returns the pointer to the data.
65 */
66SK_API const void* sk_data_get_data(const sk_data_t*);
67
68SK_C_PLUS_PLUS_END_GUARD
69
70#endif
71