llstreamtools.h
上传用户:king477883
上传日期:2021-03-01
资源大小:9553k
文件大小:5k
源码类别:

游戏引擎

开发平台:

C++ Builder

  1. /** 
  2.  * @file llstreamtools.h
  3.  * @brief some helper functions for parsing legacy simstate and asset files.
  4.  *
  5.  * $LicenseInfo:firstyear=2005&license=viewergpl$
  6.  * 
  7.  * Copyright (c) 2005-2010, Linden Research, Inc.
  8.  * 
  9.  * Second Life Viewer Source Code
  10.  * The source code in this file ("Source Code") is provided by Linden Lab
  11.  * to you under the terms of the GNU General Public License, version 2.0
  12.  * ("GPL"), unless you have obtained a separate licensing agreement
  13.  * ("Other License"), formally executed by you and Linden Lab.  Terms of
  14.  * the GPL can be found in doc/GPL-license.txt in this distribution, or
  15.  * online at http://secondlifegrid.net/programs/open_source/licensing/gplv2
  16.  * 
  17.  * There are special exceptions to the terms and conditions of the GPL as
  18.  * it is applied to this Source Code. View the full text of the exception
  19.  * in the file doc/FLOSS-exception.txt in this software distribution, or
  20.  * online at
  21.  * http://secondlifegrid.net/programs/open_source/licensing/flossexception
  22.  * 
  23.  * By copying, modifying or distributing this software, you acknowledge
  24.  * that you have read and understood your obligations described above,
  25.  * and agree to abide by those obligations.
  26.  * 
  27.  * ALL LINDEN LAB SOURCE CODE IS PROVIDED "AS IS." LINDEN LAB MAKES NO
  28.  * WARRANTIES, EXPRESS, IMPLIED OR OTHERWISE, REGARDING ITS ACCURACY,
  29.  * COMPLETENESS OR PERFORMANCE.
  30.  * $/LicenseInfo$
  31.  */
  32. #ifndef LL_STREAM_TOOLS_H
  33. #define LL_STREAM_TOOLS_H
  34. #include <iostream>
  35. #include <string>
  36. // unless specifed otherwise these all return input_stream.good()
  37. // skips spaces and tabs
  38. LL_COMMON_API bool skip_whitespace(std::istream& input_stream);
  39. // skips whitespace and newlines
  40. LL_COMMON_API bool skip_emptyspace(std::istream& input_stream);
  41. // skips emptyspace and lines that start with a #
  42. LL_COMMON_API bool skip_comments_and_emptyspace(std::istream& input_stream);
  43. // skips to character after next newline
  44. LL_COMMON_API bool skip_line(std::istream& input_stream);
  45. // skips to beginning of next non-emptyspace
  46. LL_COMMON_API bool skip_to_next_word(std::istream& input_stream);
  47. // skips to character after the end of next keyword 
  48. // a 'keyword' is defined as the first word on a line
  49. LL_COMMON_API bool skip_to_end_of_next_keyword(const char* keyword, std::istream& input_stream);
  50. // skip_to_start_of_next_keyword() is disabled -- might tickle corruption bug 
  51. // in windows iostream
  52. // skips to beginning of next keyword
  53. // a 'keyword' is defined as the first word on a line
  54. //bool skip_to_start_of_next_keyword(const char* keyword, std::istream& input_stream);
  55. // characters are pulled out of input_stream and appended to output_string
  56. // returns result of input_stream.good() after characters are pulled
  57. LL_COMMON_API bool get_word(std::string& output_string, std::istream& input_stream);
  58. LL_COMMON_API bool get_line(std::string& output_string, std::istream& input_stream);
  59. // characters are pulled out of input_stream (up to a max of 'n')
  60. // and appended to output_string 
  61. // returns result of input_stream.good() after characters are pulled
  62. LL_COMMON_API bool get_word(std::string& output_string, std::istream& input_stream, int n);
  63. LL_COMMON_API bool get_line(std::string& output_string, std::istream& input_stream, int n);
  64. // unget_line() is disabled -- might tickle corruption bug in windows iostream
  65. //// backs up the input_stream by line_size + 1 characters
  66. //bool unget_line(const std::string& line, std::istream& input_stream);
  67. // TODO -- move these string manipulator functions to a different file
  68. // removes the last char in 'line' if it matches 'c'
  69. // returns true if removed last char
  70. LL_COMMON_API bool remove_last_char(char c, std::string& line);
  71. // replaces escaped characters with the correct characters from left to right
  72. // "\" ---> '\' 
  73. // "n" ---> 'n' 
  74. LL_COMMON_API void unescape_string(std::string& line);
  75. // replaces unescaped characters with expanded equivalents from left to right
  76. // '\' ---> "\" 
  77. // 'n' ---> "n" 
  78. LL_COMMON_API void escape_string(std::string& line);
  79. // replaces each 'n' character with ' '
  80. LL_COMMON_API void replace_newlines_with_whitespace(std::string& line);
  81. // erases any double-quote characters in line
  82. LL_COMMON_API void remove_double_quotes(std::string& line);
  83. // the 'keyword' is defined as the first word on a line
  84. // the 'value' is everything after the keyword on the same line
  85. // starting at the first non-whitespace and ending right before the newline
  86. LL_COMMON_API void get_keyword_and_value(std::string& keyword, 
  87.    std::string& value, 
  88.    const std::string& line);
  89. // continue to read from the stream until you really can't
  90. // read anymore or until we hit the count.  Some istream
  91. // implimentations have a max that they will read.
  92. // Returns the number of bytes read.
  93. LL_COMMON_API std::streamsize fullread(
  94. std::istream& istr,
  95. char* buf,
  96. std::streamsize requested);
  97. LL_COMMON_API std::istream& operator>>(std::istream& str, const char *tocheck);
  98. #endif