]> git.lizzy.rs Git - irrlicht.git/blob - source/Irrlicht/Android/CAndroidAssetReader.cpp
ef1529beb97e6310a61f4d069ca85be2004f702d
[irrlicht.git] / source / Irrlicht / Android / CAndroidAssetReader.cpp
1 // Copyright (C) 2002-2011 Nikolaus Gebhardt\r
2 // This file is part of the "Irrlicht Engine".\r
3 // For conditions of distribution and use, see copyright notice in irrlicht.h\r
4 \r
5 #include "IrrCompileConfig.h"\r
6 \r
7 #ifdef   _IRR_COMPILE_ANDROID_ASSET_READER_\r
8 \r
9 #include "CAndroidAssetReader.h"\r
10 \r
11 #include "CReadFile.h"\r
12 #include "coreutil.h"\r
13 #include "CAndroidAssetReader.h"\r
14 #include "CIrrDeviceAndroid.h"\r
15 \r
16 #include <android_native_app_glue.h>\r
17 #include <android/native_activity.h>\r
18 \r
19 namespace irr\r
20 {\r
21 namespace io\r
22 {\r
23 \r
24 CAndroidAssetReader::CAndroidAssetReader(AAssetManager *assetManager, const io::path &filename)\r
25         : AssetManager(assetManager), Filename(filename)\r
26 {\r
27         Asset = AAssetManager_open(AssetManager, \r
28                                         core::stringc(filename).c_str(),\r
29                                     AASSET_MODE_RANDOM);\r
30 \r
31 }\r
32 \r
33 CAndroidAssetReader::~CAndroidAssetReader()\r
34 {\r
35         if(Asset)\r
36                 AAsset_close(Asset);\r
37 }\r
38 \r
39 size_t CAndroidAssetReader::read(void* buffer, size_t sizeToRead)\r
40 {\r
41         int readBytes = AAsset_read(Asset, buffer, sizeToRead);\r
42         if ( readBytes >= 0 )\r
43                 return size_t(readBytes);\r
44         return 0;       // direct fd access is not possible (for example, if the asset is compressed). \r
45 }\r
46       \r
47 bool CAndroidAssetReader::seek(long finalPos, bool relativeMovement)\r
48 {\r
49         off_t status =  AAsset_seek(Asset, finalPos, relativeMovement ? SEEK_CUR : SEEK_SET);\r
50 \r
51         return status+1;\r
52 }\r
53 \r
54 long CAndroidAssetReader::getSize() const\r
55 {\r
56         return AAsset_getLength(Asset);\r
57 }\r
58       \r
59 long CAndroidAssetReader::getPos() const\r
60 {\r
61         return AAsset_getLength(Asset) - AAsset_getRemainingLength(Asset);\r
62 }\r
63       \r
64 const io::path& CAndroidAssetReader::getFileName() const\r
65 {\r
66         return Filename;\r
67 }\r
68 \r
69 \r
70 } // end namespace io\r
71 } // end namespace irr\r
72 \r
73 #endif //  _IRR_COMPILE_ANDROID_ASSET_READER_\r