aboutsummaryrefslogtreecommitdiff
path: root/libbuild2/name.ixx
blob: 188126eaf31aa4a9915f3fe150f79f35f9881945 (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
// file      : libbuild2/name.ixx -*- C++ -*-
// copyright : Copyright (c) 2014-2019 Code Synthesis Ltd
// license   : MIT; see accompanying LICENSE file

namespace build2
{
  inline int name::
  compare (const name& x) const
  {
    int r (proj < x.proj ? -1 : (proj > x.proj ? 1 : 0));

    if (r == 0)
      r = dir.compare (x.dir);

    if (r == 0)
      r = type.compare (x.type);

    if (r == 0)
      r = value.compare (x.value);

    if (r == 0)
      r = pair < x.pair ? -1 : (pair > x.pair ? 1 : 0);

    return r;
  }

  inline name
  to_name (string s)
  {
    if (!s.empty () && path::traits_type::is_separator (s.back ()))
    {
      dir_path d (move (s), dir_path::exact);

      if (!d.empty ())
        return name (move (d));
    }

    return name (move (s));
  }
}