111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert/*
211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert * Copyright (C) 2010 The Android Open Source Project
311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert *
411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert * Licensed under the Apache License, Version 2.0 (the "License");
511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert * you may not use this file except in compliance with the License.
611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert * You may obtain a copy of the License at
711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert *
811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert *      http://www.apache.org/licenses/LICENSE-2.0
911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert *
1011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert * Unless required by applicable law or agreed to in writing, software
1111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert * distributed under the License is distributed on an "AS IS" BASIS,
1211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
1311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert * See the License for the specific language governing permissions and
1411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert * limitations under the License.
1511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert */
1611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert
1711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert
1811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#ifndef ANDROID_ASSET_MANAGER_H
1911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#define ANDROID_ASSET_MANAGER_H
2011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert
2111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#include <sys/types.h>
2211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert
2311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#ifdef __cplusplus
2411cd02dfb91661c65134cac258cf5924270e9d2Dan Albertextern "C" {
2511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#endif
2611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert
2711cd02dfb91661c65134cac258cf5924270e9d2Dan Albertstruct AAssetManager;
2811cd02dfb91661c65134cac258cf5924270e9d2Dan Alberttypedef struct AAssetManager AAssetManager;
2911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert
3011cd02dfb91661c65134cac258cf5924270e9d2Dan Albertstruct AAssetDir;
3111cd02dfb91661c65134cac258cf5924270e9d2Dan Alberttypedef struct AAssetDir AAssetDir;
3211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert
3311cd02dfb91661c65134cac258cf5924270e9d2Dan Albertstruct AAsset;
3411cd02dfb91661c65134cac258cf5924270e9d2Dan Alberttypedef struct AAsset AAsset;
3511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert
3611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert/* Available modes for opening assets */
3711cd02dfb91661c65134cac258cf5924270e9d2Dan Albertenum {
3811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert    AASSET_MODE_UNKNOWN      = 0,
3911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert    AASSET_MODE_RANDOM       = 1,
4011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert    AASSET_MODE_STREAMING    = 2,
4111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert    AASSET_MODE_BUFFER       = 3
4211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert};
4311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert
4411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert
4511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert/**
4611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert * Open the named directory within the asset hierarchy.  The directory can then
4711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert * be inspected with the AAssetDir functions.  To open the top-level directory,
4811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert * pass in "" as the dirName.
4911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert *
5011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert * The object returned here should be freed by calling AAssetDir_close().
5111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert */
5211cd02dfb91661c65134cac258cf5924270e9d2Dan AlbertAAssetDir* AAssetManager_openDir(AAssetManager* mgr, const char* dirName);
5311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert
5411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert/**
5511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert * Open an asset.
5611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert *
5711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert * The object returned here should be freed by calling AAsset_close().
5811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert */
5911cd02dfb91661c65134cac258cf5924270e9d2Dan AlbertAAsset* AAssetManager_open(AAssetManager* mgr, const char* filename, int mode);
6011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert
6111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert/**
6211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert * Iterate over the files in an asset directory.  A NULL string is returned
6311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert * when all the file names have been returned.
6411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert *
6511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert * The returned file name is suitable for passing to AAssetManager_open().
6611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert *
6711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert * The string returned here is owned by the AssetDir implementation and is not
6811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert * guaranteed to remain valid if any other calls are made on this AAssetDir
6911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert * instance.
7011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert */
7111cd02dfb91661c65134cac258cf5924270e9d2Dan Albertconst char* AAssetDir_getNextFileName(AAssetDir* assetDir);
7211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert
7311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert/**
7411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert * Reset the iteration state of AAssetDir_getNextFileName() to the beginning.
7511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert */
7611cd02dfb91661c65134cac258cf5924270e9d2Dan Albertvoid AAssetDir_rewind(AAssetDir* assetDir);
7711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert
7811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert/**
7911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert * Close an opened AAssetDir, freeing any related resources.
8011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert */
8111cd02dfb91661c65134cac258cf5924270e9d2Dan Albertvoid AAssetDir_close(AAssetDir* assetDir);
8211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert
8311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert/**
8411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert * Attempt to read 'count' bytes of data from the current offset.
8511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert *
8611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert * Returns the number of bytes read, zero on EOF, or < 0 on error.
8711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert */
8811cd02dfb91661c65134cac258cf5924270e9d2Dan Albertint AAsset_read(AAsset* asset, void* buf, size_t count);
8911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert
9011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert/**
9111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert * Seek to the specified offset within the asset data.  'whence' uses the
9211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert * same constants as lseek()/fseek().
9311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert *
9411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert * Returns the new position on success, or (off_t) -1 on error.
9511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert */
9611cd02dfb91661c65134cac258cf5924270e9d2Dan Albertoff_t AAsset_seek(AAsset* asset, off_t offset, int whence);
9711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert
9811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert/**
9911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert * Close the asset, freeing all associated resources.
10011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert */
10111cd02dfb91661c65134cac258cf5924270e9d2Dan Albertvoid AAsset_close(AAsset* asset);
10211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert
10311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert/**
10411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert * Get a pointer to a buffer holding the entire contents of the assset.
10511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert *
10611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert * Returns NULL on failure.
10711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert */
10811cd02dfb91661c65134cac258cf5924270e9d2Dan Albertconst void* AAsset_getBuffer(AAsset* asset);
10911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert
11011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert/**
11111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert * Report the total size of the asset data.
11211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert */
11311cd02dfb91661c65134cac258cf5924270e9d2Dan Albertoff_t AAsset_getLength(AAsset* asset);
11411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert
11511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert/**
11611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert * Report the total amount of asset data that can be read from the current position.
11711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert */
11811cd02dfb91661c65134cac258cf5924270e9d2Dan Albertoff_t AAsset_getRemainingLength(AAsset* asset);
11911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert
12011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert/**
12111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert * Open a new file descriptor that can be used to read the asset data.
12211cd02dfb91661c65134cac258cf5924270e9d2Dan Albert *
12311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert * Returns < 0 if direct fd access is not possible (for example, if the asset is
12411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert * compressed).
12511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert */
12611cd02dfb91661c65134cac258cf5924270e9d2Dan Albertint AAsset_openFileDescriptor(AAsset* asset, off_t* outStart, off_t* outLength);
12711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert
12811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert/**
12911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert * Returns whether this asset's internal buffer is allocated in ordinary RAM (i.e. not
13011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert * mmapped).
13111cd02dfb91661c65134cac258cf5924270e9d2Dan Albert */
13211cd02dfb91661c65134cac258cf5924270e9d2Dan Albertint AAsset_isAllocated(AAsset* asset);
13311cd02dfb91661c65134cac258cf5924270e9d2Dan Albert
13411cd02dfb91661c65134cac258cf5924270e9d2Dan Albert
13511cd02dfb91661c65134cac258cf5924270e9d2Dan Albert
13611cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#ifdef __cplusplus
13711cd02dfb91661c65134cac258cf5924270e9d2Dan Albert};
13811cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#endif
13911cd02dfb91661c65134cac258cf5924270e9d2Dan Albert
14011cd02dfb91661c65134cac258cf5924270e9d2Dan Albert#endif      // ANDROID_ASSET_MANAGER_H
141