x
Yes
No
Do you want to visit DriveHQ English website?
首页
产品服务
价格
免费试用
下载客户端
关于我们
云文件服务
|
云备份服务
|
FTP服务
|
企业邮箱服务
|
网站托管
|
客户端软件
云文件服务
云备份服务
FTP服务
企业级邮箱服务
网站托管
客户端软件
daeURI.h - Hosted on DriveHQ Cloud IT Platform
返回上层目录
上传
下载
共享
发布
新建文件夹
新建文件
复制
剪切
删除
粘贴
评论
升级服务
路径: \\game3dprogramming\materials\DarkPuzzle\libs\bullet_sdk\Extras\COLLADA_DOM\include\dae\daeURI.h
旋转
特效
属性
历史版本
/* * Copyright 2006 Sony Computer Entertainment Inc. * * Licensed under the SCEA Shared Source License, Version 1.0 (the "License"); you may not use this * file except in compliance with the License. You may obtain a copy of the License at: * http://research.scea.com/scea_shared_source_license.html * * Unless required by applicable law or agreed to in writing, software distributed under the License * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or * implied. See the License for the specific language governing permissions and limitations under the * License. */ #ifndef __DAE_URI_H__ #define __DAE_URI_H__ #include
#include
//Contributed by Nus - Wed, 08 Nov 2006 /** * Initializing URI. */ extern "C" void initializeURI(void); /** * Terminating URI. */ extern "C" void terminateURI(void); //------------------------- /** * The @c daeURI is a simple class designed to aid in the parsing and resolution * of URI references inside COLLADA elements. * A @c daeURI is created for every @c anyURL and @c IDREF in the COLLADA schema. * For example, the
element has the url= attribute of type @c anyURL, and the *
element has the target= attribute of type @c IDREF. * The @c daeURI class contains a URI string; the @c setURI() method breaks the string into * its components including protocol, authority, path (directory), and ID. * It also has the capability to attempt to resolve this reference * into a @c daeElement, through the method @c resolveElement(). * If a @c daeURI is stored within a @c daeElement, it fills * its container field to point to the containing element. * * The main API on the @c daeURI, @c resolveElement(), uses a @c daeURIResolver * to search for the @c daeElement inside a @c daeDatabase. * * URIs are resolved hierarchically, where each URI is resolved based on * the following criteria via itself and its element's base URI, which represents the * URI of the document that contains the element, retrieved by *
daeElement::getBaseURI().
* If no base URI is provided, then the application URI * is used as a base. * * The URI resolution order for the COLLADA DOM is as follows: * - Absolute URI is specified (see definition below): * The URI ignores its parent/base URI when validating. * - Relative URI is specified: * The URI uses the base URI to provide the protocol, authority, and base path. * This URI's path is appended to the path given the the base URI. * This URI's file and ID are used. * - Each level of URI is resolved in this way against the base URI of the * containing file until the top level is reached. Then the application URI * is used as the default. * *
Definition of Absolute URI:
* For the purposes of the COLLADA DOM, a URI is considered absolute * if it starts by specifying a protocol. * For example, * - file://c:/data/foo.dae#myScene is an absolute URI. * - foo.dae#myScene is relative. * - foo.dae is a top-level file reference and is relative. * If the URI does not include a pound sign (#), the
id
is empty. */ class daeURI { private: void internalSetURI(daeString uri); public: /** * An enum describing the status of the URI resolution process. */ DLLSPEC enum ResolveState{ /** No URI specified */ uri_empty, /** URI specified but unresolved */ uri_loaded, /** Resolution pending */ uri_pending, /** Resolution successful */ uri_success, /** Failure due to unsupported URI scheme */ uri_failed_unsupported_protocol, /** Failure because the file was not found */ uri_failed_file_not_found, /** Failure because the ID was not found */ uri_failed_id_not_found, /** Failure due to an invalid ID */ uri_failed_invalid_id, /** A flag specifying that the URI should be resolved locally to its own document */ uri_resolve_local, /** A flag specifying that the URI should be resolved using this relative URI */ uri_resolve_relative, /** A flag specifying that the URI should be resolved using this absolute URI */ uri_resolve_absolute, /** Failure due to an invalid reference */ uri_failed_invalid_reference, /** Failure due to an external error */ uri_failed_externalization, /** Failure due to missing document */ uri_failed_missing_container, /** Failure because autmoatic loading of a document is turned off */ uri_failed_external_document }; private: /** Resolved version of the URI */ daeString uriString; /** Original URI before resolution */ daeString originalURIString; // Parceled out of storage as const char*'s /** Protocol substring parsed from the URI */ daeString protocol; /** authority substring parsed from the URI */ daeString authority; /** Path substring parsed from the URI */ daeString filepath; /** File name substring parsed from the URI */ daeString file; /** Id substring parsed from the URI */ daeString id; /** Extension parsed from the filename in the URI */ daeString extension; /** Reference to the element that the URI resolves to in memory */ daeElementRef element; /** Pointer to the element that owns this URI */ daeElement* container; /** Current resolver state of the URI */ ResolveState state; /** Flag for if this URI references an external element. */ daeBool external; public: /** * Constructs a daeURI object that contains no URI reference. */ DLLSPEC daeURI(); /** * Destructor */ DLLSPEC ~daeURI(); /** * Constructs a daeURI object that points to the application's current working * directory. * @param dummy An integer value that has no meaning. * @note This is used only to initialize the Application URI. It's a simple * workaround to insure that the ApplicationURI is initialized only once and before the user can call * daeURI::setBaseURI() (so when we initialize ApplicationURI there is no chance of wiping out a user value). */ DLLSPEC daeURI(int dummy); /** * Constructs a daeURI object from a URI passed in as a string. * @param URIString Passed to setURI() automatically. * @param nofrag If true, the fragment part of the URI is stripped off before construction. */ DLLSPEC daeURI(daeString URIString, daeBool nofrag = false); /** * Constructs a daeURI object using a
baseURI
and a
uriString.
* Calls setURI(URIString), and @c validate(baseURI). * @param baseURI Base URI to resolve against. * @param URIString String designating this URI. */ DLLSPEC daeURI(daeURI& baseURI, daeString URIString); /** * Constructs a daeURI object based on a simple copy from an existing @c daeURI. * @param constructFromURI URI to copy into this one. */ DLLSPEC daeURI(daeURI& constructFromURI); /** * Gets the ID string parsed from the URI. * @return Returns a pointer to the string. */ inline daeString getID(){return(id);}; /** * Gets the file string parsed from the URI. * @return Returns a pointer to the string. */ inline daeString getFile(){return(file);}; /** * Gets the path string to the file, without the path name, parsed from the URI. * @return Returns a pointer to the string. */ inline daeString getFilepath(){return(filepath);}; /** * Gets the protocol string parsed from the URI. * @return Returns a pointer to the string. */ inline daeString getProtocol(){return(protocol);}; /** * Gets the authority string parsed from the URI. * @return Returns a pointer to the string. */ inline daeString getAuthority(){return(authority);}; /** * Gets the extension string parsed from the URI. * @return Returns a pointer to the string. */ inline daeString getExtension(){return(extension);}; /** * Gets the element that this URI resolves to in memory. * @return Returns a ref to the element. */ inline daeElementRef getElement(){return(element);}; /** * Gets the element that this URI resolves to in memory. * @return Returns a ref to the element. */ inline daeElementConstRef getElement() const {return(element);}; /** * Sets the element that this URI resolves to in memory. * @param newref A ref to the element. */ inline void setElement(daeElementRef newref){element=newref;}; /** * Gets the resolve state of the URI. * @return Returns the current state. * @note This will be removed when daeURI starts managing its state internally. */ inline ResolveState getState() const {return(state);}; /** * Sets the resolve state of the URI. * @param newState The new state. * @note This will be removed when daeURI starts managing its state internally. */ inline void setState(ResolveState newState){state=newState;}; /** * Gets a pointer to the @c daeElement that contains this URI. * @return Returns the pointer to the containing daeElmement. */ inline daeElement* getContainer() const {return(container);}; /** * Sets the pointer to the @c daeElement that contains this URI. * @param element Pointer to the containing @c daeElmement. */ inline void setContainer(daeElement* element){container=element;}; /** * Copies parameter
uri
into data member
uriString,
and then decomposes each of *
protocol, authority, filepath, file,
and
id.
* After @c setURI(), the
state
is set to @c uri_loaded. * @param uri String to use to configure this URI. */ DLLSPEC void setURI(daeString uri); /** * Gets the URI stored in the daeURI. * @return Returns the full URI String, from
uriString.
*/ DLLSPEC daeString getURI() const; /** * Gets the original URI String as originally set, not flattened against the base URI. * @return Returns the original URI String as originally set, not flattened against the base URI. */ DLLSPEC daeString getOriginalURI() const; /** * Gets if this URI resolves to an element that is not contained in the same document as the URI. * @return Returns true if the URI references an external element. False otherwise. */ daeBool isExternalReference() const { return external; } /** * Uses the @c daeURIResolver static API to try to resolve this URI * into a @c daeElement reference, placing the resolved element into
element.
* This function can effectively force a load of a file, perform * a database query, and so on, based on the @c daeURIResolver plugins implemented. */ DLLSPEC void resolveElement(daeString typeNameHint = NULL); /** * Configures the
uriString
for this @c daeURI based on the element set in
element.
* Uses the element's base URI and ID information to configure * the URI string. */ DLLSPEC void resolveURI(); /** * Flattens this URI with base URI to obtain a useable * complete URI for resolution. * @param baseURI Base URI to flatten against if this URI is * relative. * @note After @c validate(), state is @c uri_pending as it is awaiting a call to * @c resolveElement(). */ DLLSPEC void validate(daeURI* baseURI = NULL); /** * Copies the URI specified in
from
into @c this. * Performs a simple copy without validating the URI. * @param from URI to copy from. */ DLLSPEC void copyFrom(daeURI& from); /** * Outputs all components of this URI to stderr. * Useful for debugging URIs, this outputs each part of the URI separately. */ DLLSPEC void print(); /** * Makes the "originalURI" in this URI relative to some other uri * @param uri the URI to make "this" relative to. * @note this is experimental and not fully tested, please don't use in critical code yet. */ DLLSPEC int makeRelativeTo(daeURI* uri); /** * Comparison operator. * @return Returns true if URI's are equal. */ inline bool operator==(const daeURI& other) const{ return (!strcmp(other.getURI(), getURI())); } daeURI &operator=( const daeURI& other) { setURI(other.getOriginalURI()); element = other.element; state = other.state; return *this; } private: /** * Resets this URI; frees all string references * and returns
state
to @c empty. */ void reset(); /** * Provides a shared initialization for all constructors */ void initialize(); public: /** * Gets the path part of the URI, including everything from immediately after the authority up to and * including the file name, but not the query or fragment. * @param dest The user allocated buffer that will receive the path. * @param size The size of the buffer. * @return Returns true for success, false if the path exceeded the size of the user provided buffer. */ DLLSPEC daeBool getPath(daeChar *dest, daeInt size); public: /** * Sets the application's default base URI. This is effectively the default protocol, * authority, and path in the case of top-level relative URIs. * @param uri Base URI to use as the default application URI. */ static DLLSPEC void setBaseURI(daeURI& uri); /** * Gets the application's default base URI. * @return Returns the base URI used in the case of top-level relative URIs. */ static DLLSPEC daeURI* getBaseURI(); /** * Performs RFC2396 path normalization. * @param path Path to be normalized. */ static DLLSPEC void normalizeURIPath(char *path); }; class daeURIResolver; typedef daeTArray
daeURIResolverPtrArray; /** * The @c daeURIResolver class is the plugin point for URI resolution. * This class is an abstract base class that defines an interface for * resolving URIs. * All instances of @c daeURIResolvers are tracked centrally. * Every URI is passed through this list of @c daeURIResolvers for resolution. * Before a @c daeURIResolver receives a URI, the API checks whether it supports * the protocol. * The list is ordered on a first come, first serve basis, and resolution * terminates after any resolver instance resolves the URI. */ class daeURIResolver { public: /** * This base constructor appends @c this to KnownResolvers list. */ DLLSPEC daeURIResolver(); /** * Destructor */ virtual DLLSPEC ~daeURIResolver(); protected: static daeURIResolverPtrArray &_KnownResolvers(); static daeBool _loadExternalDocuments; public: /** * Iterates through known resolvers * calling @c isProtocolSupported() and, if it is supported, calling * @c resolveElement(). * @param uri @c daeURI to resolve. */ static DLLSPEC void attemptResolveElement(daeURI &uri, daeString typeNameHint = NULL); /** * Iterates through known resolvers * calling @c isProtocolSupported() and, if it is supported, calling * @c resolveURI(). * @param uri @c daeURI to resolve. */ static DLLSPEC void attemptResolveURI(daeURI &uri); /** * Sets a flag that tells the URI resolver whether or not to load a separate document if a URI * being resolved points to one. * @param load Set to true if you want the URI Resolver to automatically load other documents to * resolve URIs. */ static DLLSPEC void setAutoLoadExternalDocuments( daeBool load ); /** * Gets a flag that tells if the URI resolver is set to load an external document if a URI * being resolved points to one. * @return Returns true if the resolver will automatically load documents to resolve a URI. * False otherwise. */ static DLLSPEC daeBool getAutoLoadExternalDocuments(); public: // Abstract Interface /** * Provides an abstract interface for converting a @c daeURI into a @c daeElement * @param uri @c daeURI to resolve. * @return Returns true if the @c daeURIResolver successfully resolved the URI, * returns false otherwise. */ virtual DLLSPEC daeBool resolveElement(daeURI& uri, daeString typeNameHint = NULL) = 0; /** * Provides an abstract interface for converting a @c daeElement into a @c daeURI * @param uri @c daeURI to resolve. * @return Returns true if the @c daeURIResolver successfully resolved the element * into a URI, returns false otherwise. */ virtual DLLSPEC daeBool resolveURI(daeURI& uri) = 0; /** * Gets the name of this resolver. * @return Returns the resolver name as a string. */ virtual DLLSPEC daeString getName() = 0; /** * Determines whether this resolver supports a particular protocol * for resolution. * @param protocol Determine whether the resolver supports this protocol. * @return Returns true if this @c daeURIResolver understands how to resolve using this protocol, returns * false otherwise */ virtual DLLSPEC daeBool isProtocolSupported(daeString protocol) = 0; /** * Determines whether this resolver supports the given extension. * This keeps parsers from trying to process incompatible * file formats. * @param extension Extension string found after the '.' in the file name. * @return Returns true if the given extension is supported, returns false otherwise. */ virtual DLLSPEC daeBool isExtensionSupported(daeString extension) = 0; }; #endif //__DAE_URI_H__
daeURI.h
网页地址
文件地址
上一页
31/33
下一页
下载
( 17 KB )
Comments
Total ratings:
0
Average rating:
无评论
of 10
Would you like to comment?
Join now
, or
Logon
if you are already a member.