Rumba C++ SDK
Token.h
Go to the documentation of this file.
1 /*
2 
3  *
4  ***
5  *****
6  ********************* Mercenaries Engineering SARL
7  ***************** Copyright (C) 2024
8  *************
9  ********* http://www.mercenaries-engineering.com
10  ***********
11  **** ****
12  ** **
13 
14 */
15 
16 #pragma once
17 
18 #include "Export.h"
19 
20 #include<memory>
21 
22 namespace maquina
23 {
24 
26 
33 class Token
34 {
35  friend class TokenManager;
36 public:
37  Token() = delete;
38  Token(Token&&) = delete;
39  Token& operator=(Token&&) = delete;
40 
42  MAQUINA_EXPORT explicit Token(const char* s);
43 
45  Token(const Token& o) : _internal(o._internal) {}
46 
48  Token& operator=(const Token& o) { _internal = o._internal; return *this; };
49 
51  const char* c_str() const { return _internal->c_str; }
52 
54  const std::string& string() const { return *_internal->string; }
55 
57  std::string_view string_view() const { return {_internal->c_str, _internal->size}; }
58 
60  std::size_t size() const { return _internal->size; }
61 
63  std::size_t hash() const { return _internal->hash; }
64 
66  bool operator==(const Token& o) const { return _internal == o._internal; }
67  bool operator!=(const Token& o) const { return _internal != o._internal; }
68  bool operator<(const Token& o) const { return _internal < o._internal; }
69  bool operator<=(const Token& o) const { return _internal <= o._internal; }
70  bool operator>(const Token& o) const { return _internal > o._internal; }
71  bool operator>=(const Token& o) const { return _internal >= o._internal; }
72 private:
73 
74  class _InternalToken
75  {
76  public:
77  _InternalToken(std::unique_ptr<std::string>& s_) : c_str(s_->c_str()), size(s_->size()), string(s_.release()), hash(std::hash<std::string>{}(*string)) {}
78 
79  const char* c_str;
80  std::size_t size;
81  std::unique_ptr<std::string> string;
82  std::size_t hash;
83  };
84 
85  const _InternalToken* _internal;
86 };
87 
88 }
89 
90 // A hash method for tokens
91 template<> struct std::hash<maquina::Token>
92 {
93  std::size_t operator()(const maquina::Token& token) const
94  {
95  return token.hash();
96  }
97 };
std::size_t hash() const
Return a string hash, this is fast.
Definition: Token.h:63
std::size_t size() const
Return the token size, this is fast.
Definition: Token.h:60
Definition: Plug.h:527
bool operator<(const Token &o) const
Definition: Token.h:68
This version of the SDK is unstable, i-e, it may change with no warning.
Definition: AddCurveAction.h:20
Token & operator=(const Token &o)
Copy a token, this is fast.
Definition: Token.h:48
Token(const Token &o)
Copy a token, this is fast.
Definition: Token.h:45
const char * c_str() const
Return a string pointer, this is fast.
Definition: Token.h:51
std::size_t operator()(const maquina::Token &token) const
Definition: Token.h:93
Token & operator=(Token &&)=delete
MAQUINA_EXPORT void release()
When the Rumba Engine is embedded in an application, this function should be called before to leave t...
bool operator>(const Token &o) const
Definition: Token.h:70
#define MAQUINA_EXPORT
Definition: Export.h:31
friend class TokenManager
Definition: Token.h:35
const std::string & string() const
Return a string object, this is fast.
Definition: Token.h:54
std::string_view string_view() const
Return a string_view object, this is fast.
Definition: Token.h:57
Token()=delete
bool operator==(const Token &o) const
Comparisons are fast.
Definition: Token.h:66
bool operator<=(const Token &o) const
Definition: Token.h:69
bool operator>=(const Token &o) const
Definition: Token.h:71
A token is a shared, constant and unique string.
Definition: Token.h:33
bool operator!=(const Token &o) const
Definition: Token.h:67