1cd89a9be3397dfc6416835b3f1cbe37b3e5b605bAndrew Hsieh/*
2cd89a9be3397dfc6416835b3f1cbe37b3e5b605bAndrew Hsieh * Copyright (C) 2010 The Android Open Source Project
3cd89a9be3397dfc6416835b3f1cbe37b3e5b605bAndrew Hsieh *
4cd89a9be3397dfc6416835b3f1cbe37b3e5b605bAndrew Hsieh * Licensed under the Apache License, Version 2.0 (the "License");
5cd89a9be3397dfc6416835b3f1cbe37b3e5b605bAndrew Hsieh * you may not use this file except in compliance with the License.
6cd89a9be3397dfc6416835b3f1cbe37b3e5b605bAndrew Hsieh * You may obtain a copy of the License at
7cd89a9be3397dfc6416835b3f1cbe37b3e5b605bAndrew Hsieh *
8cd89a9be3397dfc6416835b3f1cbe37b3e5b605bAndrew Hsieh *      http://www.apache.org/licenses/LICENSE-2.0
9cd89a9be3397dfc6416835b3f1cbe37b3e5b605bAndrew Hsieh *
10cd89a9be3397dfc6416835b3f1cbe37b3e5b605bAndrew Hsieh * Unless required by applicable law or agreed to in writing, software
11cd89a9be3397dfc6416835b3f1cbe37b3e5b605bAndrew Hsieh * distributed under the License is distributed on an "AS IS" BASIS,
12cd89a9be3397dfc6416835b3f1cbe37b3e5b605bAndrew Hsieh * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13cd89a9be3397dfc6416835b3f1cbe37b3e5b605bAndrew Hsieh * See the License for the specific language governing permissions and
14cd89a9be3397dfc6416835b3f1cbe37b3e5b605bAndrew Hsieh * limitations under the License.
15cd89a9be3397dfc6416835b3f1cbe37b3e5b605bAndrew Hsieh */
16cd89a9be3397dfc6416835b3f1cbe37b3e5b605bAndrew Hsieh
17cd89a9be3397dfc6416835b3f1cbe37b3e5b605bAndrew Hsieh
18cd89a9be3397dfc6416835b3f1cbe37b3e5b605bAndrew Hsieh#ifndef ANDROID_ASSET_MANAGER_H
19cd89a9be3397dfc6416835b3f1cbe37b3e5b605bAndrew Hsieh#define ANDROID_ASSET_MANAGER_H
20cd89a9be3397dfc6416835b3f1cbe37b3e5b605bAndrew Hsieh
21cd89a9be3397dfc6416835b3f1cbe37b3e5b605bAndrew Hsieh#include <sys/types.h>
22cd89a9be3397dfc6416835b3f1cbe37b3e5b605bAndrew Hsieh
23cd89a9be3397dfc6416835b3f1cbe37b3e5b605bAndrew Hsieh#ifdef __cplusplus
24cd89a9be3397dfc6416835b3f1cbe37b3e5b605bAndrew Hsiehextern "C" {
25cd89a9be3397dfc6416835b3f1cbe37b3e5b605bAndrew Hsieh#endif
26cd89a9be3397dfc6416835b3f1cbe37b3e5b605bAndrew Hsieh
27cd89a9be3397dfc6416835b3f1cbe37b3e5b605bAndrew Hsiehstruct AAssetManager;
28cd89a9be3397dfc6416835b3f1cbe37b3e5b605bAndrew Hsiehtypedef struct AAssetManager AAssetManager;
29cd89a9be3397dfc6416835b3f1cbe37b3e5b605bAndrew Hsieh
30cd89a9be3397dfc6416835b3f1cbe37b3e5b605bAndrew Hsiehstruct AAssetDir;
31cd89a9be3397dfc6416835b3f1cbe37b3e5b605bAndrew Hsiehtypedef struct AAssetDir AAssetDir;
32cd89a9be3397dfc6416835b3f1cbe37b3e5b605bAndrew Hsieh
33cd89a9be3397dfc6416835b3f1cbe37b3e5b605bAndrew Hsiehstruct AAsset;
34cd89a9be3397dfc6416835b3f1cbe37b3e5b605bAndrew Hsiehtypedef struct AAsset AAsset;
35cd89a9be3397dfc6416835b3f1cbe37b3e5b605bAndrew Hsieh
36cd89a9be3397dfc6416835b3f1cbe37b3e5b605bAndrew Hsieh/* Available modes for opening assets */
37cd89a9be3397dfc6416835b3f1cbe37b3e5b605bAndrew Hsiehenum {
38cd89a9be3397dfc6416835b3f1cbe37b3e5b605bAndrew Hsieh    AASSET_MODE_UNKNOWN      = 0,
39cd89a9be3397dfc6416835b3f1cbe37b3e5b605bAndrew Hsieh    AASSET_MODE_RANDOM       = 1,
40cd89a9be3397dfc6416835b3f1cbe37b3e5b605bAndrew Hsieh    AASSET_MODE_STREAMING    = 2,
41cd89a9be3397dfc6416835b3f1cbe37b3e5b605bAndrew Hsieh    AASSET_MODE_BUFFER       = 3
42cd89a9be3397dfc6416835b3f1cbe37b3e5b605bAndrew Hsieh};
43cd89a9be3397dfc6416835b3f1cbe37b3e5b605bAndrew Hsieh
44cd89a9be3397dfc6416835b3f1cbe37b3e5b605bAndrew Hsieh
45cd89a9be3397dfc6416835b3f1cbe37b3e5b605bAndrew Hsieh/**
46cd89a9be3397dfc6416835b3f1cbe37b3e5b605bAndrew Hsieh * Open the named directory within the asset hierarchy.  The directory can then
47cd89a9be3397dfc6416835b3f1cbe37b3e5b605bAndrew Hsieh * be inspected with the AAssetDir functions.  To open the top-level directory,
48cd89a9be3397dfc6416835b3f1cbe37b3e5b605bAndrew Hsieh * pass in "" as the dirName.
49cd89a9be3397dfc6416835b3f1cbe37b3e5b605bAndrew Hsieh *
50cd89a9be3397dfc6416835b3f1cbe37b3e5b605bAndrew Hsieh * The object returned here should be freed by calling AAssetDir_close().
51cd89a9be3397dfc6416835b3f1cbe37b3e5b605bAndrew Hsieh */
52cd89a9be3397dfc6416835b3f1cbe37b3e5b605bAndrew HsiehAAssetDir* AAssetManager_openDir(AAssetManager* mgr, const char* dirName);
53cd89a9be3397dfc6416835b3f1cbe37b3e5b605bAndrew Hsieh
54cd89a9be3397dfc6416835b3f1cbe37b3e5b605bAndrew Hsieh/**
55cd89a9be3397dfc6416835b3f1cbe37b3e5b605bAndrew Hsieh * Open an asset.
56cd89a9be3397dfc6416835b3f1cbe37b3e5b605bAndrew Hsieh *
57cd89a9be3397dfc6416835b3f1cbe37b3e5b605bAndrew Hsieh * The object returned here should be freed by calling AAsset_close().
58cd89a9be3397dfc6416835b3f1cbe37b3e5b605bAndrew Hsieh */
59cd89a9be3397dfc6416835b3f1cbe37b3e5b605bAndrew HsiehAAsset* AAssetManager_open(AAssetManager* mgr, const char* filename, int mode);
60cd89a9be3397dfc6416835b3f1cbe37b3e5b605bAndrew Hsieh
61cd89a9be3397dfc6416835b3f1cbe37b3e5b605bAndrew Hsieh/**
62cd89a9be3397dfc6416835b3f1cbe37b3e5b605bAndrew Hsieh * Iterate over the files in an asset directory.  A NULL string is returned
63cd89a9be3397dfc6416835b3f1cbe37b3e5b605bAndrew Hsieh * when all the file names have been returned.
64cd89a9be3397dfc6416835b3f1cbe37b3e5b605bAndrew Hsieh *
65cd89a9be3397dfc6416835b3f1cbe37b3e5b605bAndrew Hsieh * The returned file name is suitable for passing to AAssetManager_open().
66cd89a9be3397dfc6416835b3f1cbe37b3e5b605bAndrew Hsieh *
67cd89a9be3397dfc6416835b3f1cbe37b3e5b605bAndrew Hsieh * The string returned here is owned by the AssetDir implementation and is not
68cd89a9be3397dfc6416835b3f1cbe37b3e5b605bAndrew Hsieh * guaranteed to remain valid if any other calls are made on this AAssetDir
69cd89a9be3397dfc6416835b3f1cbe37b3e5b605bAndrew Hsieh * instance.
70cd89a9be3397dfc6416835b3f1cbe37b3e5b605bAndrew Hsieh */
71cd89a9be3397dfc6416835b3f1cbe37b3e5b605bAndrew Hsiehconst char* AAssetDir_getNextFileName(AAssetDir* assetDir);
72cd89a9be3397dfc6416835b3f1cbe37b3e5b605bAndrew Hsieh
73cd89a9be3397dfc6416835b3f1cbe37b3e5b605bAndrew Hsieh/**
74cd89a9be3397dfc6416835b3f1cbe37b3e5b605bAndrew Hsieh * Reset the iteration state of AAssetDir_getNextFileName() to the beginning.
75cd89a9be3397dfc6416835b3f1cbe37b3e5b605bAndrew Hsieh */
76cd89a9be3397dfc6416835b3f1cbe37b3e5b605bAndrew Hsiehvoid AAssetDir_rewind(AAssetDir* assetDir);
77cd89a9be3397dfc6416835b3f1cbe37b3e5b605bAndrew Hsieh
78cd89a9be3397dfc6416835b3f1cbe37b3e5b605bAndrew Hsieh/**
79cd89a9be3397dfc6416835b3f1cbe37b3e5b605bAndrew Hsieh * Close an opened AAssetDir, freeing any related resources.
80cd89a9be3397dfc6416835b3f1cbe37b3e5b605bAndrew Hsieh */
81cd89a9be3397dfc6416835b3f1cbe37b3e5b605bAndrew Hsiehvoid AAssetDir_close(AAssetDir* assetDir);
82cd89a9be3397dfc6416835b3f1cbe37b3e5b605bAndrew Hsieh
83cd89a9be3397dfc6416835b3f1cbe37b3e5b605bAndrew Hsieh/**
84cd89a9be3397dfc6416835b3f1cbe37b3e5b605bAndrew Hsieh * Attempt to read 'count' bytes of data from the current offset.
85cd89a9be3397dfc6416835b3f1cbe37b3e5b605bAndrew Hsieh *
86cd89a9be3397dfc6416835b3f1cbe37b3e5b605bAndrew Hsieh * Returns the number of bytes read, zero on EOF, or < 0 on error.
87cd89a9be3397dfc6416835b3f1cbe37b3e5b605bAndrew Hsieh */
88cd89a9be3397dfc6416835b3f1cbe37b3e5b605bAndrew Hsiehint AAsset_read(AAsset* asset, void* buf, size_t count);
89cd89a9be3397dfc6416835b3f1cbe37b3e5b605bAndrew Hsieh
90cd89a9be3397dfc6416835b3f1cbe37b3e5b605bAndrew Hsieh/**
91cd89a9be3397dfc6416835b3f1cbe37b3e5b605bAndrew Hsieh * Seek to the specified offset within the asset data.  'whence' uses the
92cd89a9be3397dfc6416835b3f1cbe37b3e5b605bAndrew Hsieh * same constants as lseek()/fseek().
93cd89a9be3397dfc6416835b3f1cbe37b3e5b605bAndrew Hsieh *
94cd89a9be3397dfc6416835b3f1cbe37b3e5b605bAndrew Hsieh * Returns the new position on success, or (off_t) -1 on error.
95cd89a9be3397dfc6416835b3f1cbe37b3e5b605bAndrew Hsieh */
96cd89a9be3397dfc6416835b3f1cbe37b3e5b605bAndrew Hsiehoff_t AAsset_seek(AAsset* asset, off_t offset, int whence);
97cd89a9be3397dfc6416835b3f1cbe37b3e5b605bAndrew Hsieh
98cd89a9be3397dfc6416835b3f1cbe37b3e5b605bAndrew Hsieh/**
99cd89a9be3397dfc6416835b3f1cbe37b3e5b605bAndrew Hsieh * Close the asset, freeing all associated resources.
100cd89a9be3397dfc6416835b3f1cbe37b3e5b605bAndrew Hsieh */
101cd89a9be3397dfc6416835b3f1cbe37b3e5b605bAndrew Hsiehvoid AAsset_close(AAsset* asset);
102cd89a9be3397dfc6416835b3f1cbe37b3e5b605bAndrew Hsieh
103cd89a9be3397dfc6416835b3f1cbe37b3e5b605bAndrew Hsieh/**
104cd89a9be3397dfc6416835b3f1cbe37b3e5b605bAndrew Hsieh * Get a pointer to a buffer holding the entire contents of the assset.
105cd89a9be3397dfc6416835b3f1cbe37b3e5b605bAndrew Hsieh *
106cd89a9be3397dfc6416835b3f1cbe37b3e5b605bAndrew Hsieh * Returns NULL on failure.
107cd89a9be3397dfc6416835b3f1cbe37b3e5b605bAndrew Hsieh */
108cd89a9be3397dfc6416835b3f1cbe37b3e5b605bAndrew Hsiehconst void* AAsset_getBuffer(AAsset* asset);
109cd89a9be3397dfc6416835b3f1cbe37b3e5b605bAndrew Hsieh
110cd89a9be3397dfc6416835b3f1cbe37b3e5b605bAndrew Hsieh/**
111cd89a9be3397dfc6416835b3f1cbe37b3e5b605bAndrew Hsieh * Report the total size of the asset data.
112cd89a9be3397dfc6416835b3f1cbe37b3e5b605bAndrew Hsieh */
113cd89a9be3397dfc6416835b3f1cbe37b3e5b605bAndrew Hsiehoff_t AAsset_getLength(AAsset* asset);
114cd89a9be3397dfc6416835b3f1cbe37b3e5b605bAndrew Hsieh
115cd89a9be3397dfc6416835b3f1cbe37b3e5b605bAndrew Hsieh/**
116cd89a9be3397dfc6416835b3f1cbe37b3e5b605bAndrew Hsieh * Report the total amount of asset data that can be read from the current position.
117cd89a9be3397dfc6416835b3f1cbe37b3e5b605bAndrew Hsieh */
118cd89a9be3397dfc6416835b3f1cbe37b3e5b605bAndrew Hsiehoff_t AAsset_getRemainingLength(AAsset* asset);
119cd89a9be3397dfc6416835b3f1cbe37b3e5b605bAndrew Hsieh
120cd89a9be3397dfc6416835b3f1cbe37b3e5b605bAndrew Hsieh/**
121cd89a9be3397dfc6416835b3f1cbe37b3e5b605bAndrew Hsieh * Open a new file descriptor that can be used to read the asset data.
122cd89a9be3397dfc6416835b3f1cbe37b3e5b605bAndrew Hsieh *
123cd89a9be3397dfc6416835b3f1cbe37b3e5b605bAndrew Hsieh * Returns < 0 if direct fd access is not possible (for example, if the asset is
124cd89a9be3397dfc6416835b3f1cbe37b3e5b605bAndrew Hsieh * compressed).
125cd89a9be3397dfc6416835b3f1cbe37b3e5b605bAndrew Hsieh */
126cd89a9be3397dfc6416835b3f1cbe37b3e5b605bAndrew Hsiehint AAsset_openFileDescriptor(AAsset* asset, off_t* outStart, off_t* outLength);
127cd89a9be3397dfc6416835b3f1cbe37b3e5b605bAndrew Hsieh
128cd89a9be3397dfc6416835b3f1cbe37b3e5b605bAndrew Hsieh/**
129cd89a9be3397dfc6416835b3f1cbe37b3e5b605bAndrew Hsieh * Returns whether this asset's internal buffer is allocated in ordinary RAM (i.e. not
130cd89a9be3397dfc6416835b3f1cbe37b3e5b605bAndrew Hsieh * mmapped).
131cd89a9be3397dfc6416835b3f1cbe37b3e5b605bAndrew Hsieh */
132cd89a9be3397dfc6416835b3f1cbe37b3e5b605bAndrew Hsiehint AAsset_isAllocated(AAsset* asset);
133cd89a9be3397dfc6416835b3f1cbe37b3e5b605bAndrew Hsieh
134cd89a9be3397dfc6416835b3f1cbe37b3e5b605bAndrew Hsieh
135cd89a9be3397dfc6416835b3f1cbe37b3e5b605bAndrew Hsieh
136cd89a9be3397dfc6416835b3f1cbe37b3e5b605bAndrew Hsieh#ifdef __cplusplus
137cd89a9be3397dfc6416835b3f1cbe37b3e5b605bAndrew Hsieh};
138cd89a9be3397dfc6416835b3f1cbe37b3e5b605bAndrew Hsieh#endif
139cd89a9be3397dfc6416835b3f1cbe37b3e5b605bAndrew Hsieh
140cd89a9be3397dfc6416835b3f1cbe37b3e5b605bAndrew Hsieh#endif      // ANDROID_ASSET_MANAGER_H
141