HDK
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
GLTF_Cache.h
Go to the documentation of this file.
1 /*
2  * Copyright (c) COPYRIGHTYEAR
3  * Side Effects Software Inc. All rights reserved.
4  *
5  * Redistribution and use of Houdini Development Kit samples in source and
6  * binary forms, with or without modification, are permitted provided that the
7  * following conditions are met:
8  * 1. Redistributions of source code must retain the above copyright notice,
9  * this list of conditions and the following disclaimer.
10  * 2. The name of Side Effects Software may not be used to endorse or
11  * promote products derived from this software without specific prior
12  * written permission.
13  *
14  * THIS SOFTWARE IS PROVIDED BY SIDE EFFECTS SOFTWARE `AS IS' AND ANY EXPRESS
15  * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
16  * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN
17  * NO EVENT SHALL SIDE EFFECTS SOFTWARE BE LIABLE FOR ANY DIRECT, INDIRECT,
18  * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
19  * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA,
20  * OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
21  * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
22  * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
23  * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
24  *
25  *----------------------------------------------------------------------------
26  */
27 
28 #ifndef __SOP_GLTFCACHE_H__
29 #define __SOP_GLTFCACHE_H__
30 
31 #include "GLTF_API.h"
32 
33 #include <UT/UT_Lock.h>
34 #include <UT/UT_Map.h>
35 #include <UT/UT_SharedPtr.h>
36 
37 namespace GLTF_NAMESPACE
38 {
39 
40 class GLTF_Loader;
41 
42 ///
43 /// A singleton responsible for storing a cached GLTF_Loader.
44 ///
46 {
47 public:
48  static GLTF_Cache &GetInstance();
49 
50  ///
51  /// Creates a new loader with the given filepath, calls Load()
52  /// and returns a pointer. If we were unable to load, then
53  /// the loader is evicted and null is returned
54  ///
55  const UT_SharedPtr<const GLTF_Loader> LoadLoader(const UT_StringHolder &path);
56 
57  // Removes the loader from the cache, does not destroy any existing
58  // instances as loaders are UT_SharedPtr's
59  bool EvictLoader(const UT_StringHolder &path);
60 
61 private:
62  // Gets an existing loader from the cache, returns false
63  // if the loader does not exist
64  const UT_SharedPtr<const GLTF_Loader> GetLoader(const UT_StringHolder &path);
65 
66 
67  void AutomaticEvict();
68 
70 };
71 
72 } // end GLTF_NAMESPACE
73 
74 #endif
#define GLTF_API
Definition: GLTF_API.h:37
Unsorted map container.
Definition: UT_Map.h:107
GLsizei const GLchar *const * path
Definition: glcorearb.h:3341
#define GLTF_NAMESPACE
Definition: GLTF_API.h:42
std::shared_ptr< T > UT_SharedPtr
Wrapper around std::shared_ptr.
Definition: UT_SharedPtr.h:36