| /* |
| Open Asset Import Library (assimp) |
| ---------------------------------------------------------------------- |
| |
| Copyright (c) 2006-2017, assimp team |
| |
| All rights reserved. |
| |
| Redistribution and use of this software in source and binary forms, |
| with or without modification, are permitted provided that the |
| following conditions are met: |
| |
| * Redistributions of source code must retain the above |
| copyright notice, this list of conditions and the |
| following disclaimer. |
| |
| * Redistributions in binary form must reproduce the above |
| copyright notice, this list of conditions and the |
| following disclaimer in the documentation and/or other |
| materials provided with the distribution. |
| |
| * Neither the name of the assimp team, nor the names of its |
| contributors may be used to endorse or promote products |
| derived from this software without specific prior |
| written permission of the assimp team. |
| |
| THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS |
| "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT |
| LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR |
| A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT |
| OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, |
| SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT |
| LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, |
| DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY |
| THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT |
| (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE |
| OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
| |
| ---------------------------------------------------------------------- |
| */ |
| /// \file FIReader.hpp |
| /// \brief Reader for Fast Infoset encoded binary XML files. |
| /// \date 2017 |
| /// \author Patrick Daehne |
| |
| #ifndef INCLUDED_AI_FI_READER_H |
| #define INCLUDED_AI_FI_READER_H |
| |
| #ifndef ASSIMP_BUILD_NO_X3D_IMPORTER |
| |
| //#include <wchar.h> |
| #include <string> |
| #include <memory> |
| #include <cerrno> |
| #include <cwchar> |
| #include <vector> |
| //#include <stdio.h> |
| //#include <cstdint> |
| #include <irrXML.h> |
| |
| namespace Assimp { |
| |
| struct FIValue { |
| virtual const std::string &toString() const = 0; |
| }; |
| |
| struct FIStringValue: public FIValue { |
| std::string value; |
| static std::shared_ptr<FIStringValue> create(std::string &&value); |
| }; |
| |
| struct FIByteValue: public FIValue { |
| std::vector<uint8_t> value; |
| }; |
| |
| struct FIHexValue: public FIByteValue { |
| static std::shared_ptr<FIHexValue> create(std::vector<uint8_t> &&value); |
| }; |
| |
| struct FIBase64Value: public FIByteValue { |
| static std::shared_ptr<FIBase64Value> create(std::vector<uint8_t> &&value); |
| }; |
| |
| struct FIShortValue: public FIValue { |
| std::vector<int16_t> value; |
| static std::shared_ptr<FIShortValue> create(std::vector<int16_t> &&value); |
| }; |
| |
| struct FIIntValue: public FIValue { |
| std::vector<int32_t> value; |
| static std::shared_ptr<FIIntValue> create(std::vector<int32_t> &&value); |
| }; |
| |
| struct FILongValue: public FIValue { |
| std::vector<int64_t> value; |
| static std::shared_ptr<FILongValue> create(std::vector<int64_t> &&value); |
| }; |
| |
| struct FIBoolValue: public FIValue { |
| std::vector<bool> value; |
| static std::shared_ptr<FIBoolValue> create(std::vector<bool> &&value); |
| }; |
| |
| struct FIFloatValue: public FIValue { |
| std::vector<float> value; |
| static std::shared_ptr<FIFloatValue> create(std::vector<float> &&value); |
| }; |
| |
| struct FIDoubleValue: public FIValue { |
| std::vector<double> value; |
| static std::shared_ptr<FIDoubleValue> create(std::vector<double> &&value); |
| }; |
| |
| struct FIUUIDValue: public FIByteValue { |
| static std::shared_ptr<FIUUIDValue> create(std::vector<uint8_t> &&value); |
| }; |
| |
| struct FICDATAValue: public FIStringValue { |
| static std::shared_ptr<FICDATAValue> create(std::string &&value); |
| }; |
| |
| struct FIDecoder { |
| virtual std::shared_ptr<const FIValue> decode(const uint8_t *data, size_t len) = 0; |
| }; |
| |
| struct FIQName { |
| const char *name; |
| const char *prefix; |
| const char *uri; |
| }; |
| |
| struct FIVocabulary { |
| const char **restrictedAlphabetTable; |
| size_t restrictedAlphabetTableSize; |
| const char **encodingAlgorithmTable; |
| size_t encodingAlgorithmTableSize; |
| const char **prefixTable; |
| size_t prefixTableSize; |
| const char **namespaceNameTable; |
| size_t namespaceNameTableSize; |
| const char **localNameTable; |
| size_t localNameTableSize; |
| const char **otherNCNameTable; |
| size_t otherNCNameTableSize; |
| const char **otherURITable; |
| size_t otherURITableSize; |
| const std::shared_ptr<const FIValue> *attributeValueTable; |
| size_t attributeValueTableSize; |
| const std::shared_ptr<const FIValue> *charactersTable; |
| size_t charactersTableSize; |
| const std::shared_ptr<const FIValue> *otherStringTable; |
| size_t otherStringTableSize; |
| const FIQName *elementNameTable; |
| size_t elementNameTableSize; |
| const FIQName *attributeNameTable; |
| size_t attributeNameTableSize; |
| }; |
| |
| class IOStream; |
| |
| class FIReader: public irr::io::IIrrXMLReader<char, irr::io::IXMLBase> { |
| public: |
| virtual ~FIReader(); |
| virtual std::shared_ptr<const FIValue> getAttributeEncodedValue(int idx) const = 0; |
| |
| virtual std::shared_ptr<const FIValue> getAttributeEncodedValue(const char *name) const = 0; |
| |
| virtual void registerDecoder(const std::string &algorithmUri, std::unique_ptr<FIDecoder> decoder) = 0; |
| |
| virtual void registerVocabulary(const std::string &vocabularyUri, const FIVocabulary *vocabulary) = 0; |
| |
| static std::unique_ptr<FIReader> create(IOStream *stream); |
| |
| };// class IFIReader |
| |
| inline |
| FIReader::~FIReader() { |
| // empty |
| } |
| |
| }// namespace Assimp |
| |
| #endif // #ifndef ASSIMP_BUILD_NO_X3D_IMPORTER |
| |
| #endif // INCLUDED_AI_FI_READER_H |