/usr/include/collada-dom2.4/dae/daeSIDResolver.h is in libcollada-dom2.4-dp-dev 2.4.4+ds1-2build3.
This file is owned by root:root, with mode 0o644.
The actual contents of the file can be viewed below.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 | /*
* Copyright 2006 Sony Computer Entertainment Inc.
*
* Licensed under the MIT Open Source License, for details please see license.txt or the website
* http://www.opensource.org/licenses/mit-license.php
*
*/
#ifndef __DAE_SIDRESOLVER_H__
#define __DAE_SIDRESOLVER_H__
#include <string>
#include <map>
#include <dae/daeTypes.h>
#include <dae/daeElement.h>
// This is an alternative to the daeSIDResolver class. It's recommended you use
// this class instead. Typical usage: get the element a sid ref points to. For
// example, if you want to find the element with sid 'sampler' using a
// daeElement pointer named 'effect', that would look like this:
// daeElement* elt = daeSidRef("sampler", effect).resolve().elt
struct DLLSPEC daeSidRef {
// A helper class for returning all the data retrieved when a sid is resolved.
struct DLLSPEC resolveData {
resolveData();
resolveData(daeElement* elt, daeDoubleArray* array, daeDouble* scalar);
daeElement* elt;
daeDoubleArray* array;
daeDouble* scalar;
};
daeSidRef();
daeSidRef(const std::string& sidRef, daeElement* referenceElt, const std::string& profile = "");
bool operator<(const daeSidRef& other) const;
resolveData resolve();
std::string sidRef;
daeElement* refElt;
std::string profile;
};
/**
* The daeSIDResolver class is designed to resolve sid references within a COLLADA document.
* The rules for sid resolution are set forth by the Addressing Syntax section in Chapter 3 of the
* COLLADA specification which can be found at https://www.khronos.org/collada .
* This resolver always attempts to resolve to the daeElement which is referenced. If the element contains
* a daeDoubleArray (domFloatArray) value, the resolver will set the pointer to that array. The
* resolver will also do this if the sid target points to a <source> element which has a <float_array> as
* a child. If the sid target specifies a value, i.e. blah.X or blah(6), the resolver will attempt to
* get a pointer to that specific value. The resolver only attempts to resolve to that level for values which
* are defined in the COMMON profile glossary of the COLLADA specification, or values reference with the (#)
* syntax. You can check the return value from getState() to see which level of resolution is possible.
*/
class DLLSPEC daeSIDResolver
{
public:
/**
* An enum describing the status of the SID resolution process.
*/
enum ResolveState{
/** No target specified */
target_empty,
/** target specified but not resolved */
target_loaded,
/** Resolution failed because target was not found */
sid_failed_not_found,
/** Resolution successful to the Element level */
sid_success_element,
/** Resolution successful to the Double Array level */
sid_success_array,
/** Resolution successful to the Double level */
sid_success_double
};
/**
* Constructor.
* @param container The element which contains the target that you want to resolve.
* @param target The target string which needs to be resolved.
* @param platform The platform name of the technique to use. A NULL value indicates the common platform.
*/
daeSIDResolver( daeElement *container, daeString target, daeString platform = NULL );
/**
* Gets the target string.
* @return Returns the target string of this SID resolver.
*/
daeString getTarget() const;
/**
* Sets the target string.
* @param t The new target string for this resolver.
*/
void setTarget( daeString t );
/**
* Gets the name of the profile to use when resolving.
* @return Returns the name of the profile or NULL for the common profile.
*/
daeString getProfile() const;
/**
* Sets the profile to use when resolving.
* @param p The profile name of the technique to use. A NULL value indicates the common profile.
*/
void setProfile( daeString p );
/**
* Gets a pointer to the @c daeElement that contains the target to resolve.
* @return Returns the pointer to the containing daeElmement.
*/
daeElement* getContainer() const;
/**
* Sets the pointer to the @c daeElement that contains the target to resolve.
* @param element Pointer to the containing @c daeElmement.
*/
void setContainer(daeElement* element);
/**
* Gets the element that this SID resolves to.
* @return Returns the element that the URI resolves to.
*/
daeElement* getElement();
/**
* Gets the value array of the element that the SID resolves to.
* @return Returns a pointer to the value array that the SID resolves to
* @note The daeSIDResolver can only resolve to this level for daeDoubleArray values.
*/
daeDoubleArray *getDoubleArray();
/**
* Gets a pointer to the particle this target resolved to.
* @return Returns a pointer to a double value which is the fully resolved target.
* @note The daeSIDResolver can only resolve to this level for domDouble values and only if the
* final symbolic name is from the COMMON profile or a cardinal value is specified.
* @note The daeSIDResolver assumes the value is a 4x4 matrix if there are 2 cardinal values specified.
*/
daeDouble *getDouble();
// This method is deprecated. Don't use it.
ResolveState getState() const;
private:
// This data is provided by the user
std::string target;
std::string profile;
daeElement* container;
};
// A class to make sid ref lookups faster. Meant for DOM internal use only.
class DLLSPEC daeSidRefCache {
public:
daeSidRefCache();
~daeSidRefCache();
daeSidRef::resolveData lookup(const daeSidRef& sidRef);
void add(const daeSidRef& sidRef, const daeSidRef::resolveData& data);
void clear();
// For debugging/testing
bool empty();
int misses();
int hits();
private:
std::map<daeSidRef, daeSidRef::resolveData> * lookupTable;
int hitCount;
int missCount;
};
#endif
|