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 #include <UT/UT_WorkBuffer.h>
37 
38 namespace GLTF_NAMESPACE
39 {
40 
41 class GLTF_Loader;
42 
43 ///
44 /// A singleton responsible for storing a cached GLTF_Loader.
45 ///
47 {
48 public:
49  static GLTF_Cache &GetInstance();
50 
51  ///
52  /// Creates a new loader with the given filepath, calls Load()
53  /// and returns a pointer. If we were unable to load, then
54  /// the loader is evicted and null is returned
55  ///
56  const UT_SharedPtr<const GLTF_Loader> LoadLoader(
57  const UT_StringHolder &path,
58  UT_WorkBuffer& errors);
59 
60  // Removes the loader from the cache, does not destroy any existing
61  // instances as loaders are UT_SharedPtr's
62  bool EvictLoader(const UT_StringHolder &path);
63 
64 private:
65  // Gets an existing loader from the cache, returns false
66  // if the loader does not exist
67  const UT_SharedPtr<const GLTF_Loader> GetLoader(const UT_StringHolder &path);
68 
69 
70  void AutomaticEvict();
71 
73 };
74 
75 } // end GLTF_NAMESPACE
76 
77 #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