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