xref: /aosp_15_r20/external/deqp/framework/common/tcuResource.cpp (revision 35238bce31c2a825756842865a792f8cf7f89930)
1*35238bceSAndroid Build Coastguard Worker /*-------------------------------------------------------------------------
2*35238bceSAndroid Build Coastguard Worker  * drawElements Quality Program Tester Core
3*35238bceSAndroid Build Coastguard Worker  * ----------------------------------------
4*35238bceSAndroid Build Coastguard Worker  *
5*35238bceSAndroid Build Coastguard Worker  * Copyright 2014 The Android Open Source Project
6*35238bceSAndroid Build Coastguard Worker  *
7*35238bceSAndroid Build Coastguard Worker  * Licensed under the Apache License, Version 2.0 (the "License");
8*35238bceSAndroid Build Coastguard Worker  * you may not use this file except in compliance with the License.
9*35238bceSAndroid Build Coastguard Worker  * You may obtain a copy of the License at
10*35238bceSAndroid Build Coastguard Worker  *
11*35238bceSAndroid Build Coastguard Worker  *      http://www.apache.org/licenses/LICENSE-2.0
12*35238bceSAndroid Build Coastguard Worker  *
13*35238bceSAndroid Build Coastguard Worker  * Unless required by applicable law or agreed to in writing, software
14*35238bceSAndroid Build Coastguard Worker  * distributed under the License is distributed on an "AS IS" BASIS,
15*35238bceSAndroid Build Coastguard Worker  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
16*35238bceSAndroid Build Coastguard Worker  * See the License for the specific language governing permissions and
17*35238bceSAndroid Build Coastguard Worker  * limitations under the License.
18*35238bceSAndroid Build Coastguard Worker  *
19*35238bceSAndroid Build Coastguard Worker  *//*!
20*35238bceSAndroid Build Coastguard Worker  * \file
21*35238bceSAndroid Build Coastguard Worker  * \brief Resource system.
22*35238bceSAndroid Build Coastguard Worker  *//*--------------------------------------------------------------------*/
23*35238bceSAndroid Build Coastguard Worker 
24*35238bceSAndroid Build Coastguard Worker #include "tcuResource.hpp"
25*35238bceSAndroid Build Coastguard Worker 
26*35238bceSAndroid Build Coastguard Worker #include <stdio.h>
27*35238bceSAndroid Build Coastguard Worker 
28*35238bceSAndroid Build Coastguard Worker namespace tcu
29*35238bceSAndroid Build Coastguard Worker {
30*35238bceSAndroid Build Coastguard Worker 
DirArchive(const char * path)31*35238bceSAndroid Build Coastguard Worker DirArchive::DirArchive(const char *path) : m_path(path)
32*35238bceSAndroid Build Coastguard Worker {
33*35238bceSAndroid Build Coastguard Worker     // Append leading / if necessary
34*35238bceSAndroid Build Coastguard Worker     if (m_path.length() > 0 && m_path[m_path.length() - 1] != '/')
35*35238bceSAndroid Build Coastguard Worker         m_path += "/";
36*35238bceSAndroid Build Coastguard Worker }
37*35238bceSAndroid Build Coastguard Worker 
~DirArchive()38*35238bceSAndroid Build Coastguard Worker DirArchive::~DirArchive()
39*35238bceSAndroid Build Coastguard Worker {
40*35238bceSAndroid Build Coastguard Worker }
41*35238bceSAndroid Build Coastguard Worker 
getResource(const char * name) const42*35238bceSAndroid Build Coastguard Worker Resource *DirArchive::getResource(const char *name) const
43*35238bceSAndroid Build Coastguard Worker {
44*35238bceSAndroid Build Coastguard Worker     return static_cast<Resource *>(new FileResource((m_path + name).c_str()));
45*35238bceSAndroid Build Coastguard Worker }
46*35238bceSAndroid Build Coastguard Worker 
FileResource(const char * filename)47*35238bceSAndroid Build Coastguard Worker FileResource::FileResource(const char *filename) : Resource(std::string(filename))
48*35238bceSAndroid Build Coastguard Worker {
49*35238bceSAndroid Build Coastguard Worker     m_file = fopen(filename, "rb");
50*35238bceSAndroid Build Coastguard Worker     if (!m_file)
51*35238bceSAndroid Build Coastguard Worker         throw ResourceError("Failed to open file", filename, __FILE__, __LINE__);
52*35238bceSAndroid Build Coastguard Worker }
53*35238bceSAndroid Build Coastguard Worker 
~FileResource()54*35238bceSAndroid Build Coastguard Worker FileResource::~FileResource()
55*35238bceSAndroid Build Coastguard Worker {
56*35238bceSAndroid Build Coastguard Worker     fclose(m_file);
57*35238bceSAndroid Build Coastguard Worker }
58*35238bceSAndroid Build Coastguard Worker 
read(uint8_t * dst,int numBytes)59*35238bceSAndroid Build Coastguard Worker void FileResource::read(uint8_t *dst, int numBytes)
60*35238bceSAndroid Build Coastguard Worker {
61*35238bceSAndroid Build Coastguard Worker     int numRead = (int)fread(dst, 1, numBytes, m_file);
62*35238bceSAndroid Build Coastguard Worker     TCU_CHECK(numRead == numBytes);
63*35238bceSAndroid Build Coastguard Worker }
64*35238bceSAndroid Build Coastguard Worker 
getSize(void) const65*35238bceSAndroid Build Coastguard Worker int FileResource::getSize(void) const
66*35238bceSAndroid Build Coastguard Worker {
67*35238bceSAndroid Build Coastguard Worker     long curPos = ftell(m_file);
68*35238bceSAndroid Build Coastguard Worker     fseek(m_file, 0, SEEK_END);
69*35238bceSAndroid Build Coastguard Worker     int size = (int)ftell(m_file);
70*35238bceSAndroid Build Coastguard Worker     fseek(m_file, curPos, SEEK_SET);
71*35238bceSAndroid Build Coastguard Worker     return size;
72*35238bceSAndroid Build Coastguard Worker }
73*35238bceSAndroid Build Coastguard Worker 
getPosition(void) const74*35238bceSAndroid Build Coastguard Worker int FileResource::getPosition(void) const
75*35238bceSAndroid Build Coastguard Worker {
76*35238bceSAndroid Build Coastguard Worker     return (int)ftell(m_file);
77*35238bceSAndroid Build Coastguard Worker }
78*35238bceSAndroid Build Coastguard Worker 
setPosition(int position)79*35238bceSAndroid Build Coastguard Worker void FileResource::setPosition(int position)
80*35238bceSAndroid Build Coastguard Worker {
81*35238bceSAndroid Build Coastguard Worker     fseek(m_file, (size_t)position, SEEK_SET);
82*35238bceSAndroid Build Coastguard Worker }
83*35238bceSAndroid Build Coastguard Worker 
ResourcePrefix(const Archive & archive,const char * prefix)84*35238bceSAndroid Build Coastguard Worker ResourcePrefix::ResourcePrefix(const Archive &archive, const char *prefix) : m_archive(archive), m_prefix(prefix)
85*35238bceSAndroid Build Coastguard Worker {
86*35238bceSAndroid Build Coastguard Worker }
87*35238bceSAndroid Build Coastguard Worker 
getResource(const char * name) const88*35238bceSAndroid Build Coastguard Worker Resource *ResourcePrefix::getResource(const char *name) const
89*35238bceSAndroid Build Coastguard Worker {
90*35238bceSAndroid Build Coastguard Worker     return m_archive.getResource((m_prefix + name).c_str());
91*35238bceSAndroid Build Coastguard Worker }
92*35238bceSAndroid Build Coastguard Worker 
93*35238bceSAndroid Build Coastguard Worker } // namespace tcu
94