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