about summary refs log tree commit diff stats
path: root/tools/util/identifiers.h
blob: 341dee15c242060ebf1772d68260e8c8895b7ed2 (plain) (blame)
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
pre { line-height: 125%; }
td.linenos .normal { color: inherit; background-color: transparent; padding-left: 5px; padding-right: 5px; }
span.linenos { color: inherit; background-color: transparent; padding-left: 5px; padding-right: 5px; }
td.linenos .special { color: #000000; background-color: #ffffc0; padding-left: 5px; padding-right: 5px; }
span.linenos.special { color: #000000; background-color: #ffffc0; padding-left: 5px; padding-right: 5px; }
.highlight .hll { background-color: #ffffcc }
.highlight .c { color: #888888 } /* Comment */
.highlight .err { color: #a61717; background-color: #e3d2d2 } /* Error */
.highlight .k { color: #008800; font-weight: bold } /* Keyword */
.highlight .ch { color: #888888 } /* Comment.Hashbang */
.highlight .cm { color: #888888 } /* Comment.Multiline */
.highlight .cp { color: #cc0000; font-weight: bold } /* Comment.Preproc */
.highlight .cpf { color: #888888 } /* Comment.PreprocFile */
.highlight .c1 { color: #888888 } /* Comment.Single */
.highlight .cs { color: #cc0000; font-weight: bold; background-color: #fff0f0 } /* Comment.Special */
.highlight .gd { color: #000000; background-color: #ffdddd } /* Generic.Deleted */
.highlight .ge { font-style: italic } /* Generic.Emph */
.highlight .ges { font-weight: bold; font-style: italic } /* Generic.EmphStrong */
.highlight .gr { color: #aa0000 } /* Generic.Error */
.highlight .gh { color: #333333 } /* Generic.Heading */
.highlight .gi { color: #000000; background-color: #ddffdd } /* Generic.Inserted */
.highlight .go { color: #888888 } /* Generic.Output */
.highlight .gp { color: #555555 } /* Generic.Prompt */
.highlight .gs { font-weight: bold } /* Generic.Strong */
.highlight .gu { color: #666666 } /* Generic.Subheading */
.highlight .gt { color: #aa0000 } /* Generic.Traceback */
.highlight .kc { color: #008800; font-weight: bold } /* Keyword.Constant */
#ifndef TOOLS_UTIL_IDENTIFIERS_H_
#define TOOLS_UTIL_IDENTIFIERS_H_

#include <optional>
#include <string>
#include <utility>

#include "proto/human.pb.h"

namespace com::fourisland::lingo2_archipelago {

class RoomIdentifierLess {
 public:
  bool operator()(const RoomIdentifier& lhs, const RoomIdentifier& rhs) const {
    return std::tie(lhs.map(), lhs.name()) < std::tie(rhs.map(), rhs.name());
  }
};

class DoorIdentifierLess {
 public:
  bool operator()(const DoorIdentifier& lhs, const DoorIdentifier& rhs) const {
    return std::tie(lhs.map(), lhs.name()) < std::tie(rhs.map(), rhs.name());
  }
};

class PortIdentifierLess {
 public:
  bool operator()(const PortIdentifier& lhs, const PortIdentifier& rhs) const {
    return std::tie(lhs.map(), lhs.room(), lhs.name()) <
           std::tie(rhs.map(), rhs.room(), rhs.name());
  }
};

class PaintingIdentifierLess {
 public:
  bool operator()(const PaintingIdentifier& lhs,
                  const PaintingIdentifier& rhs) const {
    return std::tie(lhs.map(), lhs.room(), lhs.name()) <
           std::tie(rhs.map(), rhs.room(), rhs.name());
  }
};

class PanelIdentifierLess {
 public:
  bool operator()(const PanelIdentifier& lhs,
                  const PanelIdentifier& rhs) const {
    return std::tie(lhs.map(), lhs.room(), lhs.name(), lhs.answer()) <
           std::tie(rhs.map(), rhs.room(), rhs.name(), rhs.answer());
  }
};

class KeyholderIdentifierLess {
 public:
  bool operator()(const KeyholderIdentifier& lhs,
                  const KeyholderIdentifier& rhs) const {
    return std::tie(lhs.map(), lhs.room(), lhs.name(), lhs.key()) <
           std::tie(rhs.map(), rhs.room(), rhs.name(), rhs.key());
  }
};

std::optional<RoomIdentifier> GetCompleteRoomIdentifier(
    RoomIdentifier identifier, std::optional<std::string> map_name);

std::optional<DoorIdentifier> GetCompleteDoorIdentifier(
    DoorIdentifier identifier, std::optional<std::string> map_name);

std::optional<PortIdentifier> GetCompletePortIdentifier(
    PortIdentifier identifier, std::optional<std::string> map_name,
    std::optional<std::string> room_name);

std::optional<PaintingIdentifier> GetCompletePaintingIdentifier(
    PaintingIdentifier identifier, std::optional<std::string> map_name,
    std::optional<std::string> room_name);

std::optional<PanelIdentifier> GetCompletePanelIdentifierWithoutAnswer(
    PanelIdentifier identifier, std::optional<std::string> map_name,
    std::optional<std::string> room_name);

std::optional<KeyholderIdentifier> GetCompleteKeyholderIdentifierWithoutKey(
    KeyholderIdentifier identifier, const std::string& map_name,
    std::optional<std::string> room_name);

}  // namespace com::fourisland::lingo2_archipelago

#endif /* TOOLS_UTIL_IDENTIFIERS_H_ */