Echo Writes Code

boot.cpp

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
#include "crucible/core/boot.hpp"

#include "crucible/core/handlers.hpp"
#include "crucible/core/iterators.hpp"

#include <exception>
#include <type_traits>
#include <utility>

namespace crucible::core
{
  auto boot_from_main(int argc, char **argv, Boot_Function const boot_function) -> int
  {
    std::set_terminate(handle_terminate);

    auto const arguments {
      iterate(argv, argc)
        .map([](char const *argument) {
          return String_View { argument, std::strlen(argument) };
        })
        .template materialize<Heap_Buffer<String_View>>()
    };

    Exit_Status const status { boot_function(arguments.view()) };

    static_assert(std::is_same_v<std::underlying_type_t<Exit_Status>, int>);
    return static_cast<int>(status);
  }
}