gstream.h 1.99 KB
Newer Older
1 2 3
#ifndef GSTREAM_INCLUDED
#define GSTREAM_INCLUDED

unknown's avatar
unknown committed
4
/* Copyright (C) 2000-2004 MySQL AB
5 6 7

   This program is free software; you can redistribute it and/or modify
   it under the terms of the GNU General Public License as published by
unknown's avatar
unknown committed
8
   the Free Software Foundation; version 2 of the License.
9 10 11 12 13 14 15 16 17

   This program is distributed in the hope that it will be useful,
   but WITHOUT ANY WARRANTY; without even the implied warranty of
   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
   GNU General Public License for more details.

   You should have received a copy of the GNU General Public License
   along with this program; if not, write to the Free Software
   Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA */
unknown's avatar
unknown committed
18 19


unknown's avatar
unknown committed
20
class Gis_read_stream
unknown's avatar
unknown committed
21 22
{
public:
unknown's avatar
unknown committed
23
  enum enum_tok_types
unknown's avatar
unknown committed
24 25 26 27 28 29 30
  {
    unknown,
    eostream,
    word,
    numeric,
    l_bra,
    r_bra,
unknown's avatar
unknown committed
31
    comma
unknown's avatar
unknown committed
32
  };
33

unknown's avatar
unknown committed
34 35
  Gis_read_stream(CHARSET_INFO *charset, const char *buffer, int size)
    :m_cur(buffer), m_limit(buffer + size), m_err_msg(NULL), m_charset(charset)
36
  {}
unknown's avatar
unknown committed
37
  Gis_read_stream(): m_cur(NullS), m_limit(NullS), m_err_msg(NullS)
38
  {}
unknown's avatar
unknown committed
39
  ~Gis_read_stream()
unknown's avatar
unknown committed
40
  {
41
    my_free((uchar*) m_err_msg, MYF(MY_ALLOW_ZERO_PTR));
unknown's avatar
unknown committed
42 43
  }

unknown's avatar
unknown committed
44 45 46 47
  enum enum_tok_types get_next_toc_type();
  bool get_next_word(LEX_STRING *);
  bool get_next_number(double *);
  bool check_next_symbol(char);
unknown's avatar
unknown committed
48

unknown's avatar
unknown committed
49
  inline void skip_space()
unknown's avatar
unknown committed
50
  {
unknown's avatar
unknown committed
51
    while ((m_cur < m_limit) && my_isspace(&my_charset_latin1, *m_cur))
unknown's avatar
unknown committed
52 53 54 55 56 57
      m_cur++;
  }
  /* Skip next character, if match. Return 1 if no match */
  inline bool skip_char(char skip)
  {
    skip_space();
unknown's avatar
unknown committed
58
    if ((m_cur >= m_limit) || *m_cur != skip)
unknown's avatar
unknown committed
59 60 61
      return 1;					/* Didn't find char */
    m_cur++;
    return 0;
unknown's avatar
unknown committed
62 63 64
  }
  void set_error_msg(const char *msg);

65
  // caller should free this pointer
unknown's avatar
unknown committed
66 67 68
  char *get_error_msg()
  {
    char *err_msg = m_err_msg;
unknown's avatar
unknown committed
69
    m_err_msg= NullS;
unknown's avatar
unknown committed
70 71
    return err_msg;
  }
72

unknown's avatar
unknown committed
73 74 75 76
protected:
  const char *m_cur;
  const char *m_limit;
  char *m_err_msg;
unknown's avatar
unknown committed
77
  CHARSET_INFO *m_charset;
unknown's avatar
unknown committed
78
};
79 80

#endif /* GSTREAM_INCLUDED */