diff options
Diffstat (limited to 'libs/assimp/code/AssetLib/Obj/ObjTools.h')
-rw-r--r-- | libs/assimp/code/AssetLib/Obj/ObjTools.h | 284 |
1 files changed, 0 insertions, 284 deletions
diff --git a/libs/assimp/code/AssetLib/Obj/ObjTools.h b/libs/assimp/code/AssetLib/Obj/ObjTools.h deleted file mode 100644 index 9e57a1c..0000000 --- a/libs/assimp/code/AssetLib/Obj/ObjTools.h +++ /dev/null @@ -1,284 +0,0 @@ -/* -Open Asset Import Library (assimp) ----------------------------------------------------------------------- - -Copyright (c) 2006-2021, 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 ObjTools.h - * @brief Some helpful templates for text parsing - */ -#ifndef OBJ_TOOLS_H_INC -#define OBJ_TOOLS_H_INC - -#include <assimp/ParsingUtils.h> -#include <assimp/fast_atof.h> -#include <vector> - -namespace Assimp { - -/** - * @brief Returns true, if the last entry of the buffer is reached. - * @param[in] it Iterator of current position. - * @param[in] end Iterator with end of buffer. - * @return true, if the end of the buffer is reached. - */ -template <class char_t> -inline bool isEndOfBuffer(char_t it, char_t end) { - if (it == end) { - return true; - } - --end; - - return (it == end); -} - -/** - * @brief Returns next word separated by a space - * @param[in] pBuffer Pointer to data buffer - * @param[in] pEnd Pointer to end of buffer - * @return Pointer to next space - */ -template <class Char_T> -inline Char_T getNextWord(Char_T pBuffer, Char_T pEnd) { - while (!isEndOfBuffer(pBuffer, pEnd)) { - if (!IsSpaceOrNewLine(*pBuffer) || IsLineEnd(*pBuffer)) { - break; - } - ++pBuffer; - } - - return pBuffer; -} - -/** - * @brief Returns pointer a next token - * @param[in] pBuffer Pointer to data buffer - * @param[in] pEnd Pointer to end of buffer - * @return Pointer to next token - */ -template <class Char_T> -inline Char_T getNextToken(Char_T pBuffer, Char_T pEnd) { - while (!isEndOfBuffer(pBuffer, pEnd)) { - if (IsSpaceOrNewLine(*pBuffer)) { - break; - } - ++pBuffer; - } - return getNextWord(pBuffer, pEnd); -} - -/** - * @brief Skips a line - * @param[in] it Iterator set to current position - * @param[in] end Iterator set to end of scratch buffer for readout - * @param[out] uiLine Current line number in format - * @return Current-iterator with new position - */ -template <class char_t> -inline char_t skipLine(char_t it, char_t end, unsigned int &uiLine) { - while (!isEndOfBuffer(it, end) && !IsLineEnd(*it)) { - ++it; - } - - if (it != end) { - ++it; - ++uiLine; - } - // fix .. from time to time there are spaces at the beginning of a material line - while (it != end && (*it == '\t' || *it == ' ')) { - ++it; - } - - return it; -} - -/** - * @brief Get a name from the current line. Preserve space in the middle, - * but trim it at the end. - * @param[in] it set to current position - * @param[in] end set to end of scratch buffer for readout - * @param[out] name Separated name - * @return Current-iterator with new position - */ -template <class char_t> -inline char_t getName(char_t it, char_t end, std::string &name) { - name = ""; - if (isEndOfBuffer(it, end)) { - return end; - } - - char *pStart = &(*it); - while (!isEndOfBuffer(it, end) && !IsLineEnd(*it)) { - ++it; - } - - while (IsSpace(*it)) { - --it; - } - // Get name - // if there is no name, and the previous char is a separator, come back to start - while (&(*it) < pStart) { - ++it; - } - std::string strName(pStart, &(*it)); - if (!strName.empty()) { - name = strName; - } - - - return it; -} - -/** - * @brief Get a name from the current line. Do not preserve space - * in the middle, but trim it at the end. - * @param it set to current position - * @param end set to end of scratch buffer for readout - * @param name Separated name - * @return Current-iterator with new position - */ -template <class char_t> -inline char_t getNameNoSpace(char_t it, char_t end, std::string &name) { - name = ""; - if (isEndOfBuffer(it, end)) { - return end; - } - - char *pStart = &(*it); - while (!isEndOfBuffer(it, end) && !IsLineEnd(*it) && !IsSpaceOrNewLine(*it)) { - ++it; - } - - while (isEndOfBuffer(it, end) || IsLineEnd(*it) || IsSpaceOrNewLine(*it)) { - --it; - } - ++it; - - // Get name - // if there is no name, and the previous char is a separator, come back to start - while (&(*it) < pStart) { - ++it; - } - std::string strName(pStart, &(*it)); - if (!strName.empty()) { - name = strName; - } - - return it; -} - -/** - * @brief Get next word from given line - * @param[in] it set to current position - * @param[in] end set to end of scratch buffer for readout - * @param[in] pBuffer Buffer for next word - * @param[in] length Buffer length - * @return Current-iterator with new position - */ -template <class char_t> -inline char_t CopyNextWord(char_t it, char_t end, char *pBuffer, size_t length) { - size_t index = 0; - it = getNextWord<char_t>(it, end); - while (!IsSpaceOrNewLine(*it) && !isEndOfBuffer(it, end)) { - pBuffer[index] = *it; - ++index; - if (index == length - 1) { - break; - } - ++it; - } - pBuffer[index] = '\0'; - return it; -} - -/** - * @brief Get next float from given line - * @param[in] it set to current position - * @param[in] end set to end of scratch buffer for readout - * @param[out] value Separated float value. - * @return Current-iterator with new position - */ -template <class char_t> -inline char_t getFloat(char_t it, char_t end, ai_real &value) { - static const size_t BUFFERSIZE = 1024; - char buffer[BUFFERSIZE]; - it = CopyNextWord<char_t>(it, end, buffer, BUFFERSIZE); - value = (ai_real)fast_atof(buffer); - - return it; -} - -/** - * @brief Will remove white-spaces for a string. - * @param[in] str The string to clean - * @return The trimmed string. - */ -template <class string_type> -inline string_type trim_whitespaces(string_type str) { - while (!str.empty() && IsSpace(str[0])) { - str.erase(0); - } - while (!str.empty() && IsSpace(str[str.length() - 1])) { - str.erase(str.length() - 1); - } - return str; -} - -/** - * @brief Checks for a line-end. - * @param[in] it Current iterator in string. - * @param[in] end End of the string. - * @return The trimmed string. - */ -template <class T> -bool hasLineEnd(T it, T end) { - bool hasLineEnd = false; - while (!isEndOfBuffer(it, end)) { - ++it; - if (IsLineEnd(it)) { - hasLineEnd = true; - break; - } - } - - return hasLineEnd; -} - -} // Namespace Assimp - -#endif // OBJ_TOOLS_H_INC |