Sirikata
|
00001 /* Meru 00002 * ReplacingDataStream.hpp 00003 * 00004 * Copyright (c) 2009, Stanford University 00005 * All rights reserved. 00006 * 00007 * Redistribution and use in source and binary forms, with or without 00008 * modification, are permitted provided that the following conditions are 00009 * met: 00010 * * Redistributions of source code must retain the above copyright 00011 * notice, this list of conditions and the following disclaimer. 00012 * * Redistributions in binary form must reproduce the above copyright 00013 * notice, this list of conditions and the following disclaimer in 00014 * the documentation and/or other materials provided with the 00015 * distribution. 00016 * * Neither the name of Sirikata nor the names of its contributors may 00017 * be used to endorse or promote products derived from this software 00018 * without specific prior written permission. 00019 * 00020 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS 00021 * IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED 00022 * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A 00023 * PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER 00024 * OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, 00025 * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, 00026 * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR 00027 * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF 00028 * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING 00029 * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS 00030 * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 00031 */ 00032 #ifndef _REPLACING_DATA_STREAM_HPP_ 00033 #define _REPLACING_DATA_STREAM_HPP_ 00034 00035 #include <sirikata/ogre/Platform.hpp> 00036 #include <sirikata/ogre/OgreHeaders.hpp> 00037 #include <OgreDataStream.h> 00038 #ifndef STANDALONE 00039 #include <OgreCommon.h> 00040 #endif 00041 00042 #include <sirikata/core/transfer/URI.hpp> 00043 00044 namespace Sirikata { 00045 namespace Graphics { 00046 00056 class SIRIKATA_OGRE_EXPORT ReplacingDataStream : public Ogre::DataStream{ 00057 protected: 00058 static void find_lexeme (const Ogre::String&input, 00059 Ogre::String::size_type &where_lexeme_start, 00060 Ogre::String::size_type &return_lexeme_end); 00061 Ogre::String dataAsString; 00062 Ogre::DataStreamPtr file; 00063 Ogre::MemoryDataStreamPtr helper; 00064 std::vector<Ogre::String> provides;//materials and programs this provides 00065 std::vector<Ogre::String> depends_on;//materials and programs this depends on 00066 const Ogre::NameValuePairList*mTextureAliases; 00067 Transfer::URI mSourceURI; 00069 void verifyData()const; 00079 virtual void replace_reference(Ogre::String&retval, const Ogre::String&input, Ogre::String::size_type&pwhere,Ogre::String::const_iterator second_input, const Ogre::String&filename); 00090 virtual void replace_texture_reference(Ogre::String&retval, const Ogre::String&input, Ogre::String::size_type&pwhere,Ogre::String::const_iterator second_input, bool texture_instead_of_source,const Ogre::String&filename); 00100 virtual Ogre::String full_replace_lexeme(const Ogre::String &input, 00101 Ogre::String::size_type where_lexeme_start, 00102 Ogre::String::size_type &return_lexeme_end, 00103 const Ogre::String &filename); 00114 virtual Ogre::String replace_lexeme(const Ogre::String &input, 00115 Ogre::String::size_type where_lexeme_start, 00116 Ogre::String::size_type &return_lexeme_end, 00117 const Ogre::String &filename); 00118 00119 00120 protected: 00138 virtual Ogre::String replaceData(Ogre::String); 00139 public: 00141 void preprocessData(std::vector<Ogre::String>&provides,std::vector<Ogre::String>&depends_on); 00148 ReplacingDataStream(Ogre::DataStreamPtr&input,const Ogre::String &destination, const Ogre::NameValuePairList*textureAliases); 00149 virtual ~ReplacingDataStream(); 00150 00151 virtual size_t read(void* buf, size_t count); 00152 virtual Ogre::String getAsString(void); 00153 virtual void skip(long count); 00154 00155 virtual void seek( size_t pos ); 00156 virtual size_t tell(void) const; 00157 virtual bool eof(void) const; 00158 virtual void close(void); 00159 }; 00160 00161 } // namespace Graphics 00162 } // namespace Sirikata 00163 00164 #endif //_REPLACING_DATA_STREAM_HPP_