|
- // Copyright 2021 Jean Pierre Cimalando
- //
- // Licensed under the Apache License, Version 2.0 (the "License");
- // you may not use this file except in compliance with the License.
- // You may obtain a copy of the License at
- //
- // http://www.apache.org/licenses/LICENSE-2.0
- //
- // Unless required by applicable law or agreed to in writing, software
- // distributed under the License is distributed on an "AS IS" BASIS,
- // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- // See the License for the specific language governing permissions and
- // limitations under the License.
- //
- // SPDX-License-Identifier: Apache-2.0
- //
-
- #include "ysfx_reader.hpp"
-
- namespace ysfx {
-
- //------------------------------------------------------------------------------
- bool text_reader::read_next_line(std::string &line)
- {
- line.clear();
-
- char next = read_next_char();
- if (next == '\0')
- return false;
-
- while (next != '\0' && next != '\r' && next != '\n') {
- line.push_back(next);
- next = read_next_char();
- }
-
- if (next == '\r') {
- next = peek_next_char();
- if (next == '\n')
- read_next_char();
- }
-
- return true;
- }
-
- //------------------------------------------------------------------------------
- char string_text_reader::read_next_char()
- {
- const char *ptr = m_char_ptr;
-
- if (!ptr || *ptr == '\0')
- return '\0';
-
- char next = *ptr;
- m_char_ptr = ptr + 1;
- return next;
- }
-
- char string_text_reader::peek_next_char()
- {
- const char *ptr = m_char_ptr;
-
- if (!ptr)
- return '\0';
-
- return *ptr;
- }
-
- //------------------------------------------------------------------------------
- char stdio_text_reader::read_next_char()
- {
- FILE *stream = m_stream;
-
- if (!stream)
- return '\0';
-
- int next = fgetc(stream);
- if (next == EOF)
- return '\0';
-
- return (unsigned char)next;
- }
-
- char stdio_text_reader::peek_next_char()
- {
- FILE *stream = m_stream;
-
- if (!stream)
- return '\0';
-
- int next = fgetc(stream);
- if (next == EOF)
- return '\0';
-
- ungetc(next, stream);
- return (unsigned char)next;
- }
-
- } // namespace ysfx
|