summaryrefslogtreecommitdiff
path: root/tiger-compiler/lib/misc/list.hxx
blob: 63d7f0d05100836b63652263f89772000a8c146d (plain)
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
30
31
32
33
34
35
36
37
38
39
40
41
42
43
/**
 ** \file misc/list.hh
 ** \brief Implementation of misc::list
 */

#pragma once

#include <misc/list.hh>

namespace misc::list
{
  template <class T> inline vector<T> cons(const T head, const vector<T>& tail)
  {
    vector<T> res;

    res.emplace_back(head);
    res.append(tail);

    return res;
  }

  template <class T> inline std::pair<T, vector<T>> snoc(const vector<T>& v)
  {
    precondition(v.size() > 0);

    T head = v[0];
    vector<T> tail(v.begin() + 1, v.end());

    return {head, tail};
  }

  template <std::size_t Size_, typename T>
  inline std::array<T, Size_> decompose(const vector<T>& v)
  {
    precondition(v.size() == Size_);

    std::array<T, Size_> res;
    std::copy(v.begin(), v.end(), res.begin());

    return res;
  }

} // namespace misc::list