Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
A
Actor Framework
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Operations
Operations
Metrics
Environments
Analytics
Analytics
CI / CD
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
cpp-libs
Actor Framework
Commits
b5474bbc
Commit
b5474bbc
authored
Jun 22, 2015
by
Dominik Charousset
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Coding style nitpicks and drop exception in ctor
parent
16c48252
Changes
2
Show whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
78 additions
and
121 deletions
+78
-121
libcaf_core/caf/node_id.hpp
libcaf_core/caf/node_id.hpp
+34
-33
libcaf_core/src/node_id.cpp
libcaf_core/src/node_id.cpp
+44
-88
No files found.
libcaf_core/caf/node_id.hpp
View file @
b5474bbc
...
@@ -36,8 +36,9 @@ namespace caf {
...
@@ -36,8 +36,9 @@ namespace caf {
class
serializer
;
class
serializer
;
struct
invalid_node_id_t
{
struct
invalid_node_id_t
{
constexpr
invalid_node_id_t
()
{}
constexpr
invalid_node_id_t
()
{
// nop
}
};
};
/// Identifies an invalid {@link node_id}.
/// Identifies an invalid {@link node_id}.
...
@@ -50,8 +51,12 @@ constexpr invalid_node_id_t invalid_node_id = invalid_node_id_t{};
...
@@ -50,8 +51,12 @@ constexpr invalid_node_id_t invalid_node_id = invalid_node_id_t{};
class
node_id
:
detail
::
comparable
<
node_id
>
,
class
node_id
:
detail
::
comparable
<
node_id
>
,
detail
::
comparable
<
node_id
,
invalid_node_id_t
>
{
detail
::
comparable
<
node_id
,
invalid_node_id_t
>
{
public:
public:
~
node_id
();
node_id
()
=
default
;
node_id
()
=
default
;
node_id
(
const
node_id
&
)
=
default
;
node_id
(
const
invalid_node_id_t
&
);
node_id
(
const
invalid_node_id_t
&
);
node_id
&
operator
=
(
const
node_id
&
)
=
default
;
node_id
&
operator
=
(
const
node_id
&
)
=
default
;
...
@@ -64,7 +69,28 @@ public:
...
@@ -64,7 +69,28 @@ public:
/// Represents a 160 bit hash.
/// Represents a 160 bit hash.
using
host_id_type
=
std
::
array
<
uint8_t
,
host_id_size
>
;
using
host_id_type
=
std
::
array
<
uint8_t
,
host_id_size
>
;
/// A reference counted container for host ID and process ID.
/// Creates a node ID from `process_id` and `hash`.
/// @param process_id System-wide unique process identifier.
/// @param hash Unique node id as hexadecimal string representation.
node_id
(
uint32_t
process_id
,
const
std
::
string
&
hash
);
/// Creates a node ID from `process_id` and `hash`.
/// @param process_id System-wide unique process identifier.
/// @param node_id Unique node id.
node_id
(
uint32_t
process_id
,
const
host_id_type
&
node_id
);
/// Identifies the running process.
/// @returns A system-wide unique process identifier.
uint32_t
process_id
()
const
;
/// Identifies the host system.
/// @returns A hash build from the MAC address of the first network device
/// and the UUID of the root partition (mounted in "/" or "C:").
const
host_id_type
&
host_id
()
const
;
/// @cond PRIVATE
// A reference counted container for host ID and process ID.
class
data
:
public
ref_counted
{
class
data
:
public
ref_counted
{
public:
public:
// for singleton API
// for singleton API
...
@@ -84,41 +110,16 @@ public:
...
@@ -84,41 +110,16 @@ public:
int
compare
(
const
node_id
&
other
)
const
;
int
compare
(
const
node_id
&
other
)
const
;
data
()
=
default
;
~
data
();
~
data
();
data
(
uint32_t
procid
,
host_id_type
hid
);
data
(
uint32_t
procid
,
host_id_type
hid
);
uint32_t
process_id
;
data
(
uint32_t
procid
,
const
std
::
string
&
hash
);
host_id_type
host_id
;
};
~
node_id
();
node_id
(
const
node_id
&
);
/// Creates this from `process_id` and `hash`.
/// @param process_id System-wide unique process identifier.
/// @param hash Unique node id as hexadecimal string representation.
node_id
(
uint32_t
process_id
,
const
std
::
string
&
hash
);
/// Creates this from `process_id` and `hash`.
/// @param process_id System-wide unique process identifier.
/// @param node_id Unique node id.
node_id
(
uint32_t
process_id
,
const
host_id_type
&
node_id
);
/// Identifies the running process.
/// @returns A system-wide unique process identifier.
uint32_t
process_id
()
const
;
/// Identifies the host system.
uint32_t
pid_
;
/// @returns A hash build from the MAC address of the first network device
/// and the UUID of the root partition (mounted in "/" or "C:").
const
host_id_type
&
host_id
()
const
;
/// @cond PRIVATE
host_id_type
host_
;
};
// "inherited" from comparable<node_id>
// "inherited" from comparable<node_id>
int
compare
(
const
node_id
&
other
)
const
;
int
compare
(
const
node_id
&
other
)
const
;
...
@@ -126,7 +127,7 @@ public:
...
@@ -126,7 +127,7 @@ public:
// "inherited" from comparable<node_id, invalid_node_id_t>
// "inherited" from comparable<node_id, invalid_node_id_t>
int
compare
(
const
invalid_node_id_t
&
)
const
;
int
compare
(
const
invalid_node_id_t
&
)
const
;
node_id
(
intrusive_ptr
<
data
>
dataptr
);
explicit
node_id
(
intrusive_ptr
<
data
>
dataptr
);
/// @endcond
/// @endcond
...
...
libcaf_core/src/node_id.cpp
View file @
b5474bbc
...
@@ -31,7 +31,6 @@
...
@@ -31,7 +31,6 @@
#include "caf/detail/logging.hpp"
#include "caf/detail/logging.hpp"
#include "caf/detail/singletons.hpp"
#include "caf/detail/singletons.hpp"
#include "caf/detail/ripemd_160.hpp"
#include "caf/detail/ripemd_160.hpp"
#include "caf/detail/safe_equal.hpp"
#include "caf/detail/get_root_uuid.hpp"
#include "caf/detail/get_root_uuid.hpp"
#include "caf/detail/get_process_id.hpp"
#include "caf/detail/get_process_id.hpp"
#include "caf/detail/get_mac_addresses.hpp"
#include "caf/detail/get_mac_addresses.hpp"
...
@@ -40,64 +39,12 @@ namespace caf {
...
@@ -40,64 +39,12 @@ namespace caf {
namespace
{
namespace
{
uint32_t
s_
invalid_process_id
=
0
;
uint32_t
invalid_process_id
=
0
;
node_id
::
host_id_type
s_invalid_host_id
;
node_id
::
host_id_type
invalid_host_id
;
uint8_t
hex_char_value
(
char
c
)
{
if
(
isdigit
(
c
))
{
return
static_cast
<
uint8_t
>
(
c
-
'0'
);
}
if
(
isalpha
(
c
))
{
if
(
c
>=
'a'
&&
c
<=
'f'
)
{
return
static_cast
<
uint8_t
>
((
c
-
'a'
)
+
10
);
}
else
if
(
c
>=
'A'
&&
c
<=
'F'
)
{
return
static_cast
<
uint8_t
>
((
c
-
'A'
)
+
10
);
}
}
throw
std
::
invalid_argument
(
std
::
string
(
"illegal character: "
)
+
c
);
}
void
host_id_from_string
(
const
std
::
string
&
hash
,
node_id
::
host_id_type
&
node_id
)
{
if
(
hash
.
size
()
!=
(
node_id
.
size
()
*
2
))
{
throw
std
::
invalid_argument
(
"string argument is not a node id hash"
);
}
auto
j
=
hash
.
c_str
();
for
(
size_t
i
=
0
;
i
<
node_id
.
size
();
++
i
)
{
// read two characters, each representing 4 bytes
auto
&
val
=
node_id
[
i
];
val
=
static_cast
<
uint8_t
>
(
hex_char_value
(
j
[
0
])
<<
4
)
|
hex_char_value
(
j
[
1
]);
j
+=
2
;
}
}
}
// namespace <anonymous>
}
// namespace <anonymous>
bool
equal
(
const
std
::
string
&
hash
,
const
node_id
::
host_id_type
&
node_id
)
{
if
(
hash
.
size
()
!=
(
node_id
.
size
()
*
2
))
{
return
false
;
}
auto
j
=
hash
.
c_str
();
try
{
for
(
size_t
i
=
0
;
i
<
node_id
.
size
();
++
i
)
{
// read two characters, each representing 4 bytes
uint8_t
val
;
val
=
static_cast
<
uint8_t
>
(
hex_char_value
(
j
[
0
])
<<
4
)
|
hex_char_value
(
j
[
1
]);
j
+=
2
;
if
(
val
!=
node_id
[
i
])
{
return
false
;
}
}
}
catch
(
std
::
invalid_argument
&
)
{
return
false
;
}
return
true
;
}
node_id
::~
node_id
()
{
node_id
::~
node_id
()
{
// nop
// nop
}
}
...
@@ -106,22 +53,22 @@ node_id::node_id(const invalid_node_id_t&) {
...
@@ -106,22 +53,22 @@ node_id::node_id(const invalid_node_id_t&) {
// nop
// nop
}
}
node_id
::
node_id
(
const
node_id
&
other
)
:
data_
(
other
.
data_
)
{
node_id
&
node_id
::
operator
=
(
const
invalid_node_id_t
&
)
{
// nop
data_
.
reset
();
return
*
this
;
}
}
node_id
::
node_id
(
intrusive_ptr
<
data
>
dataptr
)
:
data_
(
std
::
move
(
dataptr
))
{
node_id
::
node_id
(
intrusive_ptr
<
data
>
dataptr
)
:
data_
(
std
::
move
(
dataptr
))
{
// nop
// nop
}
}
node_id
::
node_id
(
uint32_t
procid
,
const
std
::
string
&
b
)
{
node_id
::
node_id
(
uint32_t
procid
,
const
std
::
string
&
hash
)
data_
=
make_counted
<
data
>
();
:
data_
(
make_counted
<
data
>
(
procid
,
hash
))
{
data_
->
process_id
=
procid
;
// nop
host_id_from_string
(
b
,
data_
->
host_id
);
}
}
node_id
::
node_id
(
uint32_t
a
,
const
host_id_type
&
b
)
node_id
::
node_id
(
uint32_t
procid
,
const
host_id_type
&
host_id
)
:
data_
(
make_counted
<
data
>
(
a
,
b
))
{
:
data_
(
make_counted
<
data
>
(
procid
,
host_id
))
{
// nop
// nop
}
}
...
@@ -130,34 +77,48 @@ int node_id::compare(const invalid_node_id_t&) const {
...
@@ -130,34 +77,48 @@ int node_id::compare(const invalid_node_id_t&) const {
}
}
int
node_id
::
compare
(
const
node_id
&
other
)
const
{
int
node_id
::
compare
(
const
node_id
&
other
)
const
{
if
(
this
==
&
other
)
{
if
(
this
==
&
other
||
data_
==
other
.
data_
)
return
0
;
// shortcut for comparing to self
return
0
;
// shortcut for comparing to self or identical instances
}
if
(
!
data_
!=
!
other
.
data_
)
if
(
data_
==
other
.
data_
)
{
return
0
;
// shortcut for identical instances
}
if
((
data_
!=
nullptr
)
!=
(
other
.
data_
!=
nullptr
))
{
return
data_
?
1
:
-
1
;
// invalid instances are always smaller
return
data_
?
1
:
-
1
;
// invalid instances are always smaller
}
int
tmp
=
strncmp
(
reinterpret_cast
<
const
char
*>
(
host_id
().
data
()),
int
tmp
=
strncmp
(
reinterpret_cast
<
const
char
*>
(
host_id
().
data
()),
reinterpret_cast
<
const
char
*>
(
other
.
host_id
().
data
()),
reinterpret_cast
<
const
char
*>
(
other
.
host_id
().
data
()),
host_id_size
);
host_id_size
);
if
(
tmp
==
0
)
{
return
tmp
!=
0
if
(
process_id
()
<
other
.
process_id
())
{
?
tmp
return
-
1
;
:
(
process_id
()
<
other
.
process_id
()
}
else
if
(
process_id
()
==
other
.
process_id
())
{
?
-
1
return
0
;
:
(
process_id
()
==
other
.
process_id
()
?
0
:
1
));
}
return
1
;
}
return
tmp
;
}
}
node_id
::
data
::
data
(
uint32_t
procid
,
host_id_type
hid
)
node_id
::
data
::
data
(
uint32_t
procid
,
host_id_type
hid
)
:
process_id
(
procid
),
host_id
(
hid
)
{
:
pid_
(
procid
),
host_
(
hid
)
{
// nop
// nop
}
}
node_id
::
data
::
data
(
uint32_t
procid
,
const
std
::
string
&
hash
)
:
pid_
(
procid
)
{
if
(
hash
.
size
()
!=
(
host_id_size
*
2
))
{
host_
=
invalid_host_id
;
return
;
}
auto
hex_value
=
[](
char
c
)
->
uint8_t
{
if
(
isalpha
(
c
))
{
if
(
c
>=
'a'
&&
c
<=
'f'
)
return
static_cast
<
uint8_t
>
((
c
-
'a'
)
+
10
);
if
(
c
>=
'A'
&&
c
<=
'F'
)
return
static_cast
<
uint8_t
>
((
c
-
'A'
)
+
10
);
}
return
isdigit
(
c
)
?
static_cast
<
uint8_t
>
(
c
-
'0'
)
:
0
;
};
auto
j
=
hash
.
c_str
();
for
(
size_t
i
=
0
;
i
<
host_id_size
;
++
i
)
{
// read two characters, each representing 4 bytes
host_
[
i
]
=
static_cast
<
uint8_t
>
(
hex_value
(
j
[
0
])
<<
4
)
|
hex_value
(
j
[
1
]);
j
+=
2
;
}
}
node_id
::
data
::~
data
()
{
node_id
::
data
::~
data
()
{
// nop
// nop
}
}
...
@@ -183,16 +144,11 @@ node_id::data* node_id::data::create_singleton() {
...
@@ -183,16 +144,11 @@ node_id::data* node_id::data::create_singleton() {
}
}
uint32_t
node_id
::
process_id
()
const
{
uint32_t
node_id
::
process_id
()
const
{
return
data_
?
data_
->
p
rocess_id
:
s_
invalid_process_id
;
return
data_
?
data_
->
p
id_
:
invalid_process_id
;
}
}
const
node_id
::
host_id_type
&
node_id
::
host_id
()
const
{
const
node_id
::
host_id_type
&
node_id
::
host_id
()
const
{
return
data_
?
data_
->
host_id
:
s_invalid_host_id
;
return
data_
?
data_
->
host_
:
invalid_host_id
;
}
node_id
&
node_id
::
operator
=
(
const
invalid_node_id_t
&
)
{
data_
.
reset
();
return
*
this
;
}
}
}
// namespace caf
}
// namespace caf
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment