xref: /aosp_15_r20/external/deqp/framework/common/tcuResource.hpp (revision 35238bce31c2a825756842865a792f8cf7f89930)
1*35238bceSAndroid Build Coastguard Worker #ifndef _TCURESOURCE_HPP
2*35238bceSAndroid Build Coastguard Worker #define _TCURESOURCE_HPP
3*35238bceSAndroid Build Coastguard Worker /*-------------------------------------------------------------------------
4*35238bceSAndroid Build Coastguard Worker  * drawElements Quality Program Tester Core
5*35238bceSAndroid Build Coastguard Worker  * ----------------------------------------
6*35238bceSAndroid Build Coastguard Worker  *
7*35238bceSAndroid Build Coastguard Worker  * Copyright 2014 The Android Open Source Project
8*35238bceSAndroid Build Coastguard Worker  *
9*35238bceSAndroid Build Coastguard Worker  * Licensed under the Apache License, Version 2.0 (the "License");
10*35238bceSAndroid Build Coastguard Worker  * you may not use this file except in compliance with the License.
11*35238bceSAndroid Build Coastguard Worker  * You may obtain a copy of the License at
12*35238bceSAndroid Build Coastguard Worker  *
13*35238bceSAndroid Build Coastguard Worker  *      http://www.apache.org/licenses/LICENSE-2.0
14*35238bceSAndroid Build Coastguard Worker  *
15*35238bceSAndroid Build Coastguard Worker  * Unless required by applicable law or agreed to in writing, software
16*35238bceSAndroid Build Coastguard Worker  * distributed under the License is distributed on an "AS IS" BASIS,
17*35238bceSAndroid Build Coastguard Worker  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
18*35238bceSAndroid Build Coastguard Worker  * See the License for the specific language governing permissions and
19*35238bceSAndroid Build Coastguard Worker  * limitations under the License.
20*35238bceSAndroid Build Coastguard Worker  *
21*35238bceSAndroid Build Coastguard Worker  *//*!
22*35238bceSAndroid Build Coastguard Worker  * \file
23*35238bceSAndroid Build Coastguard Worker  * \brief Resource system.
24*35238bceSAndroid Build Coastguard Worker  *//*--------------------------------------------------------------------*/
25*35238bceSAndroid Build Coastguard Worker 
26*35238bceSAndroid Build Coastguard Worker #include "tcuDefs.hpp"
27*35238bceSAndroid Build Coastguard Worker 
28*35238bceSAndroid Build Coastguard Worker #include <string>
29*35238bceSAndroid Build Coastguard Worker 
30*35238bceSAndroid Build Coastguard Worker // \todo [2010-07-31 pyry] Move Archive and File* to separate files
31*35238bceSAndroid Build Coastguard Worker 
32*35238bceSAndroid Build Coastguard Worker namespace tcu
33*35238bceSAndroid Build Coastguard Worker {
34*35238bceSAndroid Build Coastguard Worker 
35*35238bceSAndroid Build Coastguard Worker /*--------------------------------------------------------------------*//*!
36*35238bceSAndroid Build Coastguard Worker  * \brief Resource object
37*35238bceSAndroid Build Coastguard Worker  *
38*35238bceSAndroid Build Coastguard Worker  * Test framework uses abstraction for data access instead of using
39*35238bceSAndroid Build Coastguard Worker  * files directly to better support platforms where application resources
40*35238bceSAndroid Build Coastguard Worker  * are not available directly in the filesystem.
41*35238bceSAndroid Build Coastguard Worker  *
42*35238bceSAndroid Build Coastguard Worker  * Resource objects are requested from Archive object provided by Platform.
43*35238bceSAndroid Build Coastguard Worker  * The user is responsible of disposing the objects afterwards.
44*35238bceSAndroid Build Coastguard Worker  *//*--------------------------------------------------------------------*/
45*35238bceSAndroid Build Coastguard Worker class Resource
46*35238bceSAndroid Build Coastguard Worker {
47*35238bceSAndroid Build Coastguard Worker public:
~Resource(void)48*35238bceSAndroid Build Coastguard Worker     virtual ~Resource(void)
49*35238bceSAndroid Build Coastguard Worker     {
50*35238bceSAndroid Build Coastguard Worker     }
51*35238bceSAndroid Build Coastguard Worker 
52*35238bceSAndroid Build Coastguard Worker     virtual void read(uint8_t *dst, int numBytes) = 0;
53*35238bceSAndroid Build Coastguard Worker     virtual int getSize(void) const               = 0;
54*35238bceSAndroid Build Coastguard Worker     virtual int getPosition(void) const           = 0;
55*35238bceSAndroid Build Coastguard Worker     virtual void setPosition(int position)        = 0;
56*35238bceSAndroid Build Coastguard Worker 
getName(void) const57*35238bceSAndroid Build Coastguard Worker     const std::string &getName(void) const
58*35238bceSAndroid Build Coastguard Worker     {
59*35238bceSAndroid Build Coastguard Worker         return m_name;
60*35238bceSAndroid Build Coastguard Worker     }
61*35238bceSAndroid Build Coastguard Worker 
62*35238bceSAndroid Build Coastguard Worker protected:
Resource(const std::string & name)63*35238bceSAndroid Build Coastguard Worker     Resource(const std::string &name) : m_name(name)
64*35238bceSAndroid Build Coastguard Worker     {
65*35238bceSAndroid Build Coastguard Worker     }
66*35238bceSAndroid Build Coastguard Worker 
67*35238bceSAndroid Build Coastguard Worker private:
68*35238bceSAndroid Build Coastguard Worker     std::string m_name;
69*35238bceSAndroid Build Coastguard Worker };
70*35238bceSAndroid Build Coastguard Worker 
71*35238bceSAndroid Build Coastguard Worker /*--------------------------------------------------------------------*//*!
72*35238bceSAndroid Build Coastguard Worker  * \brief Abstract resource archive
73*35238bceSAndroid Build Coastguard Worker  *//*--------------------------------------------------------------------*/
74*35238bceSAndroid Build Coastguard Worker class Archive
75*35238bceSAndroid Build Coastguard Worker {
76*35238bceSAndroid Build Coastguard Worker public:
~Archive(void)77*35238bceSAndroid Build Coastguard Worker     virtual ~Archive(void)
78*35238bceSAndroid Build Coastguard Worker     {
79*35238bceSAndroid Build Coastguard Worker     }
80*35238bceSAndroid Build Coastguard Worker 
81*35238bceSAndroid Build Coastguard Worker     /*--------------------------------------------------------------------*//*!
82*35238bceSAndroid Build Coastguard Worker      * \brief Open resource
83*35238bceSAndroid Build Coastguard Worker      *
84*35238bceSAndroid Build Coastguard Worker      * Throws resource error if no resource with given name exists.
85*35238bceSAndroid Build Coastguard Worker      *
86*35238bceSAndroid Build Coastguard Worker      * Resource object must be deleted after use
87*35238bceSAndroid Build Coastguard Worker      *
88*35238bceSAndroid Build Coastguard Worker      * \param name Resource path
89*35238bceSAndroid Build Coastguard Worker      * \return Resource object
90*35238bceSAndroid Build Coastguard Worker      *//*--------------------------------------------------------------------*/
91*35238bceSAndroid Build Coastguard Worker     virtual Resource *getResource(const char *name) const = 0;
92*35238bceSAndroid Build Coastguard Worker 
93*35238bceSAndroid Build Coastguard Worker protected:
Archive()94*35238bceSAndroid Build Coastguard Worker     Archive()
95*35238bceSAndroid Build Coastguard Worker     {
96*35238bceSAndroid Build Coastguard Worker     }
97*35238bceSAndroid Build Coastguard Worker };
98*35238bceSAndroid Build Coastguard Worker 
99*35238bceSAndroid Build Coastguard Worker /*--------------------------------------------------------------------*//*!
100*35238bceSAndroid Build Coastguard Worker  * \brief Directory-based archive implementation
101*35238bceSAndroid Build Coastguard Worker  *//*--------------------------------------------------------------------*/
102*35238bceSAndroid Build Coastguard Worker class DirArchive : public Archive
103*35238bceSAndroid Build Coastguard Worker {
104*35238bceSAndroid Build Coastguard Worker public:
105*35238bceSAndroid Build Coastguard Worker     DirArchive(const char *path);
106*35238bceSAndroid Build Coastguard Worker     ~DirArchive(void);
107*35238bceSAndroid Build Coastguard Worker 
108*35238bceSAndroid Build Coastguard Worker     Resource *getResource(const char *name) const;
109*35238bceSAndroid Build Coastguard Worker 
110*35238bceSAndroid Build Coastguard Worker     // \note Assignment and copy allowed
DirArchive(const DirArchive & other)111*35238bceSAndroid Build Coastguard Worker     DirArchive(const DirArchive &other) : Archive(), m_path(other.m_path)
112*35238bceSAndroid Build Coastguard Worker     {
113*35238bceSAndroid Build Coastguard Worker     }
operator =(const DirArchive & other)114*35238bceSAndroid Build Coastguard Worker     DirArchive &operator=(const DirArchive &other)
115*35238bceSAndroid Build Coastguard Worker     {
116*35238bceSAndroid Build Coastguard Worker         m_path = other.m_path;
117*35238bceSAndroid Build Coastguard Worker         return *this;
118*35238bceSAndroid Build Coastguard Worker     }
119*35238bceSAndroid Build Coastguard Worker 
120*35238bceSAndroid Build Coastguard Worker private:
121*35238bceSAndroid Build Coastguard Worker     std::string m_path;
122*35238bceSAndroid Build Coastguard Worker };
123*35238bceSAndroid Build Coastguard Worker 
124*35238bceSAndroid Build Coastguard Worker class FileResource : public Resource
125*35238bceSAndroid Build Coastguard Worker {
126*35238bceSAndroid Build Coastguard Worker public:
127*35238bceSAndroid Build Coastguard Worker     FileResource(const char *filename);
128*35238bceSAndroid Build Coastguard Worker     ~FileResource(void);
129*35238bceSAndroid Build Coastguard Worker 
130*35238bceSAndroid Build Coastguard Worker     void read(uint8_t *dst, int numBytes);
131*35238bceSAndroid Build Coastguard Worker     int getSize(void) const;
132*35238bceSAndroid Build Coastguard Worker     int getPosition(void) const;
133*35238bceSAndroid Build Coastguard Worker     void setPosition(int position);
134*35238bceSAndroid Build Coastguard Worker 
135*35238bceSAndroid Build Coastguard Worker private:
136*35238bceSAndroid Build Coastguard Worker     FileResource(const FileResource &other);
137*35238bceSAndroid Build Coastguard Worker     FileResource &operator=(const FileResource &other);
138*35238bceSAndroid Build Coastguard Worker 
139*35238bceSAndroid Build Coastguard Worker     FILE *m_file;
140*35238bceSAndroid Build Coastguard Worker };
141*35238bceSAndroid Build Coastguard Worker 
142*35238bceSAndroid Build Coastguard Worker class ResourcePrefix : public Archive
143*35238bceSAndroid Build Coastguard Worker {
144*35238bceSAndroid Build Coastguard Worker public:
145*35238bceSAndroid Build Coastguard Worker     ResourcePrefix(const Archive &archive, const char *prefix);
~ResourcePrefix(void)146*35238bceSAndroid Build Coastguard Worker     virtual ~ResourcePrefix(void)
147*35238bceSAndroid Build Coastguard Worker     {
148*35238bceSAndroid Build Coastguard Worker     }
149*35238bceSAndroid Build Coastguard Worker 
150*35238bceSAndroid Build Coastguard Worker     virtual Resource *getResource(const char *name) const;
151*35238bceSAndroid Build Coastguard Worker 
152*35238bceSAndroid Build Coastguard Worker private:
153*35238bceSAndroid Build Coastguard Worker     const Archive &m_archive;
154*35238bceSAndroid Build Coastguard Worker     std::string m_prefix;
155*35238bceSAndroid Build Coastguard Worker };
156*35238bceSAndroid Build Coastguard Worker 
157*35238bceSAndroid Build Coastguard Worker } // namespace tcu
158*35238bceSAndroid Build Coastguard Worker 
159*35238bceSAndroid Build Coastguard Worker #endif // _TCURESOURCE_HPP
160