Antkeeper  0.0.1
text-file.cpp
Go to the documentation of this file.
1 /*
2  * Copyright (C) 2023 Christopher J. Howard
3  *
4  * This file is part of Antkeeper source code.
5  *
6  * Antkeeper source code is free software: you can redistribute it and/or modify
7  * it under the terms of the GNU General Public License as published by
8  * the Free Software Foundation, either version 3 of the License, or
9  * (at your option) any later version.
10  *
11  * Antkeeper source code is distributed in the hope that it will be useful,
12  * but WITHOUT ANY WARRANTY; without even the implied warranty of
13  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14  * GNU General Public License for more details.
15  *
16  * You should have received a copy of the GNU General Public License
17  * along with Antkeeper source code. If not, see <http://www.gnu.org/licenses/>.
18  */
19 
23 
32 template <>
34 {
35  file.lines.resize(1);
36  std::string* line = &file.lines.front();
37  line->clear();
38 
39  char c;
40  while (ctx.read8(reinterpret_cast<std::byte*>(&c), 1) == 1)
41  {
42  if (c == '\n')
43  {
44  line = &file.lines.emplace_back(std::string());
45  }
46  else if (c != '\r')
47  {
48  line->append(1, c);
49  }
50  }
51 
52  if (line->empty())
53  {
54  file.lines.pop_back();
55  }
56 }
57 
58 template <>
60 {
61  auto resource = std::make_unique<text_file>();
62 
63  deserializer<text_file>().deserialize(*resource, ctx);
64 
65  return resource;
66 }
static std::unique_ptr< T > load(::resource_manager &resource_manager, deserialize_context &ctx)
Loads a resource.
Manages the loading, caching, and saving of resources.
hyperplane< T, 2 > line
2-dimensional hyperplane.
Definition: line.hpp:34
Provides access to a deserialization state.
virtual std::size_t read8(std::byte *data, std::size_t count) noexcept(false)=0
Reads 8-bit (byte) data.
Specializations of deserializer define the deserialization process for a given type.
void deserialize(T &value, deserialize_context &ctx)
Deserializes a value.
Virtual text file.
Definition: text-file.hpp:30
std::vector< std::string > lines
Text file lines.
Definition: text-file.hpp:32