1e5c31af7Sopenharmony_ci/*-------------------------------------------------------------------------
2e5c31af7Sopenharmony_ci * drawElements Quality Program Tester Core
3e5c31af7Sopenharmony_ci * ----------------------------------------
4e5c31af7Sopenharmony_ci *
5e5c31af7Sopenharmony_ci * Copyright 2014 The Android Open Source Project
6e5c31af7Sopenharmony_ci *
7e5c31af7Sopenharmony_ci * Licensed under the Apache License, Version 2.0 (the "License");
8e5c31af7Sopenharmony_ci * you may not use this file except in compliance with the License.
9e5c31af7Sopenharmony_ci * You may obtain a copy of the License at
10e5c31af7Sopenharmony_ci *
11e5c31af7Sopenharmony_ci *      http://www.apache.org/licenses/LICENSE-2.0
12e5c31af7Sopenharmony_ci *
13e5c31af7Sopenharmony_ci * Unless required by applicable law or agreed to in writing, software
14e5c31af7Sopenharmony_ci * distributed under the License is distributed on an "AS IS" BASIS,
15e5c31af7Sopenharmony_ci * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
16e5c31af7Sopenharmony_ci * See the License for the specific language governing permissions and
17e5c31af7Sopenharmony_ci * limitations under the License.
18e5c31af7Sopenharmony_ci *
19e5c31af7Sopenharmony_ci *//*!
20e5c31af7Sopenharmony_ci * \file
21e5c31af7Sopenharmony_ci * \brief Resource wrapper for AAssetManager.
22e5c31af7Sopenharmony_ci *//*--------------------------------------------------------------------*/
23e5c31af7Sopenharmony_ci
24e5c31af7Sopenharmony_ci#include "tcuAndroidAssets.hpp"
25e5c31af7Sopenharmony_ci
26e5c31af7Sopenharmony_cinamespace tcu
27e5c31af7Sopenharmony_ci{
28e5c31af7Sopenharmony_cinamespace Android
29e5c31af7Sopenharmony_ci{
30e5c31af7Sopenharmony_ci
31e5c31af7Sopenharmony_ciAssetArchive::AssetArchive (AAssetManager* assetMgr)
32e5c31af7Sopenharmony_ci	: m_assetMgr(assetMgr)
33e5c31af7Sopenharmony_ci{
34e5c31af7Sopenharmony_ci}
35e5c31af7Sopenharmony_ci
36e5c31af7Sopenharmony_ciAssetArchive::~AssetArchive (void)
37e5c31af7Sopenharmony_ci{
38e5c31af7Sopenharmony_ci}
39e5c31af7Sopenharmony_ci
40e5c31af7Sopenharmony_ciResource* AssetArchive::getResource (const char* name) const
41e5c31af7Sopenharmony_ci{
42e5c31af7Sopenharmony_ci	return new AssetResource(m_assetMgr, name);
43e5c31af7Sopenharmony_ci}
44e5c31af7Sopenharmony_ci
45e5c31af7Sopenharmony_ciAssetResource::AssetResource (AAssetManager* assetMgr, const char* name)
46e5c31af7Sopenharmony_ci	: Resource	(name)
47e5c31af7Sopenharmony_ci	, m_asset	(DE_NULL)
48e5c31af7Sopenharmony_ci{
49e5c31af7Sopenharmony_ci	m_asset = AAssetManager_open(assetMgr, name, AASSET_MODE_RANDOM);
50e5c31af7Sopenharmony_ci
51e5c31af7Sopenharmony_ci	if (!m_asset)
52e5c31af7Sopenharmony_ci		throw ResourceError("Failed to open asset resource", name, __FILE__, __LINE__);
53e5c31af7Sopenharmony_ci}
54e5c31af7Sopenharmony_ci
55e5c31af7Sopenharmony_ciAssetResource::~AssetResource (void)
56e5c31af7Sopenharmony_ci{
57e5c31af7Sopenharmony_ci	AAsset_close(m_asset);
58e5c31af7Sopenharmony_ci}
59e5c31af7Sopenharmony_ci
60e5c31af7Sopenharmony_civoid AssetResource::read (deUint8* dst, int numBytes)
61e5c31af7Sopenharmony_ci{
62e5c31af7Sopenharmony_ci	TCU_CHECK(AAsset_read(m_asset, dst, numBytes) == numBytes);
63e5c31af7Sopenharmony_ci}
64e5c31af7Sopenharmony_ci
65e5c31af7Sopenharmony_ciint AssetResource::getPosition (void) const
66e5c31af7Sopenharmony_ci{
67e5c31af7Sopenharmony_ci	return (int)AAsset_getLength(m_asset) - (int)AAsset_getRemainingLength(m_asset);
68e5c31af7Sopenharmony_ci}
69e5c31af7Sopenharmony_ci
70e5c31af7Sopenharmony_civoid AssetResource::setPosition (int position)
71e5c31af7Sopenharmony_ci{
72e5c31af7Sopenharmony_ci	TCU_CHECK(AAsset_seek(m_asset, position, SEEK_SET) == position);
73e5c31af7Sopenharmony_ci}
74e5c31af7Sopenharmony_ci
75e5c31af7Sopenharmony_cibool AssetResource::isFinished (void) const
76e5c31af7Sopenharmony_ci{
77e5c31af7Sopenharmony_ci	return AAsset_getRemainingLength(m_asset) <= 0;
78e5c31af7Sopenharmony_ci}
79e5c31af7Sopenharmony_ci
80e5c31af7Sopenharmony_ciint AssetResource::getSize (void) const
81e5c31af7Sopenharmony_ci{
82e5c31af7Sopenharmony_ci	return (int)AAsset_getLength(m_asset);
83e5c31af7Sopenharmony_ci}
84e5c31af7Sopenharmony_ci
85e5c31af7Sopenharmony_ci} // Android
86e5c31af7Sopenharmony_ci} // tcu
87