mirror of
https://github.com/IllusionMan1212/ndk-odin.git
synced 2026-10-24 10:12:30 +00:00
WIP
This commit is contained in:
@@ -0,0 +1,185 @@
|
||||
//+build android
|
||||
package android
|
||||
|
||||
import "core:c"
|
||||
|
||||
foreign import android "system:android"
|
||||
|
||||
/** Available access modes for opening assets with {@link AAssetManager_open} */
|
||||
AssetOpenMode :: enum c.int {
|
||||
/** No specific information about how data will be accessed. **/
|
||||
UNKNOWN = 0,
|
||||
/** Read chunks, and seek forward and backward. */
|
||||
RANDOM = 1,
|
||||
/** Read sequentially, with an occasional forward seek. */
|
||||
STREAMING = 2,
|
||||
/** Caller plans to ask for a read-only buffer with all data. */
|
||||
BUFFER = 3
|
||||
}
|
||||
|
||||
// Same as sys/linux but this is i32 instead of i16
|
||||
Seek_Whence :: enum i32 {
|
||||
SET = 0,
|
||||
CUR = 1,
|
||||
END = 2,
|
||||
DATA = 3,
|
||||
HOLE = 4,
|
||||
}
|
||||
|
||||
/**
|
||||
* {@link AAssetManager} provides access to an application's raw assets by
|
||||
* creating {@link AAsset} objects.
|
||||
*
|
||||
* AAssetManager is a wrapper to the low-level native implementation
|
||||
* of the java {@link AAssetManager}, a pointer can be obtained using
|
||||
* AAssetManager_fromJava().
|
||||
*
|
||||
* The asset hierarchy may be examined like a filesystem, using
|
||||
* {@link AAssetDir} objects to peruse a single directory.
|
||||
*
|
||||
* A native {@link AAssetManager} pointer may be shared across multiple threads.
|
||||
*/
|
||||
AAssetManager :: struct{}
|
||||
|
||||
/**
|
||||
* {@link AAssetDir} provides access to a chunk of the asset hierarchy as if
|
||||
* it were a single directory. The contents are populated by the
|
||||
* {@link AAssetManager}.
|
||||
*
|
||||
* The list of files will be sorted in ascending order by ASCII value.
|
||||
*/
|
||||
AAssetDir :: struct{}
|
||||
|
||||
/**
|
||||
* {@link AAsset} provides access to a read-only asset.
|
||||
*
|
||||
* {@link AAsset} objects are NOT thread-safe, and should not be shared across
|
||||
* threads.
|
||||
*/
|
||||
AAsset :: struct{}
|
||||
|
||||
foreign android {
|
||||
/**
|
||||
* Open an asset.
|
||||
*
|
||||
* The object returned here should be freed by calling AAsset_close().
|
||||
*/
|
||||
AAssetManager_open :: proc(mgr: ^AAssetManager, filename: cstring, mode: AssetOpenMode) -> ^AAsset ---
|
||||
|
||||
/**
|
||||
* Iterate over the files in an asset directory. A NULL string is returned
|
||||
* when all the file names have been returned.
|
||||
*
|
||||
* The returned file name is suitable for passing to AAssetManager_open().
|
||||
*
|
||||
* The string returned here is owned by the AssetDir implementation and is not
|
||||
* guaranteed to remain valid if any other calls are made on this AAssetDir
|
||||
* instance.
|
||||
*/
|
||||
AAssetDir_getNextFileName :: proc(assetDir: ^AAssetDir) -> cstring ---
|
||||
|
||||
/**
|
||||
* Reset the iteration state of AAssetDir_getNextFileName() to the beginning.
|
||||
*/
|
||||
AAssetDir_rewind :: proc(assetDir: ^AAssetDir) ---
|
||||
|
||||
/**
|
||||
* Close an opened AAssetDir, freeing any related resources.
|
||||
*/
|
||||
AAssetDir_close :: proc(assetDir: ^AAssetDir) ---
|
||||
|
||||
/**
|
||||
* Attempt to read 'count' bytes of data from the current offset.
|
||||
*
|
||||
* Returns the number of bytes read, zero on EOF, or < 0 on error.
|
||||
*/
|
||||
AAsset_read :: proc(asset: ^AAsset, buf: rawptr, count: uint) -> i32 ---
|
||||
|
||||
/**
|
||||
* Seek to the specified offset within the asset data. 'whence' uses the
|
||||
* same constants as lseek()/fseek().
|
||||
*
|
||||
* Returns the new position on success, or (off_t) -1 on error.
|
||||
*/
|
||||
// TODO: should we just not bind these functions since their 64-bit counterparts are available?
|
||||
// Because according to https://android.googlesource.com/platform/bionic/+/main/docs/32-bit-abi.md
|
||||
// and the __RENAME_IF_FILE_OFFSET64() macro these functions are replaced with the 64-bit versions at
|
||||
// runtime anyway (at least for 32-bit Android).
|
||||
// off_t is replaced with off64_t too.
|
||||
// I think all Android API version <21 should explicitly be unsupported both by Odin and the bindings here since
|
||||
// this opens a can of worms that I do not like.
|
||||
AAsset_seek :: proc(asset: ^AAsset, offset: off_t, whence: Seek_Whence) -> off_t ---
|
||||
|
||||
/**
|
||||
* Seek to the specified offset within the asset data. 'whence' uses the
|
||||
* same constants as lseek()/fseek().
|
||||
*
|
||||
* Uses 64-bit data type for large files as opposed to the 32-bit type used
|
||||
* by AAsset_seek.
|
||||
*
|
||||
* Returns the new position on success, or (off64_t) -1 on error.
|
||||
*/
|
||||
AAsset_seek64 :: proc(asset: ^AAsset, offset: off64_t, whence: Seek_Whence) -> off64_t ---
|
||||
|
||||
/**
|
||||
* Close the asset, freeing all associated resources.
|
||||
*/
|
||||
AAsset_close :: proc(asset: ^AAsset) ---
|
||||
|
||||
/**
|
||||
* Get a pointer to a buffer holding the entire contents of the assset.
|
||||
*
|
||||
* Returns NULL on failure.
|
||||
*/
|
||||
AAsset_getBuffer :: proc(asset: ^AAsset) -> rawptr ---
|
||||
|
||||
/**
|
||||
* Report the total size of the asset data.
|
||||
*/
|
||||
AAsset_getLength :: proc(asset: ^AAsset) -> off_t ---
|
||||
|
||||
/**
|
||||
* Report the total size of the asset data. Reports the size using a 64-bit
|
||||
* number insted of 32-bit as AAsset_getLength.
|
||||
*/
|
||||
AAsset_getLength64 :: proc(asset: ^AAsset) -> off64_t ---
|
||||
|
||||
/**
|
||||
* Report the total amount of asset data that can be read from the current position.
|
||||
*/
|
||||
AAsset_getRemainingLength :: proc(asset: ^AAsset) -> off_t ---
|
||||
|
||||
/**
|
||||
* Report the total amount of asset data that can be read from the current position.
|
||||
*
|
||||
* Uses a 64-bit number instead of a 32-bit number as AAsset_getRemainingLength does.
|
||||
*/
|
||||
AAsset_getRemainingLength64 :: proc(asset: ^AAsset) -> off64_t ---
|
||||
|
||||
/**
|
||||
* Open a new file descriptor that can be used to read the asset data. If the
|
||||
* start or length cannot be represented by a 32-bit number, it will be
|
||||
* truncated. If the file is large, use AAsset_openFileDescriptor64 instead.
|
||||
*
|
||||
* Returns < 0 if direct fd access is not possible (for example, if the asset is
|
||||
* compressed).
|
||||
*/
|
||||
AAsset_openFileDescriptor :: proc(asset: ^AAsset, outStart: ^off_t, outLength: ^off_t) -> i32 ---
|
||||
|
||||
/**
|
||||
* Open a new file descriptor that can be used to read the asset data.
|
||||
*
|
||||
* Uses a 64-bit number for the offset and length instead of 32-bit instead of
|
||||
* as AAsset_openFileDescriptor does.
|
||||
*
|
||||
* Returns < 0 if direct fd access is not possible (for example, if the asset is
|
||||
* compressed).
|
||||
*/
|
||||
AAsset_openFileDescriptor64 :: proc(asset: ^AAsset, outStart: ^off64_t, outLength: ^off64_t) -> i32 ---
|
||||
|
||||
/**
|
||||
* Returns whether this asset's internal buffer is allocated in ordinary RAM (i.e. not
|
||||
* mmapped).
|
||||
*/
|
||||
AAsset_isAllocated :: proc(asset: ^AAsset) -> i32 ---
|
||||
}
|
||||
Reference in New Issue
Block a user