gstream.h
上传用户:romrleung
上传日期:2022-05-23
资源大小:18897k
文件大小:2k
源码类别:

MySQL数据库

开发平台:

Visual C++

  1. /* Copyright (C) 2000 MySQL AB & MySQL Finland AB & TCX DataKonsult AB
  2.    This program is free software; you can redistribute it and/or modify
  3.    it under the terms of the GNU General Public License as published by
  4.    the Free Software Foundation; either version 2 of the License, or
  5.    (at your option) any later version.
  6.    This program is distributed in the hope that it will be useful,
  7.    but WITHOUT ANY WARRANTY; without even the implied warranty of
  8.    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  9.    GNU General Public License for more details.
  10.    You should have received a copy of the GNU General Public License
  11.    along with this program; if not, write to the Free Software
  12.    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA */
  13. class Gis_read_stream
  14. {
  15. public:
  16.   enum enum_tok_types
  17.   {
  18.     unknown,
  19.     eostream,
  20.     word,
  21.     numeric,
  22.     l_bra,
  23.     r_bra,
  24.     comma
  25.   };
  26.   Gis_read_stream(CHARSET_INFO *charset, const char *buffer, int size)
  27.     :m_cur(buffer), m_limit(buffer + size), m_err_msg(NULL), m_charset(charset)
  28.   {}
  29.   Gis_read_stream(): m_cur(NullS), m_limit(NullS), m_err_msg(NullS)
  30.   {}
  31.   ~Gis_read_stream()
  32.   {
  33.     my_free(m_err_msg, MYF(MY_ALLOW_ZERO_PTR));
  34.   }
  35.   enum enum_tok_types get_next_toc_type();
  36.   bool get_next_word(LEX_STRING *);
  37.   bool get_next_number(double *);
  38.   bool check_next_symbol(char);
  39.   inline void skip_space()
  40.   {
  41.     while ((m_cur < m_limit) && my_isspace(&my_charset_latin1, *m_cur))
  42.       m_cur++;
  43.   }
  44.   /* Skip next character, if match. Return 1 if no match */
  45.   inline bool skip_char(char skip)
  46.   {
  47.     skip_space();
  48.     if ((m_cur >= m_limit) || *m_cur != skip)
  49.       return 1; /* Didn't find char */
  50.     m_cur++;
  51.     return 0;
  52.   }
  53.   void set_error_msg(const char *msg);
  54.   // caller should free this pointer
  55.   char *get_error_msg()
  56.   {
  57.     char *err_msg = m_err_msg;
  58.     m_err_msg= NullS;
  59.     return err_msg;
  60.   }
  61. protected:
  62.   const char *m_cur;
  63.   const char *m_limit;
  64.   char *m_err_msg;
  65.   CHARSET_INFO *m_charset;
  66. };