Cleanup: Use trailing underscore for non-public data members

This makes the code conform better with our style guide.
This commit is contained in:
Jacques Lucke 2020-07-03 14:15:05 +02:00
parent e797c4f28f
commit d64803f63b
26 changed files with 1238 additions and 1241 deletions

View File

@ -45,9 +45,9 @@ class DerivedNodeTree;
class DSocket : NonCopyable, NonMovable {
protected:
DNode *m_node;
const SocketRef *m_socket_ref;
uint m_id;
DNode *node_;
const SocketRef *socket_ref_;
uint id_;
friend DerivedNodeTree;
@ -76,8 +76,8 @@ class DSocket : NonCopyable, NonMovable {
class DInputSocket : public DSocket {
private:
Vector<DOutputSocket *> m_linked_sockets;
Vector<DGroupInput *> m_linked_group_inputs;
Vector<DOutputSocket *> linked_sockets_;
Vector<DGroupInput *> linked_group_inputs_;
friend DerivedNodeTree;
@ -92,7 +92,7 @@ class DInputSocket : public DSocket {
class DOutputSocket : public DSocket {
private:
Vector<DInputSocket *> m_linked_sockets;
Vector<DInputSocket *> linked_sockets_;
friend DerivedNodeTree;
@ -103,10 +103,10 @@ class DOutputSocket : public DSocket {
class DGroupInput : NonCopyable, NonMovable {
private:
const InputSocketRef *m_socket_ref;
DParentNode *m_parent;
Vector<DInputSocket *> m_linked_sockets;
uint m_id;
const InputSocketRef *socket_ref_;
DParentNode *parent_;
Vector<DInputSocket *> linked_sockets_;
uint id_;
friend DerivedNodeTree;
@ -121,13 +121,13 @@ class DGroupInput : NonCopyable, NonMovable {
class DNode : NonCopyable, NonMovable {
private:
const NodeRef *m_node_ref;
DParentNode *m_parent;
const NodeRef *node_ref_;
DParentNode *parent_;
Span<DInputSocket *> m_inputs;
Span<DOutputSocket *> m_outputs;
Span<DInputSocket *> inputs_;
Span<DOutputSocket *> outputs_;
uint m_id;
uint id_;
friend DerivedNodeTree;
@ -153,9 +153,9 @@ class DNode : NonCopyable, NonMovable {
class DParentNode : NonCopyable, NonMovable {
private:
const NodeRef *m_node_ref;
DParentNode *m_parent;
uint m_id;
const NodeRef *node_ref_;
DParentNode *parent_;
uint id_;
friend DerivedNodeTree;
@ -169,17 +169,17 @@ using NodeTreeRefMap = Map<bNodeTree *, std::unique_ptr<const NodeTreeRef>>;
class DerivedNodeTree : NonCopyable, NonMovable {
private:
LinearAllocator<> m_allocator;
bNodeTree *m_btree;
Vector<DNode *> m_nodes_by_id;
Vector<DGroupInput *> m_group_inputs;
Vector<DParentNode *> m_parent_nodes;
LinearAllocator<> allocator_;
bNodeTree *btree_;
Vector<DNode *> nodes_by_id_;
Vector<DGroupInput *> group_inputs_;
Vector<DParentNode *> parent_nodes_;
Vector<DSocket *> m_sockets_by_id;
Vector<DInputSocket *> m_input_sockets;
Vector<DOutputSocket *> m_output_sockets;
Vector<DSocket *> sockets_by_id_;
Vector<DInputSocket *> input_sockets_;
Vector<DOutputSocket *> output_sockets_;
Map<const bNodeType *, Vector<DNode *>> m_nodes_by_type;
Map<const bNodeType *, Vector<DNode *>> nodes_by_type_;
public:
DerivedNodeTree(bNodeTree *btree, NodeTreeRefMap &node_tree_refs);
@ -235,27 +235,27 @@ class DerivedNodeTree : NonCopyable, NonMovable {
inline const DNode &DSocket::node() const
{
return *m_node;
return *node_;
}
inline uint DSocket::id() const
{
return m_id;
return id_;
}
inline uint DSocket::index() const
{
return m_socket_ref->index();
return socket_ref_->index();
}
inline bool DSocket::is_input() const
{
return m_socket_ref->is_input();
return socket_ref_->is_input();
}
inline bool DSocket::is_output() const
{
return m_socket_ref->is_output();
return socket_ref_->is_output();
}
inline const DSocket &DSocket::as_base() const
@ -275,32 +275,32 @@ inline const DOutputSocket &DSocket::as_output() const
inline PointerRNA *DSocket::rna() const
{
return m_socket_ref->rna();
return socket_ref_->rna();
}
inline StringRefNull DSocket::idname() const
{
return m_socket_ref->idname();
return socket_ref_->idname();
}
inline StringRefNull DSocket::name() const
{
return m_socket_ref->name();
return socket_ref_->name();
}
inline const SocketRef &DSocket::socket_ref() const
{
return *m_socket_ref;
return *socket_ref_;
}
inline bNodeSocket *DSocket::bsocket() const
{
return m_socket_ref->bsocket();
return socket_ref_->bsocket();
}
inline bool DSocket::is_available() const
{
return (m_socket_ref->bsocket()->flag & SOCK_UNAVAIL) == 0;
return (socket_ref_->bsocket()->flag & SOCK_UNAVAIL) == 0;
}
/* --------------------------------------------------------------------
@ -309,22 +309,22 @@ inline bool DSocket::is_available() const
inline const InputSocketRef &DInputSocket::socket_ref() const
{
return m_socket_ref->as_input();
return socket_ref_->as_input();
}
inline Span<const DOutputSocket *> DInputSocket::linked_sockets() const
{
return m_linked_sockets.as_span();
return linked_sockets_.as_span();
}
inline Span<const DGroupInput *> DInputSocket::linked_group_inputs() const
{
return m_linked_group_inputs.as_span();
return linked_group_inputs_.as_span();
}
inline bool DInputSocket::is_linked() const
{
return m_linked_sockets.size() > 0 || m_linked_group_inputs.size() > 0;
return linked_sockets_.size() > 0 || linked_group_inputs_.size() > 0;
}
/* --------------------------------------------------------------------
@ -333,12 +333,12 @@ inline bool DInputSocket::is_linked() const
inline const OutputSocketRef &DOutputSocket::socket_ref() const
{
return m_socket_ref->as_output();
return socket_ref_->as_output();
}
inline Span<const DInputSocket *> DOutputSocket::linked_sockets() const
{
return m_linked_sockets.as_span();
return linked_sockets_.as_span();
}
/* --------------------------------------------------------------------
@ -347,32 +347,32 @@ inline Span<const DInputSocket *> DOutputSocket::linked_sockets() const
inline const InputSocketRef &DGroupInput::socket_ref() const
{
return *m_socket_ref;
return *socket_ref_;
}
inline bNodeSocket *DGroupInput::bsocket() const
{
return m_socket_ref->bsocket();
return socket_ref_->bsocket();
}
inline const DParentNode *DGroupInput::parent() const
{
return m_parent;
return parent_;
}
inline Span<const DInputSocket *> DGroupInput::linked_sockets() const
{
return m_linked_sockets.as_span();
return linked_sockets_.as_span();
}
inline uint DGroupInput::id() const
{
return m_id;
return id_;
}
inline StringRefNull DGroupInput::name() const
{
return m_socket_ref->name();
return socket_ref_->name();
}
/* --------------------------------------------------------------------
@ -381,52 +381,52 @@ inline StringRefNull DGroupInput::name() const
inline const NodeRef &DNode::node_ref() const
{
return *m_node_ref;
return *node_ref_;
}
inline const DParentNode *DNode::parent() const
{
return m_parent;
return parent_;
}
inline Span<const DInputSocket *> DNode::inputs() const
{
return m_inputs;
return inputs_;
}
inline Span<const DOutputSocket *> DNode::outputs() const
{
return m_outputs;
return outputs_;
}
inline const DInputSocket &DNode::input(uint index) const
{
return *m_inputs[index];
return *inputs_[index];
}
inline const DOutputSocket &DNode::output(uint index) const
{
return *m_outputs[index];
return *outputs_[index];
}
inline uint DNode::id() const
{
return m_id;
return id_;
}
inline PointerRNA *DNode::rna() const
{
return m_node_ref->rna();
return node_ref_->rna();
}
inline StringRefNull DNode::idname() const
{
return m_node_ref->idname();
return node_ref_->idname();
}
inline StringRefNull DNode::name() const
{
return m_node_ref->name();
return node_ref_->name();
}
/* --------------------------------------------------------------------
@ -435,17 +435,17 @@ inline StringRefNull DNode::name() const
inline const DParentNode *DParentNode::parent() const
{
return m_parent;
return parent_;
}
inline const NodeRef &DParentNode::node_ref() const
{
return *m_node_ref;
return *node_ref_;
}
inline uint DParentNode::id() const
{
return m_id;
return id_;
}
/* --------------------------------------------------------------------
@ -454,7 +454,7 @@ inline uint DParentNode::id() const
inline Span<const DNode *> DerivedNodeTree::nodes() const
{
return m_nodes_by_id.as_span();
return nodes_by_id_.as_span();
}
inline Span<const DNode *> DerivedNodeTree::nodes_by_type(StringRefNull idname) const
@ -465,7 +465,7 @@ inline Span<const DNode *> DerivedNodeTree::nodes_by_type(StringRefNull idname)
inline Span<const DNode *> DerivedNodeTree::nodes_by_type(const bNodeType *nodetype) const
{
const Vector<DNode *> *nodes = m_nodes_by_type.lookup_ptr(nodetype);
const Vector<DNode *> *nodes = nodes_by_type_.lookup_ptr(nodetype);
if (nodes == nullptr) {
return {};
}
@ -476,22 +476,22 @@ inline Span<const DNode *> DerivedNodeTree::nodes_by_type(const bNodeType *nodet
inline Span<const DSocket *> DerivedNodeTree::sockets() const
{
return m_sockets_by_id.as_span();
return sockets_by_id_.as_span();
}
inline Span<const DInputSocket *> DerivedNodeTree::input_sockets() const
{
return m_input_sockets.as_span();
return input_sockets_.as_span();
}
inline Span<const DOutputSocket *> DerivedNodeTree::output_sockets() const
{
return m_output_sockets.as_span();
return output_sockets_.as_span();
}
inline Span<const DGroupInput *> DerivedNodeTree::group_inputs() const
{
return m_group_inputs.as_span();
return group_inputs_.as_span();
}
} // namespace bke

View File

@ -69,14 +69,14 @@ class NodeTreeRef;
class SocketRef : NonCopyable, NonMovable {
protected:
NodeRef *m_node;
bNodeSocket *m_bsocket;
bool m_is_input;
uint m_id;
uint m_index;
PointerRNA m_rna;
Vector<SocketRef *> m_linked_sockets;
Vector<SocketRef *> m_directly_linked_sockets;
NodeRef *node_;
bNodeSocket *bsocket_;
bool is_input_;
uint id_;
uint index_;
PointerRNA rna_;
Vector<SocketRef *> linked_sockets_;
Vector<SocketRef *> directly_linked_sockets_;
friend NodeTreeRef;
@ -122,12 +122,12 @@ class OutputSocketRef final : public SocketRef {
class NodeRef : NonCopyable, NonMovable {
private:
NodeTreeRef *m_tree;
bNode *m_bnode;
PointerRNA m_rna;
uint m_id;
Vector<InputSocketRef *> m_inputs;
Vector<OutputSocketRef *> m_outputs;
NodeTreeRef *tree_;
bNode *bnode_;
PointerRNA rna_;
uint id_;
Vector<InputSocketRef *> inputs_;
Vector<OutputSocketRef *> outputs_;
friend NodeTreeRef;
@ -157,13 +157,13 @@ class NodeRef : NonCopyable, NonMovable {
class NodeTreeRef : NonCopyable, NonMovable {
private:
LinearAllocator<> m_allocator;
bNodeTree *m_btree;
Vector<NodeRef *> m_nodes_by_id;
Vector<SocketRef *> m_sockets_by_id;
Vector<InputSocketRef *> m_input_sockets;
Vector<OutputSocketRef *> m_output_sockets;
Map<const bNodeType *, Vector<NodeRef *>> m_nodes_by_type;
LinearAllocator<> allocator_;
bNodeTree *btree_;
Vector<NodeRef *> nodes_by_id_;
Vector<SocketRef *> sockets_by_id_;
Vector<InputSocketRef *> input_sockets_;
Vector<OutputSocketRef *> output_sockets_;
Map<const bNodeType *, Vector<NodeRef *>> nodes_by_type_;
public:
NodeTreeRef(bNodeTree *btree);
@ -198,47 +198,47 @@ class NodeTreeRef : NonCopyable, NonMovable {
inline Span<const SocketRef *> SocketRef::linked_sockets() const
{
return m_linked_sockets.as_span();
return linked_sockets_.as_span();
}
inline Span<const SocketRef *> SocketRef::directly_linked_sockets() const
{
return m_directly_linked_sockets.as_span();
return directly_linked_sockets_.as_span();
}
inline bool SocketRef::is_linked() const
{
return m_linked_sockets.size() > 0;
return linked_sockets_.size() > 0;
}
inline const NodeRef &SocketRef::node() const
{
return *m_node;
return *node_;
}
inline const NodeTreeRef &SocketRef::tree() const
{
return m_node->tree();
return node_->tree();
}
inline uint SocketRef::id() const
{
return m_id;
return id_;
}
inline uint SocketRef::index() const
{
return m_index;
return index_;
}
inline bool SocketRef::is_input() const
{
return m_is_input;
return is_input_;
}
inline bool SocketRef::is_output() const
{
return !m_is_input;
return !is_input_;
}
inline const SocketRef &SocketRef::as_base() const
@ -260,32 +260,32 @@ inline const OutputSocketRef &SocketRef::as_output() const
inline PointerRNA *SocketRef::rna() const
{
return const_cast<PointerRNA *>(&m_rna);
return const_cast<PointerRNA *>(&rna_);
}
inline StringRefNull SocketRef::idname() const
{
return m_bsocket->idname;
return bsocket_->idname;
}
inline StringRefNull SocketRef::name() const
{
return m_bsocket->name;
return bsocket_->name;
}
inline bNodeSocket *SocketRef::bsocket() const
{
return m_bsocket;
return bsocket_;
}
inline bNode *SocketRef::bnode() const
{
return m_node->bnode();
return node_->bnode();
}
inline bNodeTree *SocketRef::btree() const
{
return m_node->btree();
return node_->btree();
}
/* --------------------------------------------------------------------
@ -294,12 +294,12 @@ inline bNodeTree *SocketRef::btree() const
inline Span<const OutputSocketRef *> InputSocketRef::linked_sockets() const
{
return m_linked_sockets.as_span().cast<const OutputSocketRef *>();
return linked_sockets_.as_span().cast<const OutputSocketRef *>();
}
inline Span<const OutputSocketRef *> InputSocketRef::directly_linked_sockets() const
{
return m_directly_linked_sockets.as_span().cast<const OutputSocketRef *>();
return directly_linked_sockets_.as_span().cast<const OutputSocketRef *>();
}
/* --------------------------------------------------------------------
@ -308,12 +308,12 @@ inline Span<const OutputSocketRef *> InputSocketRef::directly_linked_sockets() c
inline Span<const InputSocketRef *> OutputSocketRef::linked_sockets() const
{
return m_linked_sockets.as_span().cast<const InputSocketRef *>();
return linked_sockets_.as_span().cast<const InputSocketRef *>();
}
inline Span<const InputSocketRef *> OutputSocketRef::directly_linked_sockets() const
{
return m_directly_linked_sockets.as_span().cast<const InputSocketRef *>();
return directly_linked_sockets_.as_span().cast<const InputSocketRef *>();
}
/* --------------------------------------------------------------------
@ -322,77 +322,77 @@ inline Span<const InputSocketRef *> OutputSocketRef::directly_linked_sockets() c
inline const NodeTreeRef &NodeRef::tree() const
{
return *m_tree;
return *tree_;
}
inline Span<const InputSocketRef *> NodeRef::inputs() const
{
return m_inputs.as_span();
return inputs_.as_span();
}
inline Span<const OutputSocketRef *> NodeRef::outputs() const
{
return m_outputs.as_span();
return outputs_.as_span();
}
inline const InputSocketRef &NodeRef::input(uint index) const
{
return *m_inputs[index];
return *inputs_[index];
}
inline const OutputSocketRef &NodeRef::output(uint index) const
{
return *m_outputs[index];
return *outputs_[index];
}
inline bNode *NodeRef::bnode() const
{
return m_bnode;
return bnode_;
}
inline bNodeTree *NodeRef::btree() const
{
return m_tree->btree();
return tree_->btree();
}
inline PointerRNA *NodeRef::rna() const
{
return const_cast<PointerRNA *>(&m_rna);
return const_cast<PointerRNA *>(&rna_);
}
inline StringRefNull NodeRef::idname() const
{
return m_bnode->idname;
return bnode_->idname;
}
inline StringRefNull NodeRef::name() const
{
return m_bnode->name;
return bnode_->name;
}
inline uint NodeRef::id() const
{
return m_id;
return id_;
}
inline bool NodeRef::is_reroute_node() const
{
return m_bnode->type == NODE_REROUTE;
return bnode_->type == NODE_REROUTE;
}
inline bool NodeRef::is_group_node() const
{
return m_bnode->type == NODE_GROUP;
return bnode_->type == NODE_GROUP;
}
inline bool NodeRef::is_group_input_node() const
{
return m_bnode->type == NODE_GROUP_INPUT;
return bnode_->type == NODE_GROUP_INPUT;
}
inline bool NodeRef::is_group_output_node() const
{
return m_bnode->type == NODE_GROUP_OUTPUT;
return bnode_->type == NODE_GROUP_OUTPUT;
}
/* --------------------------------------------------------------------
@ -401,7 +401,7 @@ inline bool NodeRef::is_group_output_node() const
inline Span<const NodeRef *> NodeTreeRef::nodes() const
{
return m_nodes_by_id.as_span();
return nodes_by_id_.as_span();
}
inline Span<const NodeRef *> NodeTreeRef::nodes_by_type(StringRefNull idname) const
@ -412,7 +412,7 @@ inline Span<const NodeRef *> NodeTreeRef::nodes_by_type(StringRefNull idname) co
inline Span<const NodeRef *> NodeTreeRef::nodes_by_type(const bNodeType *nodetype) const
{
const Vector<NodeRef *> *nodes = m_nodes_by_type.lookup_ptr(nodetype);
const Vector<NodeRef *> *nodes = nodes_by_type_.lookup_ptr(nodetype);
if (nodes == nullptr) {
return {};
}
@ -423,22 +423,22 @@ inline Span<const NodeRef *> NodeTreeRef::nodes_by_type(const bNodeType *nodetyp
inline Span<const SocketRef *> NodeTreeRef::sockets() const
{
return m_sockets_by_id.as_span();
return sockets_by_id_.as_span();
}
inline Span<const InputSocketRef *> NodeTreeRef::input_sockets() const
{
return m_input_sockets.as_span();
return input_sockets_.as_span();
}
inline Span<const OutputSocketRef *> NodeTreeRef::output_sockets() const
{
return m_output_sockets.as_span();
return output_sockets_.as_span();
}
inline bNodeTree *NodeTreeRef::btree() const
{
return m_btree;
return btree_;
}
} // namespace bke

View File

@ -29,7 +29,7 @@ static const NodeTreeRef &get_tree_ref(NodeTreeRefMap &node_tree_refs, bNodeTree
[&]() { return std::make_unique<NodeTreeRef>(btree); });
}
DerivedNodeTree::DerivedNodeTree(bNodeTree *btree, NodeTreeRefMap &node_tree_refs) : m_btree(btree)
DerivedNodeTree::DerivedNodeTree(bNodeTree *btree, NodeTreeRefMap &node_tree_refs) : btree_(btree)
{
const NodeTreeRef &main_tree_ref = get_tree_ref(node_tree_refs, btree);
@ -63,8 +63,8 @@ BLI_NOINLINE void DerivedNodeTree::insert_nodes_and_links_in_id_order(const Node
DInputSocket *to_socket = (DInputSocket *)sockets_map[to_socket_ref->id()];
for (const OutputSocketRef *from_socket_ref : to_socket_ref->linked_sockets()) {
DOutputSocket *from_socket = (DOutputSocket *)sockets_map[from_socket_ref->id()];
to_socket->m_linked_sockets.append(from_socket);
from_socket->m_linked_sockets.append(to_socket);
to_socket->linked_sockets_.append(from_socket);
from_socket->linked_sockets_.append(to_socket);
}
}
}
@ -74,34 +74,34 @@ DNode &DerivedNodeTree::create_node(const NodeRef &node_ref,
DParentNode *parent,
MutableSpan<DSocket *> r_sockets_map)
{
DNode &node = *m_allocator.construct<DNode>();
node.m_node_ref = &node_ref;
node.m_parent = parent;
node.m_id = UNINITIALIZED_ID;
DNode &node = *allocator_.construct<DNode>();
node.node_ref_ = &node_ref;
node.parent_ = parent;
node.id_ = UNINITIALIZED_ID;
node.m_inputs = m_allocator.construct_elements_and_pointer_array<DInputSocket>(
node.inputs_ = allocator_.construct_elements_and_pointer_array<DInputSocket>(
node_ref.inputs().size());
node.m_outputs = m_allocator.construct_elements_and_pointer_array<DOutputSocket>(
node.outputs_ = allocator_.construct_elements_and_pointer_array<DOutputSocket>(
node_ref.outputs().size());
for (uint i : node.m_inputs.index_range()) {
for (uint i : node.inputs_.index_range()) {
const InputSocketRef &socket_ref = node_ref.input(i);
DInputSocket &socket = *node.m_inputs[i];
DInputSocket &socket = *node.inputs_[i];
socket.m_id = UNINITIALIZED_ID;
socket.m_node = &node;
socket.m_socket_ref = &socket_ref;
socket.id_ = UNINITIALIZED_ID;
socket.node_ = &node;
socket.socket_ref_ = &socket_ref;
r_sockets_map[socket_ref.id()] = &socket;
}
for (uint i : node.m_outputs.index_range()) {
for (uint i : node.outputs_.index_range()) {
const OutputSocketRef &socket_ref = node_ref.output(i);
DOutputSocket &socket = *node.m_outputs[i];
DOutputSocket &socket = *node.outputs_[i];
socket.m_id = UNINITIALIZED_ID;
socket.m_node = &node;
socket.m_socket_ref = &socket_ref;
socket.id_ = UNINITIALIZED_ID;
socket.node_ = &node;
socket.socket_ref_ = &socket_ref;
r_sockets_map[socket_ref.id()] = &socket;
}
@ -116,7 +116,7 @@ BLI_NOINLINE void DerivedNodeTree::expand_groups(Vector<DNode *> &all_nodes,
{
for (uint i = 0; i < all_nodes.size(); i++) {
DNode &node = *all_nodes[i];
if (node.m_node_ref->is_group_node()) {
if (node.node_ref_->is_group_node()) {
this->expand_group_node(node, all_nodes, all_group_inputs, all_parent_nodes, node_tree_refs);
}
}
@ -128,7 +128,7 @@ BLI_NOINLINE void DerivedNodeTree::expand_group_node(DNode &group_node,
Vector<DParentNode *> &all_parent_nodes,
NodeTreeRefMap &node_tree_refs)
{
const NodeRef &group_node_ref = *group_node.m_node_ref;
const NodeRef &group_node_ref = *group_node.node_ref_;
BLI_assert(group_node_ref.is_group_node());
bNodeTree *btree = (bNodeTree *)group_node_ref.bnode()->id;
@ -138,10 +138,10 @@ BLI_NOINLINE void DerivedNodeTree::expand_group_node(DNode &group_node,
const NodeTreeRef &group_ref = get_tree_ref(node_tree_refs, btree);
DParentNode &parent = *m_allocator.construct<DParentNode>();
parent.m_id = all_parent_nodes.append_and_get_index(&parent);
parent.m_parent = group_node.m_parent;
parent.m_node_ref = &group_node_ref;
DParentNode &parent = *allocator_.construct<DParentNode>();
parent.id_ = all_parent_nodes.append_and_get_index(&parent);
parent.parent_ = group_node.parent_;
parent.node_ref_ = &group_node_ref;
this->insert_nodes_and_links_in_id_order(group_ref, &parent, all_nodes);
Span<DNode *> new_nodes_by_id = all_nodes.as_span().take_back(group_ref.nodes().size());
@ -154,18 +154,18 @@ BLI_NOINLINE void DerivedNodeTree::expand_group_node(DNode &group_node,
BLI_NOINLINE void DerivedNodeTree::create_group_inputs_for_unlinked_inputs(
DNode &node, Vector<DGroupInput *> &all_group_inputs)
{
for (DInputSocket *input_socket : node.m_inputs) {
for (DInputSocket *input_socket : node.inputs_) {
if (input_socket->is_linked()) {
continue;
}
DGroupInput &group_input = *m_allocator.construct<DGroupInput>();
group_input.m_id = UNINITIALIZED_ID;
group_input.m_socket_ref = &input_socket->socket_ref();
group_input.m_parent = node.m_parent;
DGroupInput &group_input = *allocator_.construct<DGroupInput>();
group_input.id_ = UNINITIALIZED_ID;
group_input.socket_ref_ = &input_socket->socket_ref();
group_input.parent_ = node.parent_;
group_input.m_linked_sockets.append(input_socket);
input_socket->m_linked_group_inputs.append(&group_input);
group_input.linked_sockets_.append(input_socket);
input_socket->linked_group_inputs_.append(&group_input);
all_group_inputs.append(&group_input);
}
}
@ -186,34 +186,34 @@ BLI_NOINLINE void DerivedNodeTree::relink_group_inputs(const NodeTreeRef &group_
BLI_assert(input_amount == input_node_ref.outputs().size() - 1);
for (uint input_index : IndexRange(input_amount)) {
DInputSocket *outside_group = group_node.m_inputs[input_index];
DOutputSocket *inside_group = input_node.m_outputs[input_index];
DInputSocket *outside_group = group_node.inputs_[input_index];
DOutputSocket *inside_group = input_node.outputs_[input_index];
for (DOutputSocket *outside_connected : outside_group->m_linked_sockets) {
outside_connected->m_linked_sockets.remove_first_occurrence_and_reorder(outside_group);
for (DOutputSocket *outside_connected : outside_group->linked_sockets_) {
outside_connected->linked_sockets_.remove_first_occurrence_and_reorder(outside_group);
}
for (DGroupInput *outside_connected : outside_group->m_linked_group_inputs) {
outside_connected->m_linked_sockets.remove_first_occurrence_and_reorder(outside_group);
for (DGroupInput *outside_connected : outside_group->linked_group_inputs_) {
outside_connected->linked_sockets_.remove_first_occurrence_and_reorder(outside_group);
}
for (DInputSocket *inside_connected : inside_group->m_linked_sockets) {
inside_connected->m_linked_sockets.remove_first_occurrence_and_reorder(inside_group);
for (DInputSocket *inside_connected : inside_group->linked_sockets_) {
inside_connected->linked_sockets_.remove_first_occurrence_and_reorder(inside_group);
for (DOutputSocket *outside_connected : outside_group->m_linked_sockets) {
inside_connected->m_linked_sockets.append(outside_connected);
outside_connected->m_linked_sockets.append(inside_connected);
for (DOutputSocket *outside_connected : outside_group->linked_sockets_) {
inside_connected->linked_sockets_.append(outside_connected);
outside_connected->linked_sockets_.append(inside_connected);
}
for (DGroupInput *outside_connected : outside_group->m_linked_group_inputs) {
inside_connected->m_linked_group_inputs.append(outside_connected);
outside_connected->m_linked_sockets.append(inside_connected);
for (DGroupInput *outside_connected : outside_group->linked_group_inputs_) {
inside_connected->linked_group_inputs_.append(outside_connected);
outside_connected->linked_sockets_.append(inside_connected);
}
}
inside_group->m_linked_sockets.clear();
outside_group->m_linked_sockets.clear();
outside_group->m_linked_group_inputs.clear();
inside_group->linked_sockets_.clear();
outside_group->linked_sockets_.clear();
outside_group->linked_group_inputs_.clear();
}
}
@ -233,33 +233,33 @@ BLI_NOINLINE void DerivedNodeTree::relink_group_outputs(const NodeTreeRef &group
BLI_assert(output_amount == output_node_ref.inputs().size() - 1);
for (uint output_index : IndexRange(output_amount)) {
DOutputSocket *outside_group = group_node.m_outputs[output_index];
DInputSocket *inside_group = output_node.m_inputs[output_index];
DOutputSocket *outside_group = group_node.outputs_[output_index];
DInputSocket *inside_group = output_node.inputs_[output_index];
for (DInputSocket *outside_connected : outside_group->m_linked_sockets) {
outside_connected->m_linked_sockets.remove_first_occurrence_and_reorder(outside_group);
for (DInputSocket *outside_connected : outside_group->linked_sockets_) {
outside_connected->linked_sockets_.remove_first_occurrence_and_reorder(outside_group);
}
for (DOutputSocket *inside_connected : inside_group->m_linked_sockets) {
inside_connected->m_linked_sockets.remove_first_occurrence_and_reorder(inside_group);
for (DOutputSocket *inside_connected : inside_group->linked_sockets_) {
inside_connected->linked_sockets_.remove_first_occurrence_and_reorder(inside_group);
for (DInputSocket *outside_connected : outside_group->m_linked_sockets) {
inside_connected->m_linked_sockets.append(outside_connected);
outside_connected->m_linked_sockets.append(inside_connected);
for (DInputSocket *outside_connected : outside_group->linked_sockets_) {
inside_connected->linked_sockets_.append(outside_connected);
outside_connected->linked_sockets_.append(inside_connected);
}
}
for (DGroupInput *inside_connected : inside_group->m_linked_group_inputs) {
inside_connected->m_linked_sockets.remove_first_occurrence_and_reorder(inside_group);
for (DGroupInput *inside_connected : inside_group->linked_group_inputs_) {
inside_connected->linked_sockets_.remove_first_occurrence_and_reorder(inside_group);
for (DInputSocket *outside_connected : outside_group->m_linked_sockets) {
inside_connected->m_linked_sockets.append(outside_connected);
outside_connected->m_linked_group_inputs.append(inside_connected);
for (DInputSocket *outside_connected : outside_group->linked_sockets_) {
inside_connected->linked_sockets_.append(outside_connected);
outside_connected->linked_group_inputs_.append(inside_connected);
}
}
outside_group->m_linked_sockets.clear();
inside_group->m_linked_sockets.clear();
outside_group->linked_sockets_.clear();
inside_group->linked_sockets_.clear();
}
}
@ -268,9 +268,9 @@ BLI_NOINLINE void DerivedNodeTree::remove_expanded_group_interfaces(Vector<DNode
int index = 0;
while (index < all_nodes.size()) {
DNode &node = *all_nodes[index];
const NodeRef &node_ref = *node.m_node_ref;
const NodeRef &node_ref = *node.node_ref_;
if (node_ref.is_group_node() ||
(node.m_parent != nullptr &&
(node.parent_ != nullptr &&
(node_ref.is_group_input_node() || node_ref.is_group_output_node()))) {
all_nodes.remove_and_reorder(index);
node.destruct_with_sockets();
@ -287,7 +287,7 @@ BLI_NOINLINE void DerivedNodeTree::remove_unused_group_inputs(
int index = 0;
while (index < all_group_inputs.size()) {
DGroupInput &group_input = *all_group_inputs[index];
if (group_input.m_linked_sockets.is_empty()) {
if (group_input.linked_sockets_.is_empty()) {
all_group_inputs.remove_and_reorder(index);
group_input.~DGroupInput();
}
@ -299,10 +299,10 @@ BLI_NOINLINE void DerivedNodeTree::remove_unused_group_inputs(
void DNode::destruct_with_sockets()
{
for (DInputSocket *socket : m_inputs) {
for (DInputSocket *socket : inputs_) {
socket->~DInputSocket();
}
for (DOutputSocket *socket : m_outputs) {
for (DOutputSocket *socket : outputs_) {
socket->~DOutputSocket();
}
this->~DNode();
@ -313,47 +313,47 @@ BLI_NOINLINE void DerivedNodeTree::store_in_this_and_init_ids(
Vector<DGroupInput *> &&all_group_inputs,
Vector<DParentNode *> &&all_parent_nodes)
{
m_nodes_by_id = std::move(all_nodes);
m_group_inputs = std::move(all_group_inputs);
m_parent_nodes = std::move(all_parent_nodes);
nodes_by_id_ = std::move(all_nodes);
group_inputs_ = std::move(all_group_inputs);
parent_nodes_ = std::move(all_parent_nodes);
for (uint node_index : m_nodes_by_id.index_range()) {
DNode *node = m_nodes_by_id[node_index];
node->m_id = node_index;
for (uint node_index : nodes_by_id_.index_range()) {
DNode *node = nodes_by_id_[node_index];
node->id_ = node_index;
const bNodeType *nodetype = node->m_node_ref->bnode()->typeinfo;
m_nodes_by_type.lookup_or_add_default(nodetype).append(node);
const bNodeType *nodetype = node->node_ref_->bnode()->typeinfo;
nodes_by_type_.lookup_or_add_default(nodetype).append(node);
for (DInputSocket *socket : node->m_inputs) {
socket->m_id = m_sockets_by_id.append_and_get_index(socket);
m_input_sockets.append(socket);
for (DInputSocket *socket : node->inputs_) {
socket->id_ = sockets_by_id_.append_and_get_index(socket);
input_sockets_.append(socket);
}
for (DOutputSocket *socket : node->m_outputs) {
socket->m_id = m_sockets_by_id.append_and_get_index(socket);
m_output_sockets.append(socket);
for (DOutputSocket *socket : node->outputs_) {
socket->id_ = sockets_by_id_.append_and_get_index(socket);
output_sockets_.append(socket);
}
}
for (uint i : m_group_inputs.index_range()) {
m_group_inputs[i]->m_id = i;
for (uint i : group_inputs_.index_range()) {
group_inputs_[i]->id_ = i;
}
}
DerivedNodeTree::~DerivedNodeTree()
{
for (DInputSocket *socket : m_input_sockets) {
for (DInputSocket *socket : input_sockets_) {
socket->~DInputSocket();
}
for (DOutputSocket *socket : m_output_sockets) {
for (DOutputSocket *socket : output_sockets_) {
socket->~DOutputSocket();
}
for (DNode *node : m_nodes_by_id) {
for (DNode *node : nodes_by_id_) {
node->~DNode();
}
for (DGroupInput *group_input : m_group_inputs) {
for (DGroupInput *group_input : group_inputs_) {
group_input->~DGroupInput();
}
for (DParentNode *parent : m_parent_nodes) {
for (DParentNode *parent : parent_nodes_) {
parent->~DParentNode();
}
}
@ -384,7 +384,7 @@ std::string DerivedNodeTree::to_dot() const
Map<const DGroupInput *, dot::NodeWithSocketsRef> dot_group_inputs;
Map<const DParentNode *, dot::Cluster *> dot_clusters;
for (const DNode *node : m_nodes_by_id) {
for (const DNode *node : nodes_by_id_) {
dot::Node &dot_node = digraph.new_node("");
dot_node.set_background_color("white");
@ -404,7 +404,7 @@ std::string DerivedNodeTree::to_dot() const
dot_node.set_parent_cluster(cluster);
}
for (const DGroupInput *group_input : m_group_inputs) {
for (const DGroupInput *group_input : group_inputs_) {
dot::Node &dot_node = digraph.new_node("");
dot_node.set_background_color("white");
@ -416,7 +416,7 @@ std::string DerivedNodeTree::to_dot() const
dot_node.set_parent_cluster(cluster);
}
for (const DNode *to_node : m_nodes_by_id) {
for (const DNode *to_node : nodes_by_id_) {
dot::NodeWithSocketsRef &to_dot_node = dot_nodes.lookup(to_node);
for (const DInputSocket *to_socket : to_node->inputs()) {

View File

@ -21,40 +21,40 @@
namespace blender {
namespace bke {
NodeTreeRef::NodeTreeRef(bNodeTree *btree) : m_btree(btree)
NodeTreeRef::NodeTreeRef(bNodeTree *btree) : btree_(btree)
{
Map<bNode *, NodeRef *> node_mapping;
LISTBASE_FOREACH (bNode *, bnode, &btree->nodes) {
NodeRef &node = *m_allocator.construct<NodeRef>();
NodeRef &node = *allocator_.construct<NodeRef>();
node.m_tree = this;
node.m_bnode = bnode;
node.m_id = m_nodes_by_id.append_and_get_index(&node);
RNA_pointer_create(&btree->id, &RNA_Node, bnode, &node.m_rna);
node.tree_ = this;
node.bnode_ = bnode;
node.id_ = nodes_by_id_.append_and_get_index(&node);
RNA_pointer_create(&btree->id, &RNA_Node, bnode, &node.rna_);
LISTBASE_FOREACH (bNodeSocket *, bsocket, &bnode->inputs) {
InputSocketRef &socket = *m_allocator.construct<InputSocketRef>();
socket.m_node = &node;
socket.m_index = node.m_inputs.append_and_get_index(&socket);
socket.m_is_input = true;
socket.m_bsocket = bsocket;
socket.m_id = m_sockets_by_id.append_and_get_index(&socket);
RNA_pointer_create(&btree->id, &RNA_NodeSocket, bsocket, &socket.m_rna);
InputSocketRef &socket = *allocator_.construct<InputSocketRef>();
socket.node_ = &node;
socket.index_ = node.inputs_.append_and_get_index(&socket);
socket.is_input_ = true;
socket.bsocket_ = bsocket;
socket.id_ = sockets_by_id_.append_and_get_index(&socket);
RNA_pointer_create(&btree->id, &RNA_NodeSocket, bsocket, &socket.rna_);
}
LISTBASE_FOREACH (bNodeSocket *, bsocket, &bnode->outputs) {
OutputSocketRef &socket = *m_allocator.construct<OutputSocketRef>();
socket.m_node = &node;
socket.m_index = node.m_outputs.append_and_get_index(&socket);
socket.m_is_input = false;
socket.m_bsocket = bsocket;
socket.m_id = m_sockets_by_id.append_and_get_index(&socket);
RNA_pointer_create(&btree->id, &RNA_NodeSocket, bsocket, &socket.m_rna);
OutputSocketRef &socket = *allocator_.construct<OutputSocketRef>();
socket.node_ = &node;
socket.index_ = node.outputs_.append_and_get_index(&socket);
socket.is_input_ = false;
socket.bsocket_ = bsocket;
socket.id_ = sockets_by_id_.append_and_get_index(&socket);
RNA_pointer_create(&btree->id, &RNA_NodeSocket, bsocket, &socket.rna_);
}
m_input_sockets.extend(node.m_inputs);
m_output_sockets.extend(node.m_outputs);
input_sockets_.extend(node.inputs_);
output_sockets_.extend(node.outputs_);
node_mapping.add_new(bnode, &node);
}
@ -65,34 +65,34 @@ NodeTreeRef::NodeTreeRef(bNodeTree *btree) : m_btree(btree)
InputSocketRef &to_socket = this->find_input_socket(
node_mapping, blink->tonode, blink->tosock);
from_socket.m_directly_linked_sockets.append(&to_socket);
to_socket.m_directly_linked_sockets.append(&from_socket);
from_socket.directly_linked_sockets_.append(&to_socket);
to_socket.directly_linked_sockets_.append(&from_socket);
}
for (OutputSocketRef *socket : m_output_sockets) {
if (!socket->m_node->is_reroute_node()) {
this->find_targets_skipping_reroutes(*socket, socket->m_linked_sockets);
for (SocketRef *target : socket->m_linked_sockets) {
target->m_linked_sockets.append(socket);
for (OutputSocketRef *socket : output_sockets_) {
if (!socket->node_->is_reroute_node()) {
this->find_targets_skipping_reroutes(*socket, socket->linked_sockets_);
for (SocketRef *target : socket->linked_sockets_) {
target->linked_sockets_.append(socket);
}
}
}
for (NodeRef *node : m_nodes_by_id) {
const bNodeType *nodetype = node->m_bnode->typeinfo;
m_nodes_by_type.lookup_or_add_default(nodetype).append(node);
for (NodeRef *node : nodes_by_id_) {
const bNodeType *nodetype = node->bnode_->typeinfo;
nodes_by_type_.lookup_or_add_default(nodetype).append(node);
}
}
NodeTreeRef::~NodeTreeRef()
{
for (NodeRef *node : m_nodes_by_id) {
for (NodeRef *node : nodes_by_id_) {
node->~NodeRef();
}
for (InputSocketRef *socket : m_input_sockets) {
for (InputSocketRef *socket : input_sockets_) {
socket->~InputSocketRef();
}
for (OutputSocketRef *socket : m_output_sockets) {
for (OutputSocketRef *socket : output_sockets_) {
socket->~OutputSocketRef();
}
}
@ -102,13 +102,13 @@ InputSocketRef &NodeTreeRef::find_input_socket(Map<bNode *, NodeRef *> &node_map
bNodeSocket *bsocket)
{
NodeRef *node = node_mapping.lookup(bnode);
for (SocketRef *socket : node->m_inputs) {
if (socket->m_bsocket == bsocket) {
for (SocketRef *socket : node->inputs_) {
if (socket->bsocket_ == bsocket) {
return *(InputSocketRef *)socket;
}
}
BLI_assert(false);
return *node->m_inputs[0];
return *node->inputs_[0];
}
OutputSocketRef &NodeTreeRef::find_output_socket(Map<bNode *, NodeRef *> &node_mapping,
@ -116,21 +116,21 @@ OutputSocketRef &NodeTreeRef::find_output_socket(Map<bNode *, NodeRef *> &node_m
bNodeSocket *bsocket)
{
NodeRef *node = node_mapping.lookup(bnode);
for (SocketRef *socket : node->m_outputs) {
if (socket->m_bsocket == bsocket) {
for (SocketRef *socket : node->outputs_) {
if (socket->bsocket_ == bsocket) {
return *(OutputSocketRef *)socket;
}
}
BLI_assert(false);
return *node->m_outputs[0];
return *node->outputs_[0];
}
void NodeTreeRef::find_targets_skipping_reroutes(OutputSocketRef &socket,
Vector<SocketRef *> &r_targets)
{
for (SocketRef *direct_target : socket.m_directly_linked_sockets) {
if (direct_target->m_node->is_reroute_node()) {
this->find_targets_skipping_reroutes(*direct_target->m_node->m_outputs[0], r_targets);
for (SocketRef *direct_target : socket.directly_linked_sockets_) {
if (direct_target->node_->is_reroute_node()) {
this->find_targets_skipping_reroutes(*direct_target->node_->outputs_[0], r_targets);
}
else {
r_targets.append_non_duplicates(direct_target);
@ -145,7 +145,7 @@ std::string NodeTreeRef::to_dot() const
Map<const NodeRef *, dot::NodeWithSocketsRef> dot_nodes;
for (const NodeRef *node : m_nodes_by_id) {
for (const NodeRef *node : nodes_by_id_) {
dot::Node &dot_node = digraph.new_node("");
dot_node.set_background_color("white");
@ -162,7 +162,7 @@ std::string NodeTreeRef::to_dot() const
dot::NodeWithSocketsRef(dot_node, node->name(), input_names, output_names));
}
for (const OutputSocketRef *from_socket : m_output_sockets) {
for (const OutputSocketRef *from_socket : output_sockets_) {
for (const InputSocketRef *to_socket : from_socket->directly_linked_sockets()) {
dot::NodeWithSocketsRef &from_dot_node = dot_nodes.lookup(&from_socket->node());
dot::NodeWithSocketsRef &to_dot_node = dot_nodes.lookup(&to_socket->node());

View File

@ -65,16 +65,16 @@ template<
class Array {
private:
/** The beginning of the array. It might point into the inline buffer. */
T *m_data;
T *data_;
/** Number of elements in the array. */
uint m_size;
uint size_;
/** Used for allocations when the inline buffer is too small. */
Allocator m_allocator;
Allocator allocator_;
/** A placeholder buffer that will remain uninitialized until it is used. */
AlignedBuffer<sizeof(T) * InlineBufferCapacity, alignof(T)> m_inline_buffer;
AlignedBuffer<sizeof(T) * InlineBufferCapacity, alignof(T)> inline_buffer_;
public:
/**
@ -82,8 +82,8 @@ class Array {
*/
Array()
{
m_data = this->inline_buffer();
m_size = 0;
data_ = this->inline_buffer();
size_ = 0;
}
/**
@ -91,9 +91,9 @@ class Array {
*/
Array(Span<T> values)
{
m_size = values.size();
m_data = this->get_buffer_for_size(values.size());
uninitialized_copy_n(values.data(), m_size, m_data);
size_ = values.size();
data_ = this->get_buffer_for_size(values.size());
uninitialized_copy_n(values.data(), size_, data_);
}
/**
@ -113,9 +113,9 @@ class Array {
*/
explicit Array(uint size)
{
m_size = size;
m_data = this->get_buffer_for_size(size);
default_construct_n(m_data, size);
size_ = size;
data_ = this->get_buffer_for_size(size);
default_construct_n(data_, size);
}
/**
@ -124,9 +124,9 @@ class Array {
*/
Array(uint size, const T &value)
{
m_size = size;
m_data = this->get_buffer_for_size(size);
uninitialized_fill_n(m_data, m_size, value);
size_ = size;
data_ = this->get_buffer_for_size(size);
uninitialized_fill_n(data_, size_, value);
}
/**
@ -143,39 +143,39 @@ class Array {
*/
Array(uint size, NoInitialization)
{
m_size = size;
m_data = this->get_buffer_for_size(size);
size_ = size;
data_ = this->get_buffer_for_size(size);
}
Array(const Array &other) : m_allocator(other.m_allocator)
Array(const Array &other) : allocator_(other.allocator_)
{
m_size = other.size();
size_ = other.size();
m_data = this->get_buffer_for_size(other.size());
uninitialized_copy_n(other.data(), m_size, m_data);
data_ = this->get_buffer_for_size(other.size());
uninitialized_copy_n(other.data(), size_, data_);
}
Array(Array &&other) noexcept : m_allocator(other.m_allocator)
Array(Array &&other) noexcept : allocator_(other.allocator_)
{
m_size = other.m_size;
size_ = other.size_;
if (!other.uses_inline_buffer()) {
m_data = other.m_data;
data_ = other.data_;
}
else {
m_data = this->get_buffer_for_size(m_size);
uninitialized_relocate_n(other.m_data, m_size, m_data);
data_ = this->get_buffer_for_size(size_);
uninitialized_relocate_n(other.data_, size_, data_);
}
other.m_data = other.inline_buffer();
other.m_size = 0;
other.data_ = other.inline_buffer();
other.size_ = 0;
}
~Array()
{
destruct_n(m_data, m_size);
destruct_n(data_, size_);
if (!this->uses_inline_buffer()) {
m_allocator.deallocate((void *)m_data);
allocator_.deallocate((void *)data_);
}
}
@ -203,12 +203,12 @@ class Array {
operator Span<T>() const
{
return Span<T>(m_data, m_size);
return Span<T>(data_, size_);
}
operator MutableSpan<T>()
{
return MutableSpan<T>(m_data, m_size);
return MutableSpan<T>(data_, size_);
}
Span<T> as_span() const
@ -223,14 +223,14 @@ class Array {
T &operator[](uint index)
{
BLI_assert(index < m_size);
return m_data[index];
BLI_assert(index < size_);
return data_[index];
}
const T &operator[](uint index) const
{
BLI_assert(index < m_size);
return m_data[index];
BLI_assert(index < size_);
return data_[index];
}
/**
@ -238,7 +238,7 @@ class Array {
*/
uint size() const
{
return m_size;
return size_;
}
/**
@ -246,7 +246,7 @@ class Array {
*/
bool is_empty() const
{
return m_size == 0;
return size_ == 0;
}
/**
@ -254,7 +254,7 @@ class Array {
*/
void fill(const T &value)
{
initialized_fill_n(m_data, m_size, value);
initialized_fill_n(data_, size_, value);
}
/**
@ -270,31 +270,31 @@ class Array {
*/
const T *data() const
{
return m_data;
return data_;
}
T *data()
{
return m_data;
return data_;
}
const T *begin() const
{
return m_data;
return data_;
}
const T *end() const
{
return m_data + m_size;
return data_ + size_;
}
T *begin()
{
return m_data;
return data_;
}
T *end()
{
return m_data + m_size;
return data_ + size_;
}
/**
@ -302,7 +302,7 @@ class Array {
*/
IndexRange index_range() const
{
return IndexRange(m_size);
return IndexRange(size_);
}
/**
@ -311,7 +311,7 @@ class Array {
*/
void clear_without_destruct()
{
m_size = 0;
size_ = 0;
}
/**
@ -319,7 +319,7 @@ class Array {
*/
Allocator &allocator()
{
return m_allocator;
return allocator_;
}
/**
@ -344,17 +344,17 @@ class Array {
T *inline_buffer() const
{
return (T *)m_inline_buffer.ptr();
return (T *)inline_buffer_.ptr();
}
T *allocate(uint size)
{
return (T *)m_allocator.allocate(size * sizeof(T), alignof(T), AT);
return (T *)allocator_.allocate(size * sizeof(T), alignof(T), AT);
}
bool uses_inline_buffer() const
{
return m_data == this->inline_buffer();
return data_ == this->inline_buffer();
}
};

View File

@ -49,25 +49,25 @@ class AttributeList;
class AttributeList {
private:
Map<std::string, std::string> m_attributes;
Map<std::string, std::string> attributes_;
public:
void export__as_bracket_list(std::stringstream &ss) const;
void set(StringRef key, StringRef value)
{
m_attributes.add_overwrite(key, value);
attributes_.add_overwrite(key, value);
}
};
class Graph {
private:
AttributeList m_attributes;
Vector<std::unique_ptr<Node>> m_nodes;
Vector<std::unique_ptr<Cluster>> m_clusters;
AttributeList attributes_;
Vector<std::unique_ptr<Node>> nodes_;
Vector<std::unique_ptr<Cluster>> clusters_;
Set<Node *> m_top_level_nodes;
Set<Cluster *> m_top_level_clusters;
Set<Node *> top_level_nodes_;
Set<Cluster *> top_level_clusters_;
friend Cluster;
friend Node;
@ -80,7 +80,7 @@ class Graph {
void set_attribute(StringRef key, StringRef value)
{
m_attributes.set(key, value);
attributes_.set(key, value);
}
void set_rankdir(Attr_rankdir rankdir)
@ -93,16 +93,16 @@ class Graph {
class Cluster {
private:
AttributeList m_attributes;
Graph &m_graph;
Cluster *m_parent = nullptr;
Set<Cluster *> m_children;
Set<Node *> m_nodes;
AttributeList attributes_;
Graph &graph_;
Cluster *parent_ = nullptr;
Set<Cluster *> children_;
Set<Node *> nodes_;
friend Graph;
friend Node;
Cluster(Graph &graph) : m_graph(graph)
Cluster(Graph &graph) : graph_(graph)
{
}
@ -111,7 +111,7 @@ class Cluster {
void set_attribute(StringRef key, StringRef value)
{
m_attributes.set(key, value);
attributes_.set(key, value);
}
void set_parent_cluster(Cluster *cluster);
@ -125,25 +125,25 @@ class Cluster {
class Node {
private:
AttributeList m_attributes;
Graph &m_graph;
Cluster *m_cluster = nullptr;
AttributeList attributes_;
Graph &graph_;
Cluster *cluster_ = nullptr;
friend Graph;
Node(Graph &graph) : m_graph(graph)
Node(Graph &graph) : graph_(graph)
{
}
public:
const AttributeList &attributes() const
{
return m_attributes;
return attributes_;
}
AttributeList &attributes()
{
return m_attributes;
return attributes_;
}
void set_parent_cluster(Cluster *cluster);
@ -154,7 +154,7 @@ class Node {
void set_attribute(StringRef key, StringRef value)
{
m_attributes.set(key, value);
attributes_.set(key, value);
}
void set_shape(Attr_shape shape)
@ -176,7 +176,7 @@ class Node {
class UndirectedGraph final : public Graph {
private:
Vector<std::unique_ptr<UndirectedEdge>> m_edges;
Vector<std::unique_ptr<UndirectedEdge>> edges_;
public:
std::string to_dot_string() const;
@ -186,7 +186,7 @@ class UndirectedGraph final : public Graph {
class DirectedGraph final : public Graph {
private:
Vector<std::unique_ptr<DirectedEdge>> m_edges;
Vector<std::unique_ptr<DirectedEdge>> edges_;
public:
std::string to_dot_string() const;
@ -196,12 +196,12 @@ class DirectedGraph final : public Graph {
class NodePort {
private:
Node *m_node;
std::optional<std::string> m_port_name;
Node *node_;
std::optional<std::string> port_name_;
public:
NodePort(Node &node, std::optional<std::string> port_name = {})
: m_node(&node), m_port_name(std::move(port_name))
: node_(&node), port_name_(std::move(port_name))
{
}
@ -210,18 +210,18 @@ class NodePort {
class Edge : blender::NonCopyable, blender::NonMovable {
protected:
AttributeList m_attributes;
NodePort m_a;
NodePort m_b;
AttributeList attributes_;
NodePort a_;
NodePort b_;
public:
Edge(NodePort a, NodePort b) : m_a(std::move(a)), m_b(std::move(b))
Edge(NodePort a, NodePort b) : a_(std::move(a)), b_(std::move(b))
{
}
void set_attribute(StringRef key, StringRef value)
{
m_attributes.set(key, value);
attributes_.set(key, value);
}
void set_arrowhead(Attr_arrowType type)
@ -262,7 +262,7 @@ std::string color_attr_from_hsv(float h, float s, float v);
class NodeWithSocketsRef {
private:
Node *m_node;
Node *node_;
public:
NodeWithSocketsRef(Node &node,
@ -273,13 +273,13 @@ class NodeWithSocketsRef {
NodePort input(uint index) const
{
std::string port = "\"in" + std::to_string(index) + "\"";
return NodePort(*m_node, port);
return NodePort(*node_, port);
}
NodePort output(uint index) const
{
std::string port = "\"out" + std::to_string(index) + "\"";
return NodePort(*m_node, port);
return NodePort(*node_, port);
}
};

View File

@ -109,12 +109,12 @@ inline constexpr uint32_t total_slot_amount_for_usable_slots(uint32_t min_usable
class LoadFactor {
private:
uint8_t m_numerator;
uint8_t m_denominator;
uint8_t numerator_;
uint8_t denominator_;
public:
LoadFactor(uint8_t numerator, uint8_t denominator)
: m_numerator(numerator), m_denominator(denominator)
: numerator_(numerator), denominator_(denominator)
{
BLI_assert(numerator > 0);
BLI_assert(numerator < denominator);
@ -127,10 +127,10 @@ class LoadFactor {
{
BLI_assert(is_power_of_2_i((int)min_total_slots));
uint32_t total_slots = this->compute_total_slots(min_usable_slots, m_numerator, m_denominator);
uint32_t total_slots = this->compute_total_slots(min_usable_slots, numerator_, denominator_);
total_slots = std::max(total_slots, min_total_slots);
uint32_t usable_slots = floor_multiplication_with_fraction(
total_slots, m_numerator, m_denominator);
total_slots, numerator_, denominator_);
BLI_assert(min_usable_slots <= usable_slots);
*r_total_slots = total_slots;
@ -261,17 +261,17 @@ template<typename Pointer> struct PointerKeyInfo {
class HashTableStats {
private:
Vector<uint32_t> m_keys_by_collision_count;
uint32_t m_total_collisions;
float m_average_collisions;
uint32_t m_size;
uint32_t m_capacity;
uint32_t m_removed_amount;
float m_load_factor;
float m_removed_load_factor;
uint32_t m_size_per_element;
uint32_t m_size_in_bytes;
const void *m_address;
Vector<uint32_t> keys_by_collision_count_;
uint32_t total_collisions_;
float average_collisions_;
uint32_t size_;
uint32_t capacity_;
uint32_t removed_amount_;
float load_factor_;
float removed_load_factor_;
uint32_t size_per_element_;
uint32_t size_in_bytes_;
const void *address_;
public:
/**
@ -286,47 +286,47 @@ class HashTableStats {
template<typename HashTable, typename Keys>
HashTableStats(const HashTable &hash_table, const Keys &keys)
{
m_total_collisions = 0;
m_size = hash_table.size();
m_capacity = hash_table.capacity();
m_removed_amount = hash_table.removed_amount();
m_size_per_element = hash_table.size_per_element();
m_size_in_bytes = hash_table.size_in_bytes();
m_address = (const void *)&hash_table;
total_collisions_ = 0;
size_ = hash_table.size();
capacity_ = hash_table.capacity();
removed_amount_ = hash_table.removed_amount();
size_per_element_ = hash_table.size_per_element();
size_in_bytes_ = hash_table.size_in_bytes();
address_ = (const void *)&hash_table;
for (const auto &key : keys) {
uint32_t collisions = hash_table.count_collisions(key);
if (m_keys_by_collision_count.size() <= collisions) {
m_keys_by_collision_count.append_n_times(
0, collisions - m_keys_by_collision_count.size() + 1);
if (keys_by_collision_count_.size() <= collisions) {
keys_by_collision_count_.append_n_times(0,
collisions - keys_by_collision_count_.size() + 1);
}
m_keys_by_collision_count[collisions]++;
m_total_collisions += collisions;
keys_by_collision_count_[collisions]++;
total_collisions_ += collisions;
}
m_average_collisions = (m_size == 0) ? 0 : (float)m_total_collisions / (float)m_size;
m_load_factor = (float)m_size / (float)m_capacity;
m_removed_load_factor = (float)m_removed_amount / (float)m_capacity;
average_collisions_ = (size_ == 0) ? 0 : (float)total_collisions_ / (float)size_;
load_factor_ = (float)size_ / (float)capacity_;
removed_load_factor_ = (float)removed_amount_ / (float)capacity_;
}
void print(StringRef name = "")
{
std::cout << "Hash Table Stats: " << name << "\n";
std::cout << " Address: " << m_address << "\n";
std::cout << " Total Slots: " << m_capacity << "\n";
std::cout << " Occupied Slots: " << m_size << " (" << m_load_factor * 100.0f << " %)\n";
std::cout << " Removed Slots: " << m_removed_amount << " (" << m_removed_load_factor * 100.0f
std::cout << " Address: " << address_ << "\n";
std::cout << " Total Slots: " << capacity_ << "\n";
std::cout << " Occupied Slots: " << size_ << " (" << load_factor_ * 100.0f << " %)\n";
std::cout << " Removed Slots: " << removed_amount_ << " (" << removed_load_factor_ * 100.0f
<< " %)\n";
char memory_size_str[15];
BLI_str_format_byte_unit(memory_size_str, m_size_in_bytes, true);
BLI_str_format_byte_unit(memory_size_str, size_in_bytes_, true);
std::cout << " Size: ~" << memory_size_str << "\n";
std::cout << " Size per Slot: " << m_size_per_element << " bytes\n";
std::cout << " Size per Slot: " << size_per_element_ << " bytes\n";
std::cout << " Average Collisions: " << m_average_collisions << "\n";
for (uint32_t collision_count : m_keys_by_collision_count.index_range()) {
std::cout << " Average Collisions: " << average_collisions_ << "\n";
for (uint32_t collision_count : keys_by_collision_count_.index_range()) {
std::cout << " " << collision_count
<< " Collisions: " << m_keys_by_collision_count[collision_count] << "\n";
<< " Collisions: " << keys_by_collision_count_[collision_count] << "\n";
}
}
};

View File

@ -46,7 +46,7 @@ namespace blender {
class IndexMask {
private:
/* The underlying reference to sorted integers. */
Span<uint> m_indices;
Span<uint> indices_;
public:
/* Creates an IndexMask that contains no indices. */
@ -57,7 +57,7 @@ class IndexMask {
* This constructor asserts that the given integers are in ascending order and that there are no
* duplicates.
*/
IndexMask(Span<uint> indices) : m_indices(indices)
IndexMask(Span<uint> indices) : indices_(indices)
{
#ifdef DEBUG
for (uint i = 1; i < indices.size(); i++) {
@ -70,7 +70,7 @@ class IndexMask {
* Use this method when you know that no indices are skipped. It is more efficient than preparing
* an integer array all the time.
*/
IndexMask(IndexRange range) : m_indices(range.as_span())
IndexMask(IndexRange range) : indices_(range.as_span())
{
}
@ -97,17 +97,17 @@ class IndexMask {
operator Span<uint>() const
{
return m_indices;
return indices_;
}
const uint *begin() const
{
return m_indices.begin();
return indices_.begin();
}
const uint *end() const
{
return m_indices.end();
return indices_.end();
}
/**
@ -116,7 +116,7 @@ class IndexMask {
*/
uint operator[](uint n) const
{
return m_indices[n];
return indices_[n];
}
/**
@ -125,17 +125,17 @@ class IndexMask {
*/
uint min_array_size() const
{
if (m_indices.size() == 0) {
if (indices_.size() == 0) {
return 0;
}
else {
return m_indices.last() + 1;
return indices_.last() + 1;
}
}
Span<uint> indices() const
{
return m_indices;
return indices_;
}
/**
@ -143,7 +143,7 @@ class IndexMask {
*/
bool is_range() const
{
return m_indices.size() > 0 && m_indices.last() - m_indices.first() == m_indices.size() - 1;
return indices_.size() > 0 && indices_.last() - indices_.first() == indices_.size() - 1;
}
/**
@ -153,7 +153,7 @@ class IndexMask {
IndexRange as_range() const
{
BLI_assert(this->is_range());
return IndexRange{m_indices.first(), m_indices.size()};
return IndexRange{indices_.first(), indices_.size()};
}
/**
@ -172,7 +172,7 @@ class IndexMask {
}
}
else {
for (uint i : m_indices) {
for (uint i : indices_) {
callback(i);
}
}
@ -187,7 +187,7 @@ class IndexMask {
*/
IndexRange index_range() const
{
return m_indices.index_range();
return indices_.index_range();
}
/**
@ -195,7 +195,7 @@ class IndexMask {
*/
uint last() const
{
return m_indices.last();
return indices_.last();
}
/**
@ -203,7 +203,7 @@ class IndexMask {
*/
uint size() const
{
return m_indices.size();
return indices_.size();
}
};

View File

@ -70,59 +70,59 @@ template<typename T> class Span;
class IndexRange {
private:
uint m_start = 0;
uint m_size = 0;
uint start_ = 0;
uint size_ = 0;
public:
IndexRange() = default;
explicit IndexRange(uint size) : m_start(0), m_size(size)
explicit IndexRange(uint size) : start_(0), size_(size)
{
}
IndexRange(uint start, uint size) : m_start(start), m_size(size)
IndexRange(uint start, uint size) : start_(start), size_(size)
{
}
template<typename T>
IndexRange(const tbb::blocked_range<T> &range) : m_start(range.begin()), m_size(range.size())
IndexRange(const tbb::blocked_range<T> &range) : start_(range.begin()), size_(range.size())
{
}
class Iterator {
private:
uint m_current;
uint current_;
public:
Iterator(uint current) : m_current(current)
Iterator(uint current) : current_(current)
{
}
Iterator &operator++()
{
m_current++;
current_++;
return *this;
}
bool operator!=(const Iterator &iterator) const
{
return m_current != iterator.m_current;
return current_ != iterator.current_;
}
uint operator*() const
{
return m_current;
return current_;
}
};
Iterator begin() const
{
return Iterator(m_start);
return Iterator(start_);
}
Iterator end() const
{
return Iterator(m_start + m_size);
return Iterator(start_ + size_);
}
/**
@ -131,7 +131,7 @@ class IndexRange {
uint operator[](uint index) const
{
BLI_assert(index < this->size());
return m_start + index;
return start_ + index;
}
/**
@ -139,7 +139,7 @@ class IndexRange {
*/
friend bool operator==(IndexRange a, IndexRange b)
{
return (a.m_size == b.m_size) && (a.m_start == b.m_start || a.m_size == 0);
return (a.size_ == b.size_) && (a.start_ == b.start_ || a.size_ == 0);
}
/**
@ -147,7 +147,7 @@ class IndexRange {
*/
uint size() const
{
return m_size;
return size_;
}
/**
@ -155,7 +155,7 @@ class IndexRange {
*/
IndexRange after(uint n) const
{
return IndexRange(m_start + m_size, n);
return IndexRange(start_ + size_, n);
}
/**
@ -163,7 +163,7 @@ class IndexRange {
*/
IndexRange before(uint n) const
{
return IndexRange(m_start - n, n);
return IndexRange(start_ - n, n);
}
/**
@ -173,7 +173,7 @@ class IndexRange {
uint first() const
{
BLI_assert(this->size() > 0);
return m_start;
return start_;
}
/**
@ -183,7 +183,7 @@ class IndexRange {
uint last() const
{
BLI_assert(this->size() > 0);
return m_start + m_size - 1;
return start_ + size_ - 1;
}
/**
@ -191,7 +191,7 @@ class IndexRange {
*/
uint one_after_last() const
{
return m_start + m_size;
return start_ + size_;
}
/**
@ -199,7 +199,7 @@ class IndexRange {
*/
uint start() const
{
return m_start;
return start_;
}
/**
@ -207,7 +207,7 @@ class IndexRange {
*/
bool contains(uint value) const
{
return value >= m_start && value < m_start + m_size;
return value >= start_ && value < start_ + size_;
}
/**
@ -215,8 +215,8 @@ class IndexRange {
*/
IndexRange slice(uint start, uint size) const
{
uint new_start = m_start + start;
BLI_assert(new_start + size <= m_start + m_size || size == 0);
uint new_start = start_ + start;
BLI_assert(new_start + size <= start_ + size_ || size == 0);
return IndexRange(new_start, size);
}
IndexRange slice(IndexRange range) const

View File

@ -33,30 +33,30 @@ namespace blender {
template<typename Allocator = GuardedAllocator> class LinearAllocator : NonCopyable, NonMovable {
private:
Allocator m_allocator;
Vector<void *> m_owned_buffers;
Vector<Span<char>> m_unused_borrowed_buffers;
Allocator allocator_;
Vector<void *> owned_buffers_;
Vector<Span<char>> unused_borrowed_buffers_;
uintptr_t m_current_begin;
uintptr_t m_current_end;
uint m_next_min_alloc_size;
uintptr_t current_begin_;
uintptr_t current_end_;
uint next_min_alloc_size_;
#ifdef DEBUG
uint m_debug_allocated_amount = 0;
uint debug_allocated_amount_ = 0;
#endif
public:
LinearAllocator()
{
m_current_begin = 0;
m_current_end = 0;
m_next_min_alloc_size = 64;
current_begin_ = 0;
current_end_ = 0;
next_min_alloc_size_ = 64;
}
~LinearAllocator()
{
for (void *ptr : m_owned_buffers) {
m_allocator.deallocate(ptr);
for (void *ptr : owned_buffers_) {
allocator_.deallocate(ptr);
}
}
@ -72,15 +72,15 @@ template<typename Allocator = GuardedAllocator> class LinearAllocator : NonCopya
BLI_assert(is_power_of_2_i(alignment));
#ifdef DEBUG
m_debug_allocated_amount += size;
debug_allocated_amount_ += size;
#endif
uintptr_t alignment_mask = alignment - 1;
uintptr_t potential_allocation_begin = (m_current_begin + alignment_mask) & ~alignment_mask;
uintptr_t potential_allocation_begin = (current_begin_ + alignment_mask) & ~alignment_mask;
uintptr_t potential_allocation_end = potential_allocation_begin + size;
if (potential_allocation_end <= m_current_end) {
m_current_begin = potential_allocation_end;
if (potential_allocation_end <= current_end_) {
current_begin_ = potential_allocation_end;
return (void *)potential_allocation_begin;
}
else {
@ -183,7 +183,7 @@ template<typename Allocator = GuardedAllocator> class LinearAllocator : NonCopya
*/
void provide_buffer(void *buffer, uint size)
{
m_unused_borrowed_buffers.append(Span<char>((char *)buffer, size));
unused_borrowed_buffers_.append(Span<char>((char *)buffer, size));
}
template<size_t Size, size_t Alignment>
@ -195,23 +195,23 @@ template<typename Allocator = GuardedAllocator> class LinearAllocator : NonCopya
private:
void allocate_new_buffer(uint min_allocation_size)
{
for (uint i : m_unused_borrowed_buffers.index_range()) {
Span<char> buffer = m_unused_borrowed_buffers[i];
for (uint i : unused_borrowed_buffers_.index_range()) {
Span<char> buffer = unused_borrowed_buffers_[i];
if (buffer.size() >= min_allocation_size) {
m_unused_borrowed_buffers.remove_and_reorder(i);
m_current_begin = (uintptr_t)buffer.begin();
m_current_end = (uintptr_t)buffer.end();
unused_borrowed_buffers_.remove_and_reorder(i);
current_begin_ = (uintptr_t)buffer.begin();
current_end_ = (uintptr_t)buffer.end();
return;
}
}
uint size_in_bytes = power_of_2_min_u(std::max(min_allocation_size, m_next_min_alloc_size));
m_next_min_alloc_size = size_in_bytes * 2;
uint size_in_bytes = power_of_2_min_u(std::max(min_allocation_size, next_min_alloc_size_));
next_min_alloc_size_ = size_in_bytes * 2;
void *buffer = m_allocator.allocate(size_in_bytes, 8, AT);
m_owned_buffers.append(buffer);
m_current_begin = (uintptr_t)buffer;
m_current_end = m_current_begin + size_in_bytes;
void *buffer = allocator_.allocate(size_in_bytes, 8, AT);
owned_buffers_.append(buffer);
current_begin_ = (uintptr_t)buffer;
current_end_ = current_begin_ + size_in_bytes;
}
};

View File

@ -33,10 +33,10 @@ namespace blender {
template<typename T> class ListBaseWrapper {
private:
ListBase *m_listbase;
ListBase *listbase_;
public:
ListBaseWrapper(ListBase *listbase) : m_listbase(listbase)
ListBaseWrapper(ListBase *listbase) : listbase_(listbase)
{
BLI_assert(listbase);
}
@ -47,17 +47,17 @@ template<typename T> class ListBaseWrapper {
class Iterator {
private:
ListBase *m_listbase;
T *m_current;
ListBase *listbase_;
T *current_;
public:
Iterator(ListBase *listbase, T *current) : m_listbase(listbase), m_current(current)
Iterator(ListBase *listbase, T *current) : listbase_(listbase), current_(current)
{
}
Iterator &operator++()
{
m_current = m_current->next;
current_ = current_->next;
return *this;
}
@ -70,28 +70,28 @@ template<typename T> class ListBaseWrapper {
bool operator!=(const Iterator &iterator) const
{
return m_current != iterator.m_current;
return current_ != iterator.current_;
}
T *operator*() const
{
return m_current;
return current_;
}
};
Iterator begin() const
{
return Iterator(m_listbase, (T *)m_listbase->first);
return Iterator(listbase_, (T *)listbase_->first);
}
Iterator end() const
{
return Iterator(m_listbase, nullptr);
return Iterator(listbase_, nullptr);
}
T get(uint index) const
{
void *ptr = BLI_findlink(m_listbase, index);
void *ptr = BLI_findlink(listbase_, index);
BLI_assert(ptr);
return (T *)ptr;
}

View File

@ -129,30 +129,30 @@ class Map {
* Slots are either empty, occupied or removed. The number of occupied slots can be computed by
* subtracting the removed slots from the occupied-and-removed slots.
*/
uint32_t m_removed_slots;
uint32_t m_occupied_and_removed_slots;
uint32_t removed_slots_;
uint32_t occupied_and_removed_slots_;
/**
* The maximum number of slots that can be used (either occupied or removed) until the set has to
* grow. This is the total number of slots times the max load factor.
*/
uint32_t m_usable_slots;
uint32_t usable_slots_;
/**
* The number of slots minus one. This is a bit mask that can be used to turn any integer into a
* valid slot index efficiently.
*/
uint32_t m_slot_mask;
uint32_t slot_mask_;
/** This is called to hash incoming keys. */
Hash m_hash;
Hash hash_;
/** This is called to check equality of two keys. */
IsEqual m_is_equal;
IsEqual is_equal_;
/** The max load factor is 1/2 = 50% by default. */
#define LOAD_FACTOR 1, 2
LoadFactor m_max_load_factor = LoadFactor(LOAD_FACTOR);
LoadFactor max_load_factor_ = LoadFactor(LOAD_FACTOR);
using SlotArray =
Array<Slot, LoadFactor::compute_total_slots(InlineBufferCapacity, LOAD_FACTOR), Allocator>;
#undef LOAD_FACTOR
@ -161,12 +161,12 @@ class Map {
* This is the array that contains the actual slots. There is always at least one empty slot and
* the size of the array is a power of two.
*/
SlotArray m_slots;
SlotArray slots_;
/** Iterate over a slot index sequence for a given hash. */
#define MAP_SLOT_PROBING_BEGIN(HASH, R_SLOT) \
SLOT_PROBING_BEGIN (ProbingStrategy, HASH, m_slot_mask, SLOT_INDEX) \
auto &R_SLOT = m_slots[SLOT_INDEX];
SLOT_PROBING_BEGIN (ProbingStrategy, HASH, slot_mask_, SLOT_INDEX) \
auto &R_SLOT = slots_[SLOT_INDEX];
#define MAP_SLOT_PROBING_END() SLOT_PROBING_END()
public:
@ -176,13 +176,13 @@ class Map {
* operation is performed on the first insertion.
*/
Map()
: m_removed_slots(0),
m_occupied_and_removed_slots(0),
m_usable_slots(0),
m_slot_mask(0),
m_hash(),
m_is_equal(),
m_slots(1)
: removed_slots_(0),
occupied_and_removed_slots_(0),
usable_slots_(0),
slot_mask_(0),
hash_(),
is_equal_(),
slots_(1)
{
}
@ -191,13 +191,13 @@ class Map {
Map(const Map &other) = default;
Map(Map &&other) noexcept
: m_removed_slots(other.m_removed_slots),
m_occupied_and_removed_slots(other.m_occupied_and_removed_slots),
m_usable_slots(other.m_usable_slots),
m_slot_mask(other.m_slot_mask),
m_hash(std::move(other.m_hash)),
m_is_equal(std::move(other.m_is_equal)),
m_slots(std::move(other.m_slots))
: removed_slots_(other.removed_slots_),
occupied_and_removed_slots_(other.occupied_and_removed_slots_),
usable_slots_(other.usable_slots_),
slot_mask_(other.slot_mask_),
hash_(std::move(other.hash_)),
is_equal_(std::move(other.is_equal_)),
slots_(std::move(other.slots_))
{
other.~Map();
new (&other) Map();
@ -233,19 +233,19 @@ class Map {
*/
void add_new(const Key &key, const Value &value)
{
this->add_new__impl(key, value, m_hash(key));
this->add_new__impl(key, value, hash_(key));
}
void add_new(const Key &key, Value &&value)
{
this->add_new__impl(key, std::move(value), m_hash(key));
this->add_new__impl(key, std::move(value), hash_(key));
}
void add_new(Key &&key, const Value &value)
{
this->add_new__impl(std::move(key), value, m_hash(key));
this->add_new__impl(std::move(key), value, hash_(key));
}
void add_new(Key &&key, Value &&value)
{
this->add_new__impl(std::move(key), std::move(value), m_hash(key));
this->add_new__impl(std::move(key), std::move(value), hash_(key));
}
/**
@ -279,7 +279,7 @@ class Map {
bool add_as(ForwardKey &&key, ForwardValue &&value)
{
return this->add__impl(
std::forward<ForwardKey>(key), std::forward<ForwardValue>(value), m_hash(key));
std::forward<ForwardKey>(key), std::forward<ForwardValue>(value), hash_(key));
}
/**
@ -313,7 +313,7 @@ class Map {
bool add_overwrite_as(ForwardKey &&key, ForwardValue &&value)
{
return this->add_overwrite__impl(
std::forward<ForwardKey>(key), std::forward<ForwardValue>(value), m_hash(key));
std::forward<ForwardKey>(key), std::forward<ForwardValue>(value), hash_(key));
}
/**
@ -331,7 +331,7 @@ class Map {
*/
template<typename ForwardKey> bool contains_as(const ForwardKey &key) const
{
return this->contains__impl(key, m_hash(key));
return this->contains__impl(key, hash_(key));
}
/**
@ -350,7 +350,7 @@ class Map {
*/
template<typename ForwardKey> bool remove_as(const ForwardKey &key)
{
return this->remove__impl(key, m_hash(key));
return this->remove__impl(key, hash_(key));
}
/**
@ -368,7 +368,7 @@ class Map {
*/
template<typename ForwardKey> void remove_contained_as(const ForwardKey &key)
{
this->remove_contained__impl(key, m_hash(key));
this->remove_contained__impl(key, hash_(key));
}
/**
@ -385,7 +385,7 @@ class Map {
*/
template<typename ForwardKey> Value pop_as(const ForwardKey &key)
{
return this->pop__impl(key, m_hash(key));
return this->pop__impl(key, hash_(key));
}
/**
@ -402,7 +402,7 @@ class Map {
*/
template<typename ForwardKey> std::optional<Value> pop_try_as(const ForwardKey &key)
{
return this->pop_try__impl(key, m_hash(key));
return this->pop_try__impl(key, hash_(key));
}
/**
@ -424,7 +424,7 @@ class Map {
template<typename ForwardKey, typename ForwardValue>
Value pop_default_as(const ForwardKey &key, ForwardValue &&default_value)
{
return this->pop_default__impl(key, std::forward<ForwardValue>(default_value), m_hash(key));
return this->pop_default__impl(key, std::forward<ForwardValue>(default_value), hash_(key));
}
/**
@ -470,7 +470,7 @@ class Map {
const ModifyValueF &modify_value) -> decltype(create_value(nullptr))
{
return this->add_or_modify__impl(
std::forward<ForwardKey>(key), create_value, modify_value, m_hash(key));
std::forward<ForwardKey>(key), create_value, modify_value, hash_(key));
}
/**
@ -493,11 +493,11 @@ class Map {
*/
template<typename ForwardKey> const Value *lookup_ptr_as(const ForwardKey &key) const
{
return this->lookup_ptr__impl(key, m_hash(key));
return this->lookup_ptr__impl(key, hash_(key));
}
template<typename ForwardKey> Value *lookup_ptr_as(const ForwardKey &key)
{
return const_cast<Value *>(this->lookup_ptr__impl(key, m_hash(key)));
return const_cast<Value *>(this->lookup_ptr__impl(key, hash_(key)));
}
/**
@ -582,7 +582,7 @@ class Map {
Value &lookup_or_add_as(ForwardKey &&key, ForwardValue &&value)
{
return this->lookup_or_add__impl(
std::forward<ForwardKey>(key), std::forward<ForwardValue>(value), m_hash(key));
std::forward<ForwardKey>(key), std::forward<ForwardValue>(value), hash_(key));
}
/**
@ -610,7 +610,7 @@ class Map {
template<typename ForwardKey, typename CreateValueF>
Value &lookup_or_add_cb_as(ForwardKey &&key, const CreateValueF &create_value)
{
return this->lookup_or_add_cb__impl(std::forward<ForwardKey>(key), create_value, m_hash(key));
return this->lookup_or_add_cb__impl(std::forward<ForwardKey>(key), create_value, hash_(key));
}
/**
@ -641,9 +641,9 @@ class Map {
*/
template<typename FuncT> void foreach_item(const FuncT &func) const
{
uint32_t size = m_slots.size();
uint32_t size = slots_.size();
for (uint32_t i = 0; i < size; i++) {
const Slot &slot = m_slots[i];
const Slot &slot = slots_[i];
if (slot.is_occupied()) {
const Key &key = *slot.key();
const Value &value = *slot.value();
@ -657,21 +657,19 @@ class Map {
* This uses the "curiously recurring template pattern" (CRTP).
*/
template<typename SubIterator> struct BaseIterator {
Slot *m_slots;
uint32_t m_total_slots;
uint32_t m_current_slot;
Slot *slots_;
uint32_t total_slots_;
uint32_t current_slot_;
BaseIterator(const Slot *slots, uint32_t total_slots, uint32_t current_slot)
: m_slots(const_cast<Slot *>(slots)),
m_total_slots(total_slots),
m_current_slot(current_slot)
: slots_(const_cast<Slot *>(slots)), total_slots_(total_slots), current_slot_(current_slot)
{
}
BaseIterator &operator++()
{
while (++m_current_slot < m_total_slots) {
if (m_slots[m_current_slot].is_occupied()) {
while (++current_slot_ < total_slots_) {
if (slots_[current_slot_].is_occupied()) {
break;
}
}
@ -680,16 +678,16 @@ class Map {
friend bool operator!=(const BaseIterator &a, const BaseIterator &b)
{
BLI_assert(a.m_slots == b.m_slots);
BLI_assert(a.m_total_slots == b.m_total_slots);
return a.m_current_slot != b.m_current_slot;
BLI_assert(a.slots_ == b.slots_);
BLI_assert(a.total_slots_ == b.total_slots_);
return a.current_slot_ != b.current_slot_;
}
SubIterator begin() const
{
for (uint32_t i = 0; i < m_total_slots; i++) {
if (m_slots[i].is_occupied()) {
return SubIterator(m_slots, m_total_slots, i);
for (uint32_t i = 0; i < total_slots_; i++) {
if (slots_[i].is_occupied()) {
return SubIterator(slots_, total_slots_, i);
}
}
return this->end();
@ -697,12 +695,12 @@ class Map {
SubIterator end() const
{
return SubIterator(m_slots, m_total_slots, m_total_slots);
return SubIterator(slots_, total_slots_, total_slots_);
}
Slot &current_slot() const
{
return m_slots[m_current_slot];
return slots_[current_slot_];
}
};
@ -794,7 +792,7 @@ class Map {
*/
KeyIterator keys() const
{
return KeyIterator(m_slots.data(), m_slots.size(), 0);
return KeyIterator(slots_.data(), slots_.size(), 0);
}
/**
@ -803,7 +801,7 @@ class Map {
*/
ValueIterator values() const
{
return ValueIterator(m_slots.data(), m_slots.size(), 0);
return ValueIterator(slots_.data(), slots_.size(), 0);
}
/**
@ -812,7 +810,7 @@ class Map {
*/
MutableValueIterator values()
{
return MutableValueIterator(m_slots.data(), m_slots.size(), 0);
return MutableValueIterator(slots_.data(), slots_.size(), 0);
}
/**
@ -822,7 +820,7 @@ class Map {
*/
ItemIterator items() const
{
return ItemIterator(m_slots.data(), m_slots.size(), 0);
return ItemIterator(slots_.data(), slots_.size(), 0);
}
/**
@ -834,7 +832,7 @@ class Map {
*/
MutableItemIterator items()
{
return MutableItemIterator(m_slots.data(), m_slots.size(), 0);
return MutableItemIterator(slots_.data(), slots_.size(), 0);
}
/**
@ -851,7 +849,7 @@ class Map {
*/
uint32_t size() const
{
return m_occupied_and_removed_slots - m_removed_slots;
return occupied_and_removed_slots_ - removed_slots_;
}
/**
@ -861,7 +859,7 @@ class Map {
*/
bool is_empty() const
{
return m_occupied_and_removed_slots == m_removed_slots;
return occupied_and_removed_slots_ == removed_slots_;
}
/**
@ -869,7 +867,7 @@ class Map {
*/
uint32_t capacity() const
{
return m_slots.size();
return slots_.size();
}
/**
@ -877,7 +875,7 @@ class Map {
*/
uint32_t removed_amount() const
{
return m_removed_slots;
return removed_slots_;
}
/**
@ -894,7 +892,7 @@ class Map {
*/
uint32_t size_in_bytes() const
{
return (uint32_t)(sizeof(Slot) * m_slots.size());
return (uint32_t)(sizeof(Slot) * slots_.size());
}
/**
@ -903,7 +901,7 @@ class Map {
*/
void reserve(uint32_t n)
{
if (m_usable_slots < n) {
if (usable_slots_ < n) {
this->realloc_and_reinsert(n);
}
}
@ -923,14 +921,14 @@ class Map {
*/
uint32_t count_collisions(const Key &key) const
{
return this->count_collisions__impl(key, m_hash(key));
return this->count_collisions__impl(key, hash_(key));
}
private:
BLI_NOINLINE void realloc_and_reinsert(uint32_t min_usable_slots)
{
uint32_t total_slots, usable_slots;
m_max_load_factor.compute_total_and_usable_slots(
max_load_factor_.compute_total_and_usable_slots(
SlotArray::inline_buffer_capacity(), min_usable_slots, &total_slots, &usable_slots);
uint32_t new_slot_mask = total_slots - 1;
@ -938,18 +936,18 @@ class Map {
* Optimize the case when the map was empty beforehand. We can avoid some copies here.
*/
if (this->size() == 0) {
m_slots.~Array();
new (&m_slots) SlotArray(total_slots);
m_removed_slots = 0;
m_occupied_and_removed_slots = 0;
m_usable_slots = usable_slots;
m_slot_mask = new_slot_mask;
slots_.~Array();
new (&slots_) SlotArray(total_slots);
removed_slots_ = 0;
occupied_and_removed_slots_ = 0;
usable_slots_ = usable_slots;
slot_mask_ = new_slot_mask;
return;
}
SlotArray new_slots(total_slots);
for (Slot &slot : m_slots) {
for (Slot &slot : slots_) {
if (slot.is_occupied()) {
this->add_after_grow_and_destruct_old(slot, new_slots, new_slot_mask);
}
@ -957,12 +955,12 @@ class Map {
/* All occupied slots have been destructed already and empty/removed slots are assumed to be
* trivially destructible. */
m_slots.clear_without_destruct();
m_slots = std::move(new_slots);
m_occupied_and_removed_slots -= m_removed_slots;
m_usable_slots = usable_slots;
m_removed_slots = 0;
m_slot_mask = new_slot_mask;
slots_.clear_without_destruct();
slots_ = std::move(new_slots);
occupied_and_removed_slots_ -= removed_slots_;
usable_slots_ = usable_slots;
removed_slots_ = 0;
slot_mask_ = new_slot_mask;
}
void add_after_grow_and_destruct_old(Slot &old_slot,
@ -986,7 +984,7 @@ class Map {
if (slot.is_empty()) {
return false;
}
if (slot.contains(key, m_is_equal, hash)) {
if (slot.contains(key, is_equal_, hash)) {
return true;
}
}
@ -999,7 +997,7 @@ class Map {
BLI_assert(!this->contains_as(key));
this->ensure_can_add();
m_occupied_and_removed_slots++;
occupied_and_removed_slots_++;
MAP_SLOT_PROBING_BEGIN (hash, slot) {
if (slot.is_empty()) {
@ -1018,10 +1016,10 @@ class Map {
MAP_SLOT_PROBING_BEGIN (hash, slot) {
if (slot.is_empty()) {
slot.occupy(std::forward<ForwardKey>(key), std::forward<ForwardValue>(value), hash);
m_occupied_and_removed_slots++;
occupied_and_removed_slots_++;
return true;
}
if (slot.contains(key, m_is_equal, hash)) {
if (slot.contains(key, is_equal_, hash)) {
return false;
}
}
@ -1031,9 +1029,9 @@ class Map {
template<typename ForwardKey> bool remove__impl(const ForwardKey &key, uint32_t hash)
{
MAP_SLOT_PROBING_BEGIN (hash, slot) {
if (slot.contains(key, m_is_equal, hash)) {
if (slot.contains(key, is_equal_, hash)) {
slot.remove();
m_removed_slots++;
removed_slots_++;
return true;
}
if (slot.is_empty()) {
@ -1047,10 +1045,10 @@ class Map {
{
BLI_assert(this->contains_as(key));
m_removed_slots++;
removed_slots_++;
MAP_SLOT_PROBING_BEGIN (hash, slot) {
if (slot.contains(key, m_is_equal, hash)) {
if (slot.contains(key, is_equal_, hash)) {
slot.remove();
return;
}
@ -1062,10 +1060,10 @@ class Map {
{
BLI_assert(this->contains_as(key));
m_removed_slots++;
removed_slots_++;
MAP_SLOT_PROBING_BEGIN (hash, slot) {
if (slot.contains(key, m_is_equal, hash)) {
if (slot.contains(key, is_equal_, hash)) {
Value value = std::move(*slot.value());
slot.remove();
return value;
@ -1078,10 +1076,10 @@ class Map {
std::optional<Value> pop_try__impl(const ForwardKey &key, uint32_t hash)
{
MAP_SLOT_PROBING_BEGIN (hash, slot) {
if (slot.contains(key, m_is_equal, hash)) {
if (slot.contains(key, is_equal_, hash)) {
std::optional<Value> value = std::move(*slot.value());
slot.remove();
m_removed_slots++;
removed_slots_++;
return value;
}
if (slot.is_empty()) {
@ -1095,10 +1093,10 @@ class Map {
Value pop_default__impl(const ForwardKey &key, ForwardValue &&default_value, uint32_t hash)
{
MAP_SLOT_PROBING_BEGIN (hash, slot) {
if (slot.contains(key, m_is_equal, hash)) {
if (slot.contains(key, is_equal_, hash)) {
Value value = std::move(*slot.value());
slot.remove();
m_removed_slots++;
removed_slots_++;
return value;
}
if (slot.is_empty()) {
@ -1123,12 +1121,12 @@ class Map {
MAP_SLOT_PROBING_BEGIN (hash, slot) {
if (slot.is_empty()) {
m_occupied_and_removed_slots++;
occupied_and_removed_slots_++;
slot.occupy_without_value(std::forward<ForwardKey>(key), hash);
Value *value_ptr = slot.value();
return create_value(value_ptr);
}
if (slot.contains(key, m_is_equal, hash)) {
if (slot.contains(key, is_equal_, hash)) {
Value *value_ptr = slot.value();
return modify_value(value_ptr);
}
@ -1144,10 +1142,10 @@ class Map {
MAP_SLOT_PROBING_BEGIN (hash, slot) {
if (slot.is_empty()) {
slot.occupy(std::forward<ForwardKey>(key), create_value(), hash);
m_occupied_and_removed_slots++;
occupied_and_removed_slots_++;
return *slot.value();
}
if (slot.contains(key, m_is_equal, hash)) {
if (slot.contains(key, is_equal_, hash)) {
return *slot.value();
}
}
@ -1162,10 +1160,10 @@ class Map {
MAP_SLOT_PROBING_BEGIN (hash, slot) {
if (slot.is_empty()) {
slot.occupy(std::forward<ForwardKey>(key), std::forward<ForwardValue>(value), hash);
m_occupied_and_removed_slots++;
occupied_and_removed_slots_++;
return *slot.value();
}
if (slot.contains(key, m_is_equal, hash)) {
if (slot.contains(key, is_equal_, hash)) {
return *slot.value();
}
}
@ -1194,7 +1192,7 @@ class Map {
if (slot.is_empty()) {
return nullptr;
}
if (slot.contains(key, m_is_equal, hash)) {
if (slot.contains(key, is_equal_, hash)) {
return slot.value();
}
}
@ -1207,7 +1205,7 @@ class Map {
uint32_t collisions = 0;
MAP_SLOT_PROBING_BEGIN (hash, slot) {
if (slot.contains(key, m_is_equal, hash)) {
if (slot.contains(key, is_equal_, hash)) {
return collisions;
}
if (slot.is_empty()) {
@ -1220,9 +1218,9 @@ class Map {
void ensure_can_add()
{
if (m_occupied_and_removed_slots >= m_usable_slots) {
if (occupied_and_removed_slots_ >= usable_slots_) {
this->realloc_and_reinsert(this->size() + 1);
BLI_assert(m_occupied_and_removed_slots < m_usable_slots);
BLI_assert(occupied_and_removed_slots_ < usable_slots_);
}
}
};
@ -1234,59 +1232,59 @@ class Map {
template<typename Key, typename Value> class StdUnorderedMapWrapper {
private:
using MapType = std::unordered_map<Key, Value, blender::DefaultHash<Key>>;
MapType m_map;
MapType map_;
public:
uint32_t size() const
{
return (uint32_t)m_map.size();
return (uint32_t)map_.size();
}
bool is_empty() const
{
return m_map.empty();
return map_.empty();
}
void reserve(uint32_t n)
{
m_map.reserve(n);
map_.reserve(n);
}
template<typename ForwardKey, typename ForwardValue>
void add_new(ForwardKey &&key, ForwardValue &&value)
{
m_map.insert({std::forward<ForwardKey>(key), std::forward<ForwardValue>(value)});
map_.insert({std::forward<ForwardKey>(key), std::forward<ForwardValue>(value)});
}
template<typename ForwardKey, typename ForwardValue>
bool add(ForwardKey &&key, ForwardValue &&value)
{
return m_map.insert({std::forward<ForwardKey>(key), std::forward<ForwardValue>(value)}).second;
return map_.insert({std::forward<ForwardKey>(key), std::forward<ForwardValue>(value)}).second;
}
bool contains(const Key &key) const
{
return m_map.find(key) != m_map.end();
return map_.find(key) != map_.end();
}
bool remove(const Key &key)
{
return (bool)m_map.erase(key);
return (bool)map_.erase(key);
}
Value &lookup(const Key &key)
{
return m_map.find(key)->second;
return map_.find(key)->second;
}
const Value &lookup(const Key &key) const
{
return m_map.find(key)->second;
return map_.find(key)->second;
}
void clear()
{
m_map.clear();
map_.clear();
}
void print_stats(StringRef UNUSED(name) = "") const

View File

@ -52,9 +52,9 @@ template<typename Key, typename Value> class SimpleMapSlot {
Removed = 2,
};
State m_state;
AlignedBuffer<sizeof(Key), alignof(Key)> m_key_buffer;
AlignedBuffer<sizeof(Value), alignof(Value)> m_value_buffer;
State state_;
AlignedBuffer<sizeof(Key), alignof(Key)> key_buffer_;
AlignedBuffer<sizeof(Value), alignof(Value)> value_buffer_;
public:
/**
@ -62,7 +62,7 @@ template<typename Key, typename Value> class SimpleMapSlot {
*/
SimpleMapSlot()
{
m_state = Empty;
state_ = Empty;
}
/**
@ -70,7 +70,7 @@ template<typename Key, typename Value> class SimpleMapSlot {
*/
~SimpleMapSlot()
{
if (m_state == Occupied) {
if (state_ == Occupied) {
this->key()->~Key();
this->value()->~Value();
}
@ -82,8 +82,8 @@ template<typename Key, typename Value> class SimpleMapSlot {
*/
SimpleMapSlot(const SimpleMapSlot &other)
{
m_state = other.m_state;
if (other.m_state == Occupied) {
state_ = other.state_;
if (other.state_ == Occupied) {
new ((void *)this->key()) Key(*other.key());
new ((void *)this->value()) Value(*other.value());
}
@ -96,8 +96,8 @@ template<typename Key, typename Value> class SimpleMapSlot {
*/
SimpleMapSlot(SimpleMapSlot &&other) noexcept
{
m_state = other.m_state;
if (other.m_state == Occupied) {
state_ = other.state_;
if (other.state_ == Occupied) {
new ((void *)this->key()) Key(std::move(*other.key()));
new ((void *)this->value()) Value(std::move(*other.value()));
}
@ -108,7 +108,7 @@ template<typename Key, typename Value> class SimpleMapSlot {
*/
Key *key()
{
return (Key *)m_key_buffer.ptr();
return (Key *)key_buffer_.ptr();
}
/**
@ -116,7 +116,7 @@ template<typename Key, typename Value> class SimpleMapSlot {
*/
const Key *key() const
{
return (const Key *)m_key_buffer.ptr();
return (const Key *)key_buffer_.ptr();
}
/**
@ -124,7 +124,7 @@ template<typename Key, typename Value> class SimpleMapSlot {
*/
Value *value()
{
return (Value *)m_value_buffer.ptr();
return (Value *)value_buffer_.ptr();
}
/**
@ -132,7 +132,7 @@ template<typename Key, typename Value> class SimpleMapSlot {
*/
const Value *value() const
{
return (const Value *)m_value_buffer.ptr();
return (const Value *)value_buffer_.ptr();
}
/**
@ -140,7 +140,7 @@ template<typename Key, typename Value> class SimpleMapSlot {
*/
bool is_occupied() const
{
return m_state == Occupied;
return state_ == Occupied;
}
/**
@ -148,7 +148,7 @@ template<typename Key, typename Value> class SimpleMapSlot {
*/
bool is_empty() const
{
return m_state == Empty;
return state_ == Empty;
}
/**
@ -169,7 +169,7 @@ template<typename Key, typename Value> class SimpleMapSlot {
{
BLI_assert(!this->is_occupied());
BLI_assert(other.is_occupied());
m_state = Occupied;
state_ = Occupied;
new ((void *)this->key()) Key(std::move(*other.key()));
new ((void *)this->value()) Value(std::move(*other.value()));
other.key()->~Key();
@ -183,7 +183,7 @@ template<typename Key, typename Value> class SimpleMapSlot {
template<typename ForwardKey, typename IsEqual>
bool contains(const ForwardKey &key, const IsEqual &is_equal, uint32_t UNUSED(hash)) const
{
if (m_state == Occupied) {
if (state_ == Occupied) {
return is_equal(key, *this->key());
}
return false;
@ -208,7 +208,7 @@ template<typename Key, typename Value> class SimpleMapSlot {
template<typename ForwardKey> void occupy_without_value(ForwardKey &&key, uint32_t UNUSED(hash))
{
BLI_assert(!this->is_occupied());
m_state = Occupied;
state_ = Occupied;
new ((void *)this->key()) Key(std::forward<ForwardKey>(key));
}
@ -219,7 +219,7 @@ template<typename Key, typename Value> class SimpleMapSlot {
void remove()
{
BLI_assert(this->is_occupied());
m_state = Removed;
state_ = Removed;
this->key()->~Key();
this->value()->~Value();
}
@ -235,61 +235,61 @@ template<typename Key, typename Value> class SimpleMapSlot {
*/
template<typename Key, typename Value, typename KeyInfo> class IntrusiveMapSlot {
private:
Key m_key = KeyInfo::get_empty();
AlignedBuffer<sizeof(Value), alignof(Value)> m_value_buffer;
Key key_ = KeyInfo::get_empty();
AlignedBuffer<sizeof(Value), alignof(Value)> value_buffer_;
public:
IntrusiveMapSlot() = default;
~IntrusiveMapSlot()
{
if (KeyInfo::is_not_empty_or_removed(m_key)) {
if (KeyInfo::is_not_empty_or_removed(key_)) {
this->value()->~Value();
}
}
IntrusiveMapSlot(const IntrusiveMapSlot &other) : m_key(other.m_key)
IntrusiveMapSlot(const IntrusiveMapSlot &other) : key_(other.key_)
{
if (KeyInfo::is_not_empty_or_removed(m_key)) {
if (KeyInfo::is_not_empty_or_removed(key_)) {
new ((void *)this->value()) Value(*other.value());
}
}
IntrusiveMapSlot(IntrusiveMapSlot &&other) noexcept : m_key(other.m_key)
IntrusiveMapSlot(IntrusiveMapSlot &&other) noexcept : key_(other.key_)
{
if (KeyInfo::is_not_empty_or_removed(m_key)) {
if (KeyInfo::is_not_empty_or_removed(key_)) {
new ((void *)this->value()) Value(std::move(*other.value()));
}
}
Key *key()
{
return &m_key;
return &key_;
}
const Key *key() const
{
return &m_key;
return &key_;
}
Value *value()
{
return (Value *)m_value_buffer.ptr();
return (Value *)value_buffer_.ptr();
}
const Value *value() const
{
return (const Value *)m_value_buffer.ptr();
return (const Value *)value_buffer_.ptr();
}
bool is_occupied() const
{
return KeyInfo::is_not_empty_or_removed(m_key);
return KeyInfo::is_not_empty_or_removed(key_);
}
bool is_empty() const
{
return KeyInfo::is_empty(m_key);
return KeyInfo::is_empty(key_);
}
template<typename Hash> uint32_t get_hash(const Hash &hash)
@ -302,9 +302,9 @@ template<typename Key, typename Value, typename KeyInfo> class IntrusiveMapSlot
{
BLI_assert(!this->is_occupied());
BLI_assert(other.is_occupied());
m_key = std::move(other.m_key);
key_ = std::move(other.key_);
new ((void *)this->value()) Value(std::move(*other.value()));
other.m_key.~Key();
other.key_.~Key();
other.value()->~Value();
}
@ -312,7 +312,7 @@ template<typename Key, typename Value, typename KeyInfo> class IntrusiveMapSlot
bool contains(const ForwardKey &key, const IsEqual &is_equal, uint32_t UNUSED(hash)) const
{
BLI_assert(KeyInfo::is_not_empty_or_removed(key));
return is_equal(key, m_key);
return is_equal(key, key_);
}
template<typename ForwardKey, typename ForwardValue>
@ -328,13 +328,13 @@ template<typename Key, typename Value, typename KeyInfo> class IntrusiveMapSlot
{
BLI_assert(!this->is_occupied());
BLI_assert(KeyInfo::is_not_empty_or_removed(key));
m_key = std::forward<ForwardKey>(key);
key_ = std::forward<ForwardKey>(key);
}
void remove()
{
BLI_assert(this->is_occupied());
KeyInfo::remove(m_key);
KeyInfo::remove(key_);
this->value()->~Value();
}
};

View File

@ -228,17 +228,17 @@ template<typename T> using destruct_ptr = std::unique_ptr<T, DestructValueAtAddr
template<size_t Size, size_t Alignment> class alignas(Alignment) AlignedBuffer {
private:
/* Don't create an empty array. This causes problems with some compilers. */
char m_buffer[(Size > 0) ? Size : 1];
char buffer_[(Size > 0) ? Size : 1];
public:
void *ptr()
{
return (void *)m_buffer;
return (void *)buffer_;
}
const void *ptr() const
{
return (const void *)m_buffer;
return (const void *)buffer_;
}
};

View File

@ -65,21 +65,21 @@ namespace blender {
*/
class LinearProbingStrategy {
private:
uint32_t m_hash;
uint32_t hash_;
public:
LinearProbingStrategy(uint32_t hash) : m_hash(hash)
LinearProbingStrategy(uint32_t hash) : hash_(hash)
{
}
void next()
{
m_hash++;
hash_++;
}
uint32_t get() const
{
return m_hash;
return hash_;
}
uint32_t linear_steps() const
@ -101,25 +101,25 @@ class LinearProbingStrategy {
*/
class QuadraticProbingStrategy {
private:
uint32_t m_original_hash;
uint32_t m_current_hash;
uint32_t m_iteration;
uint32_t original_hash_;
uint32_t current_hash_;
uint32_t iteration_;
public:
QuadraticProbingStrategy(uint32_t hash)
: m_original_hash(hash), m_current_hash(hash), m_iteration(1)
: original_hash_(hash), current_hash_(hash), iteration_(1)
{
}
void next()
{
m_current_hash = m_original_hash + ((m_iteration * m_iteration + m_iteration) >> 1);
m_iteration++;
current_hash_ = original_hash_ + ((iteration_ * iteration_ + iteration_) >> 1);
iteration_++;
}
uint32_t get() const
{
return m_current_hash;
return current_hash_;
}
uint32_t linear_steps() const
@ -140,11 +140,11 @@ class QuadraticProbingStrategy {
*/
template<uint32_t LinearSteps = 1, bool PreShuffle = false> class PythonProbingStrategy {
private:
uint32_t m_hash;
uint32_t m_perturb;
uint32_t hash_;
uint32_t perturb_;
public:
PythonProbingStrategy(uint32_t hash) : m_hash(hash), m_perturb(hash)
PythonProbingStrategy(uint32_t hash) : hash_(hash), perturb_(hash)
{
if (PreShuffle) {
this->next();
@ -153,13 +153,13 @@ template<uint32_t LinearSteps = 1, bool PreShuffle = false> class PythonProbingS
void next()
{
m_perturb >>= 5;
m_hash = 5 * m_hash + 1 + m_perturb;
perturb_ >>= 5;
hash_ = 5 * hash_ + 1 + perturb_;
}
uint32_t get() const
{
return m_hash;
return hash_;
}
uint32_t linear_steps() const
@ -175,11 +175,11 @@ template<uint32_t LinearSteps = 1, bool PreShuffle = false> class PythonProbingS
*/
template<uint32_t LinearSteps = 2, bool PreShuffle = false> class ShuffleProbingStrategy {
private:
uint32_t m_hash;
uint32_t m_perturb;
uint32_t hash_;
uint32_t perturb_;
public:
ShuffleProbingStrategy(uint32_t hash) : m_hash(hash), m_perturb(hash)
ShuffleProbingStrategy(uint32_t hash) : hash_(hash), perturb_(hash)
{
if (PreShuffle) {
this->next();
@ -188,18 +188,18 @@ template<uint32_t LinearSteps = 2, bool PreShuffle = false> class ShuffleProbing
void next()
{
if (m_perturb != 0) {
m_perturb >>= 10;
m_hash = ((m_hash >> 16) ^ m_hash) * 0x45d9f3b + m_perturb;
if (perturb_ != 0) {
perturb_ >>= 10;
hash_ = ((hash_ >> 16) ^ hash_) * 0x45d9f3b + perturb_;
}
else {
m_hash = 5 * m_hash + 1;
hash_ = 5 * hash_ + 1;
}
}
uint32_t get() const
{
return m_hash;
return hash_;
}
uint32_t linear_steps() const

View File

@ -128,30 +128,30 @@ class Set {
* Slots are either empty, occupied or removed. The number of occupied slots can be computed by
* subtracting the removed slots from the occupied-and-removed slots.
*/
uint32_t m_removed_slots;
uint32_t m_occupied_and_removed_slots;
uint32_t removed_slots_;
uint32_t occupied_and_removed_slots_;
/**
* The maximum number of slots that can be used (either occupied or removed) until the set has to
* grow. This is the total number of slots times the max load factor.
*/
uint32_t m_usable_slots;
uint32_t usable_slots_;
/**
* The number of slots minus one. This is a bit mask that can be used to turn any integer into a
* valid slot index efficiently.
*/
uint32_t m_slot_mask;
uint32_t slot_mask_;
/** This is called to hash incoming keys. */
Hash m_hash;
Hash hash_;
/** This is called to check equality of two keys. */
IsEqual m_is_equal;
IsEqual is_equal_;
/** The max load factor is 1/2 = 50% by default. */
#define LOAD_FACTOR 1, 2
LoadFactor m_max_load_factor = LoadFactor(LOAD_FACTOR);
LoadFactor max_load_factor_ = LoadFactor(LOAD_FACTOR);
using SlotArray =
Array<Slot, LoadFactor::compute_total_slots(InlineBufferCapacity, LOAD_FACTOR), Allocator>;
#undef LOAD_FACTOR
@ -160,12 +160,12 @@ class Set {
* This is the array that contains the actual slots. There is always at least one empty slot and
* the size of the array is a power of two.
*/
SlotArray m_slots;
SlotArray slots_;
/** Iterate over a slot index sequence for a given hash. */
#define SET_SLOT_PROBING_BEGIN(HASH, R_SLOT) \
SLOT_PROBING_BEGIN (ProbingStrategy, HASH, m_slot_mask, SLOT_INDEX) \
auto &R_SLOT = m_slots[SLOT_INDEX];
SLOT_PROBING_BEGIN (ProbingStrategy, HASH, slot_mask_, SLOT_INDEX) \
auto &R_SLOT = slots_[SLOT_INDEX];
#define SET_SLOT_PROBING_END() SLOT_PROBING_END()
public:
@ -175,11 +175,11 @@ class Set {
* grow operation is performed on the first insertion.
*/
Set()
: m_removed_slots(0),
m_occupied_and_removed_slots(0),
m_usable_slots(0),
m_slot_mask(0),
m_slots(1)
: removed_slots_(0),
occupied_and_removed_slots_(0),
usable_slots_(0),
slot_mask_(0),
slots_(1)
{
}
@ -196,13 +196,13 @@ class Set {
Set(const Set &other) = default;
Set(Set &&other) noexcept
: m_removed_slots(other.m_removed_slots),
m_occupied_and_removed_slots(other.m_occupied_and_removed_slots),
m_usable_slots(other.m_usable_slots),
m_slot_mask(other.m_slot_mask),
m_hash(std::move(other.m_hash)),
m_is_equal(std::move(other.m_is_equal)),
m_slots(std::move(other.m_slots))
: removed_slots_(other.removed_slots_),
occupied_and_removed_slots_(other.occupied_and_removed_slots_),
usable_slots_(other.usable_slots_),
slot_mask_(other.slot_mask_),
hash_(std::move(other.hash_)),
is_equal_(std::move(other.is_equal_)),
slots_(std::move(other.slots_))
{
other.~Set();
new (&other) Set();
@ -239,11 +239,11 @@ class Set {
*/
void add_new(const Key &key)
{
this->add_new__impl(key, m_hash(key));
this->add_new__impl(key, hash_(key));
}
void add_new(Key &&key)
{
this->add_new__impl(std::move(key), m_hash(key));
this->add_new__impl(std::move(key), hash_(key));
}
/**
@ -266,7 +266,7 @@ class Set {
*/
template<typename ForwardKey> bool add_as(ForwardKey &&key)
{
return this->add__impl(std::forward<ForwardKey>(key), m_hash(key));
return this->add__impl(std::forward<ForwardKey>(key), hash_(key));
}
/**
@ -309,7 +309,7 @@ class Set {
*/
template<typename ForwardKey> bool contains_as(const ForwardKey &key) const
{
return this->contains__impl(key, m_hash(key));
return this->contains__impl(key, hash_(key));
}
/**
@ -327,7 +327,7 @@ class Set {
*/
template<typename ForwardKey> bool remove_as(const ForwardKey &key)
{
return this->remove__impl(key, m_hash(key));
return this->remove__impl(key, hash_(key));
}
/**
@ -344,7 +344,7 @@ class Set {
*/
template<typename ForwardKey> void remove_contained_as(const ForwardKey &key)
{
this->remove_contained__impl(key, m_hash(key));
this->remove_contained__impl(key, hash_(key));
}
/**
@ -356,20 +356,20 @@ class Set {
*/
class Iterator {
private:
const Slot *m_slots;
uint32_t m_total_slots;
uint32_t m_current_slot;
const Slot *slots_;
uint32_t total_slots_;
uint32_t current_slot_;
public:
Iterator(const Slot *slots, uint32_t total_slots, uint32_t current_slot)
: m_slots(slots), m_total_slots(total_slots), m_current_slot(current_slot)
: slots_(slots), total_slots_(total_slots), current_slot_(current_slot)
{
}
Iterator &operator++()
{
while (++m_current_slot < m_total_slots) {
if (m_slots[m_current_slot].is_occupied()) {
while (++current_slot_ < total_slots_) {
if (slots_[current_slot_].is_occupied()) {
break;
}
}
@ -378,22 +378,22 @@ class Set {
const Key &operator*() const
{
return *m_slots[m_current_slot].key();
return *slots_[current_slot_].key();
}
friend bool operator!=(const Iterator &a, const Iterator &b)
{
BLI_assert(a.m_slots == b.m_slots);
BLI_assert(a.m_total_slots == b.m_total_slots);
return a.m_current_slot != b.m_current_slot;
BLI_assert(a.slots_ == b.slots_);
BLI_assert(a.total_slots_ == b.total_slots_);
return a.current_slot_ != b.current_slot_;
}
};
Iterator begin() const
{
for (uint32_t i = 0; i < m_slots.size(); i++) {
if (m_slots[i].is_occupied()) {
return Iterator(m_slots.data(), m_slots.size(), i);
for (uint32_t i = 0; i < slots_.size(); i++) {
if (slots_[i].is_occupied()) {
return Iterator(slots_.data(), slots_.size(), i);
}
}
return this->end();
@ -401,7 +401,7 @@ class Set {
Iterator end() const
{
return Iterator(m_slots.data(), m_slots.size(), m_slots.size());
return Iterator(slots_.data(), slots_.size(), slots_.size());
}
/**
@ -419,7 +419,7 @@ class Set {
*/
uint32_t count_collisions(const Key &key) const
{
return this->count_collisions__impl(key, m_hash(key));
return this->count_collisions__impl(key, hash_(key));
}
/**
@ -445,7 +445,7 @@ class Set {
*/
uint32_t size() const
{
return m_occupied_and_removed_slots - m_removed_slots;
return occupied_and_removed_slots_ - removed_slots_;
}
/**
@ -453,7 +453,7 @@ class Set {
*/
bool is_empty() const
{
return m_occupied_and_removed_slots == m_removed_slots;
return occupied_and_removed_slots_ == removed_slots_;
}
/**
@ -461,7 +461,7 @@ class Set {
*/
uint32_t capacity() const
{
return m_slots.size();
return slots_.size();
}
/**
@ -469,7 +469,7 @@ class Set {
*/
uint32_t removed_amount() const
{
return m_removed_slots;
return removed_slots_;
}
/**
@ -486,7 +486,7 @@ class Set {
*/
uint32_t size_in_bytes() const
{
return sizeof(Slot) * m_slots.size();
return sizeof(Slot) * slots_.size();
}
/**
@ -495,7 +495,7 @@ class Set {
*/
void reserve(uint32_t n)
{
if (m_usable_slots < n) {
if (usable_slots_ < n) {
this->realloc_and_reinsert(n);
}
}
@ -530,7 +530,7 @@ class Set {
BLI_NOINLINE void realloc_and_reinsert(uint32_t min_usable_slots)
{
uint32_t total_slots, usable_slots;
m_max_load_factor.compute_total_and_usable_slots(
max_load_factor_.compute_total_and_usable_slots(
SlotArray::inline_buffer_capacity(), min_usable_slots, &total_slots, &usable_slots);
uint32_t new_slot_mask = total_slots - 1;
@ -538,19 +538,19 @@ class Set {
* Optimize the case when the set was empty beforehand. We can avoid some copies here.
*/
if (this->size() == 0) {
m_slots.~Array();
new (&m_slots) SlotArray(total_slots);
m_removed_slots = 0;
m_occupied_and_removed_slots = 0;
m_usable_slots = usable_slots;
m_slot_mask = new_slot_mask;
slots_.~Array();
new (&slots_) SlotArray(total_slots);
removed_slots_ = 0;
occupied_and_removed_slots_ = 0;
usable_slots_ = usable_slots;
slot_mask_ = new_slot_mask;
return;
}
/* The grown array that we insert the keys into. */
SlotArray new_slots(total_slots);
for (Slot &slot : m_slots) {
for (Slot &slot : slots_) {
if (slot.is_occupied()) {
this->add_after_grow_and_destruct_old(slot, new_slots, new_slot_mask);
}
@ -558,12 +558,12 @@ class Set {
/* All occupied slots have been destructed already and empty/removed slots are assumed to be
* trivially destructible. */
m_slots.clear_without_destruct();
m_slots = std::move(new_slots);
m_occupied_and_removed_slots -= m_removed_slots;
m_usable_slots = usable_slots;
m_removed_slots = 0;
m_slot_mask = new_slot_mask;
slots_.clear_without_destruct();
slots_ = std::move(new_slots);
occupied_and_removed_slots_ -= removed_slots_;
usable_slots_ = usable_slots;
removed_slots_ = 0;
slot_mask_ = new_slot_mask;
}
void add_after_grow_and_destruct_old(Slot &old_slot,
@ -588,7 +588,7 @@ class Set {
if (slot.is_empty()) {
return false;
}
if (slot.contains(key, m_is_equal, hash)) {
if (slot.contains(key, is_equal_, hash)) {
return true;
}
}
@ -604,7 +604,7 @@ class Set {
SET_SLOT_PROBING_BEGIN (hash, slot) {
if (slot.is_empty()) {
slot.occupy(std::forward<ForwardKey>(key), hash);
m_occupied_and_removed_slots++;
occupied_and_removed_slots_++;
return;
}
}
@ -618,10 +618,10 @@ class Set {
SET_SLOT_PROBING_BEGIN (hash, slot) {
if (slot.is_empty()) {
slot.occupy(std::forward<ForwardKey>(key), hash);
m_occupied_and_removed_slots++;
occupied_and_removed_slots_++;
return true;
}
if (slot.contains(key, m_is_equal, hash)) {
if (slot.contains(key, is_equal_, hash)) {
return false;
}
}
@ -631,9 +631,9 @@ class Set {
template<typename ForwardKey> bool remove__impl(const ForwardKey &key, uint32_t hash)
{
SET_SLOT_PROBING_BEGIN (hash, slot) {
if (slot.contains(key, m_is_equal, hash)) {
if (slot.contains(key, is_equal_, hash)) {
slot.remove();
m_removed_slots++;
removed_slots_++;
return true;
}
if (slot.is_empty()) {
@ -646,10 +646,10 @@ class Set {
template<typename ForwardKey> void remove_contained__impl(const ForwardKey &key, uint32_t hash)
{
BLI_assert(this->contains_as(key));
m_removed_slots++;
removed_slots_++;
SET_SLOT_PROBING_BEGIN (hash, slot) {
if (slot.contains(key, m_is_equal, hash)) {
if (slot.contains(key, is_equal_, hash)) {
slot.remove();
return;
}
@ -663,7 +663,7 @@ class Set {
uint32_t collisions = 0;
SET_SLOT_PROBING_BEGIN (hash, slot) {
if (slot.contains(key, m_is_equal, hash)) {
if (slot.contains(key, is_equal_, hash)) {
return collisions;
}
if (slot.is_empty()) {
@ -676,9 +676,9 @@ class Set {
void ensure_can_add()
{
if (m_occupied_and_removed_slots >= m_usable_slots) {
if (occupied_and_removed_slots_ >= usable_slots_) {
this->realloc_and_reinsert(this->size() + 1);
BLI_assert(m_occupied_and_removed_slots < m_usable_slots);
BLI_assert(occupied_and_removed_slots_ < usable_slots_);
}
}
};
@ -690,77 +690,77 @@ class Set {
template<typename Key> class StdUnorderedSetWrapper {
private:
using SetType = std::unordered_set<Key, blender::DefaultHash<Key>>;
SetType m_set;
SetType set_;
public:
uint32_t size() const
{
return (uint32_t)m_set.size();
return (uint32_t)set_.size();
}
bool is_empty() const
{
return m_set.empty();
return set_.empty();
}
void reserve(uint32_t n)
{
m_set.reserve(n);
set_.reserve(n);
}
void add_new(const Key &key)
{
m_set.insert(key);
set_.insert(key);
}
void add_new(Key &&key)
{
m_set.insert(std::move(key));
set_.insert(std::move(key));
}
bool add(const Key &key)
{
return m_set.insert(key).second;
return set_.insert(key).second;
}
bool add(Key &&key)
{
return m_set.insert(std::move(key)).second;
return set_.insert(std::move(key)).second;
}
void add_multiple(Span<Key> keys)
{
for (const Key &key : keys) {
m_set.insert(key);
set_.insert(key);
}
}
bool contains(const Key &key) const
{
return m_set.find(key) != m_set.end();
return set_.find(key) != set_.end();
}
bool remove(const Key &key)
{
return (bool)m_set.erase(key);
return (bool)set_.erase(key);
}
void remove_contained(const Key &key)
{
return m_set.erase(key);
return set_.erase(key);
}
void clear()
{
m_set.clear();
set_.clear();
}
typename SetType::iterator begin() const
{
return m_set.begin();
return set_.begin();
}
typename SetType::iterator end() const
{
return m_set.end();
return set_.end();
}
};

View File

@ -50,8 +50,8 @@ template<typename Key> class SimpleSetSlot {
Removed = 2,
};
State m_state;
AlignedBuffer<sizeof(Key), alignof(Key)> m_buffer;
State state_;
AlignedBuffer<sizeof(Key), alignof(Key)> buffer_;
public:
/**
@ -59,7 +59,7 @@ template<typename Key> class SimpleSetSlot {
*/
SimpleSetSlot()
{
m_state = Empty;
state_ = Empty;
}
/**
@ -67,7 +67,7 @@ template<typename Key> class SimpleSetSlot {
*/
~SimpleSetSlot()
{
if (m_state == Occupied) {
if (state_ == Occupied) {
this->key()->~Key();
}
}
@ -78,8 +78,8 @@ template<typename Key> class SimpleSetSlot {
*/
SimpleSetSlot(const SimpleSetSlot &other)
{
m_state = other.m_state;
if (other.m_state == Occupied) {
state_ = other.state_;
if (other.state_ == Occupied) {
new ((void *)this->key()) Key(*other.key());
}
}
@ -91,8 +91,8 @@ template<typename Key> class SimpleSetSlot {
*/
SimpleSetSlot(SimpleSetSlot &&other) noexcept
{
m_state = other.m_state;
if (other.m_state == Occupied) {
state_ = other.state_;
if (other.state_ == Occupied) {
new ((void *)this->key()) Key(std::move(*other.key()));
}
}
@ -102,7 +102,7 @@ template<typename Key> class SimpleSetSlot {
*/
Key *key()
{
return (Key *)m_buffer.ptr();
return (Key *)buffer_.ptr();
}
/**
@ -110,7 +110,7 @@ template<typename Key> class SimpleSetSlot {
*/
const Key *key() const
{
return (const Key *)m_buffer.ptr();
return (const Key *)buffer_.ptr();
}
/**
@ -118,7 +118,7 @@ template<typename Key> class SimpleSetSlot {
*/
bool is_occupied() const
{
return m_state == Occupied;
return state_ == Occupied;
}
/**
@ -126,7 +126,7 @@ template<typename Key> class SimpleSetSlot {
*/
bool is_empty() const
{
return m_state == Empty;
return state_ == Empty;
}
/**
@ -147,7 +147,7 @@ template<typename Key> class SimpleSetSlot {
{
BLI_assert(!this->is_occupied());
BLI_assert(other.is_occupied());
m_state = Occupied;
state_ = Occupied;
new ((void *)this->key()) Key(std::move(*other.key()));
other.key()->~Key();
}
@ -159,7 +159,7 @@ template<typename Key> class SimpleSetSlot {
template<typename ForwardKey, typename IsEqual>
bool contains(const ForwardKey &key, const IsEqual &is_equal, uint32_t UNUSED(hash)) const
{
if (m_state == Occupied) {
if (state_ == Occupied) {
return is_equal(key, *this->key());
}
return false;
@ -172,7 +172,7 @@ template<typename Key> class SimpleSetSlot {
template<typename ForwardKey> void occupy(ForwardKey &&key, uint32_t UNUSED(hash))
{
BLI_assert(!this->is_occupied());
m_state = Occupied;
state_ = Occupied;
new ((void *)this->key()) Key(std::forward<ForwardKey>(key));
}
@ -182,7 +182,7 @@ template<typename Key> class SimpleSetSlot {
void remove()
{
BLI_assert(this->is_occupied());
m_state = Removed;
state_ = Removed;
this->key()->~Key();
}
};
@ -199,73 +199,73 @@ template<typename Key> class HashedSetSlot {
Removed = 2,
};
uint32_t m_hash;
State m_state;
AlignedBuffer<sizeof(Key), alignof(Key)> m_buffer;
uint32_t hash_;
State state_;
AlignedBuffer<sizeof(Key), alignof(Key)> buffer_;
public:
HashedSetSlot()
{
m_state = Empty;
state_ = Empty;
}
~HashedSetSlot()
{
if (m_state == Occupied) {
if (state_ == Occupied) {
this->key()->~Key();
}
}
HashedSetSlot(const HashedSetSlot &other)
{
m_state = other.m_state;
if (other.m_state == Occupied) {
m_hash = other.m_hash;
state_ = other.state_;
if (other.state_ == Occupied) {
hash_ = other.hash_;
new ((void *)this->key()) Key(*other.key());
}
}
HashedSetSlot(HashedSetSlot &&other) noexcept
{
m_state = other.m_state;
if (other.m_state == Occupied) {
m_hash = other.m_hash;
state_ = other.state_;
if (other.state_ == Occupied) {
hash_ = other.hash_;
new ((void *)this->key()) Key(std::move(*other.key()));
}
}
Key *key()
{
return (Key *)m_buffer.ptr();
return (Key *)buffer_.ptr();
}
const Key *key() const
{
return (const Key *)m_buffer.ptr();
return (const Key *)buffer_.ptr();
}
bool is_occupied() const
{
return m_state == Occupied;
return state_ == Occupied;
}
bool is_empty() const
{
return m_state == Empty;
return state_ == Empty;
}
template<typename Hash> uint32_t get_hash(const Hash &UNUSED(hash)) const
{
BLI_assert(this->is_occupied());
return m_hash;
return hash_;
}
void relocate_occupied_here(HashedSetSlot &other, uint32_t hash)
{
BLI_assert(!this->is_occupied());
BLI_assert(other.is_occupied());
m_state = Occupied;
m_hash = hash;
state_ = Occupied;
hash_ = hash;
new ((void *)this->key()) Key(std::move(*other.key()));
other.key()->~Key();
}
@ -273,9 +273,9 @@ template<typename Key> class HashedSetSlot {
template<typename ForwardKey, typename IsEqual>
bool contains(const ForwardKey &key, const IsEqual &is_equal, uint32_t hash) const
{
/* m_hash might be uninitialized here, but that is ok. */
if (m_hash == hash) {
if (m_state == Occupied) {
/* hash_ might be uninitialized here, but that is ok. */
if (hash_ == hash) {
if (state_ == Occupied) {
return is_equal(key, *this->key());
}
}
@ -285,15 +285,15 @@ template<typename Key> class HashedSetSlot {
template<typename ForwardKey> void occupy(ForwardKey &&key, uint32_t hash)
{
BLI_assert(!this->is_occupied());
m_state = Occupied;
m_hash = hash;
state_ = Occupied;
hash_ = hash;
new ((void *)this->key()) Key(std::forward<ForwardKey>(key));
}
void remove()
{
BLI_assert(this->is_occupied());
m_state = Removed;
state_ = Removed;
this->key()->~Key();
}
};
@ -308,7 +308,7 @@ template<typename Key> class HashedSetSlot {
*/
template<typename Key, typename KeyInfo> class IntrusiveSetSlot {
private:
Key m_key = KeyInfo::get_empty();
Key key_ = KeyInfo::get_empty();
public:
IntrusiveSetSlot() = default;
@ -318,43 +318,43 @@ template<typename Key, typename KeyInfo> class IntrusiveSetSlot {
Key *key()
{
return &m_key;
return &key_;
}
const Key *key() const
{
return &m_key;
return &key_;
}
bool is_occupied() const
{
return KeyInfo::is_not_empty_or_removed(m_key);
return KeyInfo::is_not_empty_or_removed(key_);
}
bool is_empty() const
{
return KeyInfo::is_empty(m_key);
return KeyInfo::is_empty(key_);
}
template<typename Hash> uint32_t get_hash(const Hash &hash) const
{
BLI_assert(this->is_occupied());
return hash(m_key);
return hash(key_);
}
void relocate_occupied_here(IntrusiveSetSlot &other, uint32_t UNUSED(hash))
{
BLI_assert(!this->is_occupied());
BLI_assert(other.is_occupied());
m_key = std::move(other.m_key);
other.m_key.~Key();
key_ = std::move(other.key_);
other.key_.~Key();
}
template<typename ForwardKey, typename IsEqual>
bool contains(const ForwardKey &key, const IsEqual &is_equal, uint32_t UNUSED(hash)) const
{
BLI_assert(KeyInfo::is_not_empty_or_removed(key));
return is_equal(m_key, key);
return is_equal(key_, key);
}
template<typename ForwardKey> void occupy(ForwardKey &&key, uint32_t UNUSED(hash))
@ -362,13 +362,13 @@ template<typename Key, typename KeyInfo> class IntrusiveSetSlot {
BLI_assert(!this->is_occupied());
BLI_assert(KeyInfo::is_not_empty_or_removed(key));
m_key = std::forward<ForwardKey>(key);
key_ = std::forward<ForwardKey>(key);
}
void remove()
{
BLI_assert(this->is_occupied());
KeyInfo::remove(m_key);
KeyInfo::remove(key_);
}
};

View File

@ -87,8 +87,8 @@ namespace blender {
*/
template<typename T> class Span {
private:
const T *m_start = nullptr;
uint m_size = 0;
const T *start_ = nullptr;
uint size_ = 0;
public:
/**
@ -96,7 +96,7 @@ template<typename T> class Span {
*/
Span() = default;
Span(const T *start, uint size) : m_start(start), m_size(size)
Span(const T *start, uint size) : start_(start), size_(size)
{
}
@ -141,7 +141,7 @@ template<typename T> class Span {
Span slice(uint start, uint size) const
{
BLI_assert(start + size <= this->size() || size == 0);
return Span(m_start + start, size);
return Span(start_ + start, size);
}
Span slice(IndexRange range) const
@ -195,17 +195,17 @@ template<typename T> class Span {
*/
const T *data() const
{
return m_start;
return start_;
}
const T *begin() const
{
return m_start;
return start_;
}
const T *end() const
{
return m_start + m_size;
return start_ + size_;
}
/**
@ -214,8 +214,8 @@ template<typename T> class Span {
*/
const T &operator[](uint index) const
{
BLI_assert(index < m_size);
return m_start[index];
BLI_assert(index < size_);
return start_[index];
}
/**
@ -223,7 +223,7 @@ template<typename T> class Span {
*/
uint size() const
{
return m_size;
return size_;
}
/**
@ -231,7 +231,7 @@ template<typename T> class Span {
*/
bool is_empty() const
{
return m_size == 0;
return size_ == 0;
}
/**
@ -239,7 +239,7 @@ template<typename T> class Span {
*/
uint size_in_bytes() const
{
return sizeof(T) * m_size;
return sizeof(T) * size_;
}
/**
@ -286,8 +286,8 @@ template<typename T> class Span {
*/
const T &first() const
{
BLI_assert(m_size > 0);
return m_start[0];
BLI_assert(size_ > 0);
return start_[0];
}
/**
@ -296,8 +296,8 @@ template<typename T> class Span {
*/
const T &last() const
{
BLI_assert(m_size > 0);
return m_start[m_size - 1];
BLI_assert(size_ > 0);
return start_[size_ - 1];
}
/**
@ -306,8 +306,8 @@ template<typename T> class Span {
*/
T get(uint index, const T &fallback) const
{
if (index < m_size) {
return m_start[index];
if (index < size_) {
return start_[index];
}
return fallback;
}
@ -320,12 +320,12 @@ template<typename T> class Span {
{
/* The size should really be smaller than that. If it is not, the calling code should be
* changed. */
BLI_assert(m_size < 1000);
BLI_assert(size_ < 1000);
for (uint i = 0; i < m_size; i++) {
const T &value = m_start[i];
for (uint j = i + 1; j < m_size; j++) {
if (value == m_start[j]) {
for (uint i = 0; i < size_; i++) {
const T &value = start_[i];
for (uint j = i + 1; j < size_; j++) {
if (value == start_[j]) {
return true;
}
}
@ -342,10 +342,10 @@ template<typename T> class Span {
{
/* The size should really be smaller than that. If it is not, the calling code should be
* changed. */
BLI_assert(m_size < 1000);
BLI_assert(size_ < 1000);
for (uint i = 0; i < m_size; i++) {
const T &value = m_start[i];
for (uint i = 0; i < size_; i++) {
const T &value = start_[i];
if (other.contains(value)) {
return true;
}
@ -369,8 +369,8 @@ template<typename T> class Span {
*/
int first_index_try(const T &search_value) const
{
for (uint i = 0; i < m_size; i++) {
if (m_start[i] == search_value) {
for (uint i = 0; i < size_; i++) {
if (start_[i] == search_value) {
return i;
}
}
@ -383,7 +383,7 @@ template<typename T> class Span {
*/
IndexRange index_range() const
{
return IndexRange(m_size);
return IndexRange(size_);
}
/**
@ -391,9 +391,9 @@ template<typename T> class Span {
*/
template<typename NewT> Span<NewT> cast() const
{
BLI_assert((m_size * sizeof(T)) % sizeof(NewT) == 0);
uint new_size = m_size * sizeof(T) / sizeof(NewT);
return Span<NewT>(reinterpret_cast<const NewT *>(m_start), new_size);
BLI_assert((size_ * sizeof(T)) % sizeof(NewT) == 0);
uint new_size = size_ * sizeof(T) / sizeof(NewT);
return Span<NewT>(reinterpret_cast<const NewT *>(start_), new_size);
}
/**
@ -402,7 +402,7 @@ template<typename T> class Span {
*/
template<typename PrintLineF> void print_as_lines(std::string name, PrintLineF print_line) const
{
std::cout << "Span: " << name << " \tSize:" << m_size << '\n';
std::cout << "Span: " << name << " \tSize:" << size_ << '\n';
for (const T &value : *this) {
std::cout << " ";
print_line(value);
@ -426,13 +426,13 @@ template<typename T> class Span {
*/
template<typename T> class MutableSpan {
private:
T *m_start;
uint m_size;
T *start_;
uint size_;
public:
MutableSpan() = default;
MutableSpan(T *start, uint size) : m_start(start), m_size(size)
MutableSpan(T *start, uint size) : start_(start), size_(size)
{
}
@ -461,7 +461,7 @@ template<typename T> class MutableSpan {
operator Span<T>() const
{
return Span<T>(m_start, m_size);
return Span<T>(start_, size_);
}
/**
@ -469,7 +469,7 @@ template<typename T> class MutableSpan {
*/
uint size() const
{
return m_size;
return size_;
}
/**
@ -477,7 +477,7 @@ template<typename T> class MutableSpan {
*/
void fill(const T &value)
{
initialized_fill_n(m_start, m_size, value);
initialized_fill_n(start_, size_, value);
}
/**
@ -487,8 +487,8 @@ template<typename T> class MutableSpan {
void fill_indices(Span<uint> indices, const T &value)
{
for (uint i : indices) {
BLI_assert(i < m_size);
m_start[i] = value;
BLI_assert(i < size_);
start_[i] = value;
}
}
@ -498,23 +498,23 @@ template<typename T> class MutableSpan {
*/
T *data() const
{
return m_start;
return start_;
}
T *begin() const
{
return m_start;
return start_;
}
T *end() const
{
return m_start + m_size;
return start_ + size_;
}
T &operator[](uint index) const
{
BLI_assert(index < this->size());
return m_start[index];
return start_[index];
}
/**
@ -524,7 +524,7 @@ template<typename T> class MutableSpan {
MutableSpan slice(uint start, uint length) const
{
BLI_assert(start + length <= this->size());
return MutableSpan(m_start + start, length);
return MutableSpan(start_ + start, length);
}
/**
@ -573,7 +573,7 @@ template<typename T> class MutableSpan {
*/
Span<T> as_span() const
{
return Span<T>(m_start, m_size);
return Span<T>(start_, size_);
}
/**
@ -582,7 +582,7 @@ template<typename T> class MutableSpan {
*/
IndexRange index_range() const
{
return IndexRange(m_size);
return IndexRange(size_);
}
/**
@ -591,8 +591,8 @@ template<typename T> class MutableSpan {
*/
T &last() const
{
BLI_assert(m_size > 0);
return m_start[m_size - 1];
BLI_assert(size_ > 0);
return start_[size_ - 1];
}
/**
@ -600,9 +600,9 @@ template<typename T> class MutableSpan {
*/
template<typename NewT> MutableSpan<NewT> cast() const
{
BLI_assert((m_size * sizeof(T)) % sizeof(NewT) == 0);
uint new_size = m_size * sizeof(T) / sizeof(NewT);
return MutableSpan<NewT>(reinterpret_cast<NewT *>(m_start), new_size);
BLI_assert((size_ * sizeof(T)) % sizeof(NewT) == 0);
uint new_size = size_ * sizeof(T) / sizeof(NewT);
return MutableSpan<NewT>(reinterpret_cast<NewT *>(start_), new_size);
}
};

View File

@ -91,48 +91,48 @@ class Stack {
* Points to one element after top-most value in the stack.
*
* Invariant:
* If m_size == 0
* then: m_top == m_inline_chunk.begin
* else: &peek() == m_top - 1;
* If size_ == 0
* then: top_ == inline_chunk_.begin
* else: &peek() == top_ - 1;
*/
T *m_top;
T *top_;
/** Points to the chunk that references the memory pointed to by m_top. */
Chunk *m_top_chunk;
/** Points to the chunk that references the memory pointed to by top_. */
Chunk *top_chunk_;
/**
* Number of elements in the entire stack. The sum of initialized element counts in the chunks.
*/
uint m_size;
uint size_;
/** The buffer used to implement small object optimization. */
AlignedBuffer<sizeof(T) * InlineBufferCapacity, alignof(T)> m_inline_buffer;
AlignedBuffer<sizeof(T) * InlineBufferCapacity, alignof(T)> inline_buffer_;
/**
* A chunk referencing the inline buffer. This is always the bottom-most chunk.
* So m_inline_chunk.below == nullptr.
* So inline_chunk_.below == nullptr.
*/
Chunk m_inline_chunk;
Chunk inline_chunk_;
/** Used for allocations when the inline buffer is not large enough. */
Allocator m_allocator;
Allocator allocator_;
public:
/**
* Initialize an empty stack. No heap allocation is done.
*/
Stack(Allocator allocator = {}) : m_allocator(allocator)
Stack(Allocator allocator = {}) : allocator_(allocator)
{
T *inline_buffer = this->inline_buffer();
m_inline_chunk.below = nullptr;
m_inline_chunk.above = nullptr;
m_inline_chunk.begin = inline_buffer;
m_inline_chunk.capacity_end = inline_buffer + InlineBufferCapacity;
inline_chunk_.below = nullptr;
inline_chunk_.above = nullptr;
inline_chunk_.begin = inline_buffer;
inline_chunk_.capacity_end = inline_buffer + InlineBufferCapacity;
m_top = inline_buffer;
m_top_chunk = &m_inline_chunk;
m_size = 0;
top_ = inline_buffer;
top_chunk_ = &inline_chunk_;
size_ = 0;
}
/**
@ -157,46 +157,45 @@ class Stack {
{
}
Stack(const Stack &other) : Stack(other.m_allocator)
Stack(const Stack &other) : Stack(other.allocator_)
{
for (const Chunk *chunk = &other.m_inline_chunk; chunk; chunk = chunk->above) {
for (const Chunk *chunk = &other.inline_chunk_; chunk; chunk = chunk->above) {
const T *begin = chunk->begin;
const T *end = (chunk == other.m_top_chunk) ? other.m_top : chunk->capacity_end;
const T *end = (chunk == other.top_chunk_) ? other.top_ : chunk->capacity_end;
this->push_multiple(Span<T>(begin, end - begin));
}
}
Stack(Stack &&other) noexcept : Stack(other.m_allocator)
Stack(Stack &&other) noexcept : Stack(other.allocator_)
{
uninitialized_relocate_n(other.inline_buffer(),
std::min(other.m_size, InlineBufferCapacity),
this->inline_buffer());
uninitialized_relocate_n(
other.inline_buffer(), std::min(other.size_, InlineBufferCapacity), this->inline_buffer());
m_inline_chunk.above = other.m_inline_chunk.above;
m_size = other.m_size;
inline_chunk_.above = other.inline_chunk_.above;
size_ = other.size_;
if (m_size <= InlineBufferCapacity) {
m_top_chunk = &m_inline_chunk;
m_top = this->inline_buffer() + m_size;
if (size_ <= InlineBufferCapacity) {
top_chunk_ = &inline_chunk_;
top_ = this->inline_buffer() + size_;
}
else {
m_top_chunk = other.m_top_chunk;
m_top = other.m_top;
top_chunk_ = other.top_chunk_;
top_ = other.top_;
}
other.m_size = 0;
other.m_inline_chunk.above = nullptr;
other.m_top_chunk = &other.m_inline_chunk;
other.m_top = other.m_top_chunk->begin;
other.size_ = 0;
other.inline_chunk_.above = nullptr;
other.top_chunk_ = &other.inline_chunk_;
other.top_ = other.top_chunk_->begin;
}
~Stack()
{
this->destruct_all_elements();
Chunk *above_chunk;
for (Chunk *chunk = m_inline_chunk.above; chunk; chunk = above_chunk) {
for (Chunk *chunk = inline_chunk_.above; chunk; chunk = above_chunk) {
above_chunk = chunk->above;
m_allocator.deallocate(chunk);
allocator_.deallocate(chunk);
}
}
@ -229,21 +228,21 @@ class Stack {
*/
void push(const T &value)
{
if (m_top == m_top_chunk->capacity_end) {
if (top_ == top_chunk_->capacity_end) {
this->activate_next_chunk(1);
}
new (m_top) T(value);
m_top++;
m_size++;
new (top_) T(value);
top_++;
size_++;
}
void push(T &&value)
{
if (m_top == m_top_chunk->capacity_end) {
if (top_ == top_chunk_->capacity_end) {
this->activate_next_chunk(1);
}
new (m_top) T(std::move(value));
m_top++;
m_size++;
new (top_) T(std::move(value));
top_++;
size_++;
}
/**
@ -252,16 +251,16 @@ class Stack {
*/
T pop()
{
BLI_assert(m_size > 0);
m_top--;
T value = std::move(*m_top);
m_top->~T();
m_size--;
BLI_assert(size_ > 0);
top_--;
T value = std::move(*top_);
top_->~T();
size_--;
if (m_top == m_top_chunk->begin) {
if (m_top_chunk->below != nullptr) {
m_top_chunk = m_top_chunk->below;
m_top = m_top_chunk->capacity_end;
if (top_ == top_chunk_->begin) {
if (top_chunk_->below != nullptr) {
top_chunk_ = top_chunk_->below;
top_ = top_chunk_->capacity_end;
}
}
return value;
@ -273,15 +272,15 @@ class Stack {
*/
T &peek()
{
BLI_assert(m_size > 0);
BLI_assert(m_top > m_top_chunk->begin);
return *(m_top - 1);
BLI_assert(size_ > 0);
BLI_assert(top_ > top_chunk_->begin);
return *(top_ - 1);
}
const T &peek() const
{
BLI_assert(m_size > 0);
BLI_assert(m_top > m_top_chunk->begin);
return *(m_top - 1);
BLI_assert(size_ > 0);
BLI_assert(top_ > top_chunk_->begin);
return *(top_ - 1);
}
/**
@ -293,19 +292,19 @@ class Stack {
{
Span<T> remaining_values = values;
while (!remaining_values.is_empty()) {
if (m_top == m_top_chunk->capacity_end) {
if (top_ == top_chunk_->capacity_end) {
this->activate_next_chunk(remaining_values.size());
}
uint remaining_capacity = m_top_chunk->capacity_end - m_top;
uint remaining_capacity = top_chunk_->capacity_end - top_;
uint amount = std::min(remaining_values.size(), remaining_capacity);
uninitialized_copy_n(remaining_values.data(), amount, m_top);
m_top += amount;
uninitialized_copy_n(remaining_values.data(), amount, top_);
top_ += amount;
remaining_values = remaining_values.drop_front(amount);
}
m_size += values.size();
size_ += values.size();
}
/**
@ -313,7 +312,7 @@ class Stack {
*/
bool is_empty() const
{
return m_size == 0;
return size_ == 0;
}
/**
@ -321,7 +320,7 @@ class Stack {
*/
uint size() const
{
return m_size;
return size_;
}
/**
@ -331,18 +330,18 @@ class Stack {
void clear()
{
this->destruct_all_elements();
m_top_chunk = &m_inline_chunk;
m_top = m_top_chunk->begin;
top_chunk_ = &inline_chunk_;
top_ = top_chunk_->begin;
}
private:
T *inline_buffer() const
{
return (T *)m_inline_buffer.ptr();
return (T *)inline_buffer_.ptr();
}
/**
* Changes m_top_chunk to point to a new chunk that is above the current one. The new chunk might
* Changes top_chunk_ to point to a new chunk that is above the current one. The new chunk might
* be smaller than the given size_hint. This happens when a chunk that has been allocated before
* is reused. The size of the new chunk will be at least one.
*
@ -350,12 +349,12 @@ class Stack {
*/
void activate_next_chunk(uint size_hint)
{
BLI_assert(m_top == m_top_chunk->capacity_end);
if (m_top_chunk->above == nullptr) {
uint new_capacity = std::max(size_hint, m_top_chunk->capacity() * 2 + 10);
BLI_assert(top_ == top_chunk_->capacity_end);
if (top_chunk_->above == nullptr) {
uint new_capacity = std::max(size_hint, top_chunk_->capacity() * 2 + 10);
/* Do a single memory allocation for the Chunk and the array it references. */
void *buffer = m_allocator.allocate(
void *buffer = allocator_.allocate(
sizeof(Chunk) + sizeof(T) * new_capacity + alignof(T), alignof(Chunk), AT);
void *chunk_buffer = buffer;
void *data_buffer = (void *)(((uintptr_t)buffer + sizeof(Chunk) + alignof(T) - 1) &
@ -365,19 +364,19 @@ class Stack {
new_chunk->begin = (T *)data_buffer;
new_chunk->capacity_end = new_chunk->begin + new_capacity;
new_chunk->above = nullptr;
new_chunk->below = m_top_chunk;
m_top_chunk->above = new_chunk;
new_chunk->below = top_chunk_;
top_chunk_->above = new_chunk;
}
m_top_chunk = m_top_chunk->above;
m_top = m_top_chunk->begin;
top_chunk_ = top_chunk_->above;
top_ = top_chunk_->begin;
}
void destruct_all_elements()
{
for (T *value = m_top_chunk->begin; value != m_top; value++) {
for (T *value = top_chunk_->begin; value != top_; value++) {
value->~T();
}
for (Chunk *chunk = m_top_chunk->below; chunk; chunk = chunk->below) {
for (Chunk *chunk = top_chunk_->below; chunk; chunk = chunk->below) {
for (T *value = chunk->begin; value != chunk->capacity_end; value++) {
value->~T();
}

View File

@ -59,10 +59,10 @@ class StringRef;
*/
class StringRefBase {
protected:
const char *m_data;
uint m_size;
const char *data_;
uint size_;
StringRefBase(const char *data, uint size) : m_data(data), m_size(size)
StringRefBase(const char *data, uint size) : data_(data), size_(size)
{
}
@ -72,7 +72,7 @@ class StringRefBase {
*/
uint size() const
{
return m_size;
return size_;
}
/**
@ -80,12 +80,12 @@ class StringRefBase {
*/
const char *data() const
{
return m_data;
return data_;
}
operator Span<char>() const
{
return Span<char>(m_data, m_size);
return Span<char>(data_, size_);
}
/**
@ -94,17 +94,17 @@ class StringRefBase {
*/
operator std::string() const
{
return std::string(m_data, m_size);
return std::string(data_, size_);
}
const char *begin() const
{
return m_data;
return data_;
}
const char *end() const
{
return m_data + m_size;
return data_ + size_;
}
/**
@ -114,8 +114,8 @@ class StringRefBase {
*/
void unsafe_copy(char *dst) const
{
memcpy(dst, m_data, m_size);
dst[m_size] = '\0';
memcpy(dst, data_, size_);
dst[size_] = '\0';
}
/**
@ -124,7 +124,7 @@ class StringRefBase {
*/
void copy(char *dst, uint dst_size) const
{
if (m_size < dst_size) {
if (size_ < dst_size) {
this->unsafe_copy(dst);
}
else {
@ -171,7 +171,7 @@ class StringRefNull : public StringRefBase {
StringRefNull(const char *str) : StringRefBase(str, (uint)strlen(str))
{
BLI_assert(str != NULL);
BLI_assert(m_data[m_size] == '\0');
BLI_assert(data_[size_] == '\0');
}
/**
@ -197,8 +197,8 @@ class StringRefNull : public StringRefBase {
char operator[](uint index) const
{
/* Use '<=' instead of just '<', so that the null character can be accessed as well. */
BLI_assert(index <= m_size);
return m_data[index];
BLI_assert(index <= size_);
return data_[index];
}
};
@ -252,8 +252,8 @@ class StringRef : public StringRefBase {
*/
StringRef drop_prefix(uint n) const
{
BLI_assert(n <= m_size);
return StringRef(m_data + n, m_size - n);
BLI_assert(n <= size_);
return StringRef(data_ + n, size_ - n);
}
/**
@ -271,8 +271,8 @@ class StringRef : public StringRefBase {
*/
char operator[](uint index) const
{
BLI_assert(index < m_size);
return m_data[index];
BLI_assert(index < size_);
return data_[index];
}
};
@ -318,11 +318,11 @@ inline bool operator!=(StringRef a, StringRef b)
*/
inline bool StringRefBase::startswith(StringRef prefix) const
{
if (m_size < prefix.m_size) {
if (size_ < prefix.size_) {
return false;
}
for (uint i = 0; i < prefix.m_size; i++) {
if (m_data[i] != prefix.m_data[i]) {
for (uint i = 0; i < prefix.size_; i++) {
if (data_[i] != prefix.data_[i]) {
return false;
}
}
@ -334,12 +334,12 @@ inline bool StringRefBase::startswith(StringRef prefix) const
*/
inline bool StringRefBase::endswith(StringRef suffix) const
{
if (m_size < suffix.m_size) {
if (size_ < suffix.size_) {
return false;
}
uint offset = m_size - suffix.m_size;
for (uint i = 0; i < suffix.m_size; i++) {
if (m_data[offset + i] != suffix.m_data[i]) {
uint offset = size_ - suffix.size_;
for (uint i = 0; i < suffix.size_; i++) {
if (data_[offset + i] != suffix.data_[i]) {
return false;
}
}
@ -351,8 +351,8 @@ inline bool StringRefBase::endswith(StringRef suffix) const
*/
inline StringRef StringRefBase::substr(uint start, uint size) const
{
BLI_assert(start + size <= m_size);
return StringRef(m_data + start, size);
BLI_assert(start + size <= size_);
return StringRef(data_ + start, size);
}
} // namespace blender

View File

@ -34,21 +34,21 @@ void print_duration(Nanoseconds duration);
class ScopedTimer {
private:
std::string m_name;
TimePoint m_start;
std::string name_;
TimePoint start_;
public:
ScopedTimer(std::string name) : m_name(std::move(name))
ScopedTimer(std::string name) : name_(std::move(name))
{
m_start = Clock::now();
start_ = Clock::now();
}
~ScopedTimer()
{
TimePoint end = Clock::now();
Nanoseconds duration = end - m_start;
Nanoseconds duration = end - start_;
std::cout << "Timer '" << m_name << "' took ";
std::cout << "Timer '" << name_ << "' took ";
print_duration(duration);
std::cout << '\n';
}

View File

@ -84,15 +84,15 @@ class Vector {
*
* The pointers might point to the memory in the inline buffer.
*/
T *m_begin;
T *m_end;
T *m_capacity_end;
T *begin_;
T *end_;
T *capacity_end_;
/** Used for allocations when the inline buffer is too small. */
Allocator m_allocator;
Allocator allocator_;
/** A placeholder buffer that will remain uninitialized until it is used. */
AlignedBuffer<(uint)sizeof(T) * InlineBufferCapacity, (uint)alignof(T)> m_inline_buffer;
AlignedBuffer<(uint)sizeof(T) * InlineBufferCapacity, (uint)alignof(T)> inline_buffer_;
/**
* Store the size of the vector explicitly in debug builds. Otherwise you'd always have to call
@ -100,8 +100,8 @@ class Vector {
* annoying. Knowing the size of a vector is often quite essential when debugging some code.
*/
#ifndef NDEBUG
uint m_debug_size;
# define UPDATE_VECTOR_SIZE(ptr) (ptr)->m_debug_size = (uint)((ptr)->m_end - (ptr)->m_begin)
uint debug_size_;
# define UPDATE_VECTOR_SIZE(ptr) (ptr)->debug_size_ = (uint)((ptr)->end_ - (ptr)->begin_)
#else
# define UPDATE_VECTOR_SIZE(ptr) ((void)0)
#endif
@ -120,9 +120,9 @@ class Vector {
*/
Vector()
{
m_begin = this->inline_buffer();
m_end = m_begin;
m_capacity_end = m_begin + InlineBufferCapacity;
begin_ = this->inline_buffer();
end_ = begin_;
capacity_end_ = begin_ + InlineBufferCapacity;
UPDATE_VECTOR_SIZE(this);
}
@ -143,7 +143,7 @@ class Vector {
{
this->reserve(size);
this->increase_size_by_unchecked(size);
blender::uninitialized_fill_n(m_begin, size, value);
blender::uninitialized_fill_n(begin_, size, value);
}
/**
@ -164,7 +164,7 @@ class Vector {
uint size = values.size();
this->reserve(size);
this->increase_size_by_unchecked(size);
blender::uninitialized_copy_n(values.data(), size, m_begin);
blender::uninitialized_copy_n(values.data(), size, begin_);
}
/**
@ -198,7 +198,7 @@ class Vector {
* Create a copy of another vector. The other vector will not be changed. If the other vector has
* less than InlineBufferCapacity elements, no allocation will be made.
*/
Vector(const Vector &other) : m_allocator(other.m_allocator)
Vector(const Vector &other) : allocator_(other.allocator_)
{
this->init_copy_from_other_vector(other);
}
@ -209,7 +209,7 @@ class Vector {
*/
template<uint OtherInlineBufferCapacity>
Vector(const Vector<T, OtherInlineBufferCapacity, Allocator> &other)
: m_allocator(other.m_allocator)
: allocator_(other.allocator_)
{
this->init_copy_from_other_vector(other);
}
@ -220,57 +220,57 @@ class Vector {
*/
template<uint OtherInlineBufferCapacity>
Vector(Vector<T, OtherInlineBufferCapacity, Allocator> &&other) noexcept
: m_allocator(other.m_allocator)
: allocator_(other.allocator_)
{
uint size = other.size();
if (other.is_inline()) {
if (size <= InlineBufferCapacity) {
/* Copy between inline buffers. */
m_begin = this->inline_buffer();
m_end = m_begin + size;
m_capacity_end = m_begin + InlineBufferCapacity;
uninitialized_relocate_n(other.m_begin, size, m_begin);
begin_ = this->inline_buffer();
end_ = begin_ + size;
capacity_end_ = begin_ + InlineBufferCapacity;
uninitialized_relocate_n(other.begin_, size, begin_);
}
else {
/* Copy from inline buffer to newly allocated buffer. */
uint capacity = size;
m_begin = (T *)m_allocator.allocate(sizeof(T) * capacity, alignof(T), AT);
m_end = m_begin + size;
m_capacity_end = m_begin + capacity;
uninitialized_relocate_n(other.m_begin, size, m_begin);
begin_ = (T *)allocator_.allocate(sizeof(T) * capacity, alignof(T), AT);
end_ = begin_ + size;
capacity_end_ = begin_ + capacity;
uninitialized_relocate_n(other.begin_, size, begin_);
}
}
else {
/* Steal the pointer. */
m_begin = other.m_begin;
m_end = other.m_end;
m_capacity_end = other.m_capacity_end;
begin_ = other.begin_;
end_ = other.end_;
capacity_end_ = other.capacity_end_;
}
other.m_begin = other.inline_buffer();
other.m_end = other.m_begin;
other.m_capacity_end = other.m_begin + OtherInlineBufferCapacity;
other.begin_ = other.inline_buffer();
other.end_ = other.begin_;
other.capacity_end_ = other.begin_ + OtherInlineBufferCapacity;
UPDATE_VECTOR_SIZE(this);
UPDATE_VECTOR_SIZE(&other);
}
~Vector()
{
destruct_n(m_begin, this->size());
destruct_n(begin_, this->size());
if (!this->is_inline()) {
m_allocator.deallocate(m_begin);
allocator_.deallocate(begin_);
}
}
operator Span<T>() const
{
return Span<T>(m_begin, this->size());
return Span<T>(begin_, this->size());
}
operator MutableSpan<T>()
{
return MutableSpan<T>(m_begin, this->size());
return MutableSpan<T>(begin_, this->size());
}
Span<T> as_span() const
@ -332,12 +332,12 @@ class Vector {
uint old_size = this->size();
if (new_size > old_size) {
this->reserve(new_size);
default_construct_n(m_begin + old_size, new_size - old_size);
default_construct_n(begin_ + old_size, new_size - old_size);
}
else {
destruct_n(m_begin + new_size, old_size - new_size);
destruct_n(begin_ + new_size, old_size - new_size);
}
m_end = m_begin + new_size;
end_ = begin_ + new_size;
UPDATE_VECTOR_SIZE(this);
}
@ -352,12 +352,12 @@ class Vector {
uint old_size = this->size();
if (new_size > old_size) {
this->reserve(new_size);
uninitialized_fill_n(m_begin + old_size, new_size - old_size, value);
uninitialized_fill_n(begin_ + old_size, new_size - old_size, value);
}
else {
destruct_n(m_begin + new_size, old_size - new_size);
destruct_n(begin_ + new_size, old_size - new_size);
}
m_end = m_begin + new_size;
end_ = begin_ + new_size;
UPDATE_VECTOR_SIZE(this);
}
@ -367,8 +367,8 @@ class Vector {
*/
void clear()
{
destruct_n(m_begin, this->size());
m_end = m_begin;
destruct_n(begin_, this->size());
end_ = begin_;
UPDATE_VECTOR_SIZE(this);
}
@ -378,14 +378,14 @@ class Vector {
*/
void clear_and_make_inline()
{
destruct_n(m_begin, this->size());
destruct_n(begin_, this->size());
if (!this->is_inline()) {
m_allocator.deallocate(m_begin);
allocator_.deallocate(begin_);
}
m_begin = this->inline_buffer();
m_end = m_begin;
m_capacity_end = m_begin + InlineBufferCapacity;
begin_ = this->inline_buffer();
end_ = begin_;
capacity_end_ = begin_ + InlineBufferCapacity;
UPDATE_VECTOR_SIZE(this);
}
@ -436,16 +436,16 @@ class Vector {
*/
void append_unchecked(const T &value)
{
BLI_assert(m_end < m_capacity_end);
new (m_end) T(value);
m_end++;
BLI_assert(end_ < capacity_end_);
new (end_) T(value);
end_++;
UPDATE_VECTOR_SIZE(this);
}
void append_unchecked(T &&value)
{
BLI_assert(m_end < m_capacity_end);
new (m_end) T(std::move(value));
m_end++;
BLI_assert(end_ < capacity_end_);
new (end_) T(std::move(value));
end_++;
UPDATE_VECTOR_SIZE(this);
}
@ -456,7 +456,7 @@ class Vector {
void append_n_times(const T &value, uint n)
{
this->reserve(this->size() + n);
blender::uninitialized_fill_n(m_end, n, value);
blender::uninitialized_fill_n(end_, n, value);
this->increase_size_by_unchecked(n);
}
@ -468,8 +468,8 @@ class Vector {
*/
void increase_size_by_unchecked(uint n)
{
BLI_assert(m_end + n <= m_capacity_end);
m_end += n;
BLI_assert(end_ + n <= capacity_end_);
end_ += n;
UPDATE_VECTOR_SIZE(this);
}
@ -510,9 +510,9 @@ class Vector {
}
void extend_unchecked(const T *start, uint amount)
{
BLI_assert(m_begin + amount <= m_capacity_end);
blender::uninitialized_copy_n(start, amount, m_end);
m_end += amount;
BLI_assert(begin_ + amount <= capacity_end_);
blender::uninitialized_copy_n(start, amount, end_);
end_ += amount;
UPDATE_VECTOR_SIZE(this);
}
@ -523,12 +523,12 @@ class Vector {
const T &last() const
{
BLI_assert(this->size() > 0);
return *(m_end - 1);
return *(end_ - 1);
}
T &last()
{
BLI_assert(this->size() > 0);
return *(m_end - 1);
return *(end_ - 1);
}
/**
@ -536,7 +536,7 @@ class Vector {
*/
void fill(const T &value)
{
initialized_fill_n(m_begin, this->size(), value);
initialized_fill_n(begin_, this->size(), value);
}
/**
@ -552,8 +552,8 @@ class Vector {
*/
uint size() const
{
BLI_assert(m_debug_size == (uint)(m_end - m_begin));
return (uint)(m_end - m_begin);
BLI_assert(debug_size_ == (uint)(end_ - begin_));
return (uint)(end_ - begin_);
}
/**
@ -563,7 +563,7 @@ class Vector {
*/
bool is_empty() const
{
return m_begin == m_end;
return begin_ == end_;
}
/**
@ -573,8 +573,8 @@ class Vector {
void remove_last()
{
BLI_assert(!this->is_empty());
m_end--;
m_end->~T();
end_--;
end_->~T();
UPDATE_VECTOR_SIZE(this);
}
@ -587,9 +587,9 @@ class Vector {
T pop_last()
{
BLI_assert(!this->is_empty());
m_end--;
T value = std::move(*m_end);
m_end->~T();
end_--;
T value = std::move(*end_);
end_->~T();
UPDATE_VECTOR_SIZE(this);
return value;
}
@ -601,12 +601,12 @@ class Vector {
void remove_and_reorder(uint index)
{
BLI_assert(index < this->size());
T *element_to_remove = m_begin + index;
m_end--;
if (element_to_remove < m_end) {
*element_to_remove = std::move(*m_end);
T *element_to_remove = begin_ + index;
end_--;
if (element_to_remove < end_) {
*element_to_remove = std::move(*end_);
}
m_end->~T();
end_->~T();
UPDATE_VECTOR_SIZE(this);
}
@ -632,10 +632,10 @@ class Vector {
BLI_assert(index < this->size());
uint last_index = this->size() - 1;
for (uint i = index; i < last_index; i++) {
m_begin[i] = std::move(m_begin[i + 1]);
begin_[i] = std::move(begin_[i + 1]);
}
m_begin[last_index].~T();
m_end--;
begin_[last_index].~T();
end_--;
UPDATE_VECTOR_SIZE(this);
}
@ -645,9 +645,9 @@ class Vector {
*/
int first_index_of_try(const T &value) const
{
for (T *current = m_begin; current != m_end; current++) {
for (T *current = begin_; current != end_; current++) {
if (*current == value) {
return (int)(current - m_begin);
return (int)(current - begin_);
}
}
return -1;
@ -680,13 +680,13 @@ class Vector {
const T &operator[](uint index) const
{
BLI_assert(index < this->size());
return m_begin[index];
return begin_[index];
}
T &operator[](uint index)
{
BLI_assert(index < this->size());
return m_begin[index];
return begin_[index];
}
/**
@ -694,7 +694,7 @@ class Vector {
*/
T *data()
{
return m_begin;
return begin_;
}
/**
@ -702,25 +702,25 @@ class Vector {
*/
const T *data() const
{
return m_begin;
return begin_;
}
T *begin()
{
return m_begin;
return begin_;
}
T *end()
{
return m_end;
return end_;
}
const T *begin() const
{
return m_begin;
return begin_;
}
const T *end() const
{
return m_end;
return end_;
}
/**
@ -729,7 +729,7 @@ class Vector {
*/
uint capacity() const
{
return (uint)(m_capacity_end - m_begin);
return (uint)(capacity_end_ - begin_);
}
/**
@ -754,7 +754,7 @@ class Vector {
std::cout << "Vector Stats: " << name << "\n";
std::cout << " Address: " << this << "\n";
std::cout << " Elements: " << this->size() << "\n";
std::cout << " Capacity: " << (m_capacity_end - m_begin) << "\n";
std::cout << " Capacity: " << (capacity_end_ - begin_) << "\n";
std::cout << " Inline Capacity: " << InlineBufferCapacity << "\n";
char memory_size_str[15];
@ -765,17 +765,17 @@ class Vector {
private:
T *inline_buffer() const
{
return (T *)m_inline_buffer.ptr();
return (T *)inline_buffer_.ptr();
}
bool is_inline() const
{
return m_begin == this->inline_buffer();
return begin_ == this->inline_buffer();
}
void ensure_space_for_one()
{
if (UNLIKELY(m_end >= m_capacity_end)) {
if (UNLIKELY(end_ >= capacity_end_)) {
this->realloc_to_at_least(this->size() + 1);
}
}
@ -793,42 +793,42 @@ class Vector {
uint new_capacity = std::max(min_capacity, min_new_capacity);
uint size = this->size();
T *new_array = (T *)m_allocator.allocate(new_capacity * (uint)sizeof(T), alignof(T), AT);
uninitialized_relocate_n(m_begin, size, new_array);
T *new_array = (T *)allocator_.allocate(new_capacity * (uint)sizeof(T), alignof(T), AT);
uninitialized_relocate_n(begin_, size, new_array);
if (!this->is_inline()) {
m_allocator.deallocate(m_begin);
allocator_.deallocate(begin_);
}
m_begin = new_array;
m_end = m_begin + size;
m_capacity_end = m_begin + new_capacity;
begin_ = new_array;
end_ = begin_ + size;
capacity_end_ = begin_ + new_capacity;
}
/**
* Initialize all properties, except for m_allocator, which has to be initialized beforehand.
* Initialize all properties, except for allocator_, which has to be initialized beforehand.
*/
template<uint OtherInlineBufferCapacity>
void init_copy_from_other_vector(const Vector<T, OtherInlineBufferCapacity, Allocator> &other)
{
m_allocator = other.m_allocator;
allocator_ = other.allocator_;
uint size = other.size();
uint capacity = size;
if (size <= InlineBufferCapacity) {
m_begin = this->inline_buffer();
begin_ = this->inline_buffer();
capacity = InlineBufferCapacity;
}
else {
m_begin = (T *)m_allocator.allocate(sizeof(T) * size, alignof(T), AT);
begin_ = (T *)allocator_.allocate(sizeof(T) * size, alignof(T), AT);
capacity = size;
}
m_end = m_begin + size;
m_capacity_end = m_begin + capacity;
end_ = begin_ + size;
capacity_end_ = begin_ + capacity;
uninitialized_copy_n(other.data(), size, m_begin);
uninitialized_copy_n(other.data(), size, begin_);
UPDATE_VECTOR_SIZE(this);
}
};

View File

@ -106,30 +106,30 @@ class VectorSet {
* Slots are either empty, occupied or removed. The number of occupied slots can be computed by
* subtracting the removed slots from the occupied-and-removed slots.
*/
uint32_t m_removed_slots;
uint32_t m_occupied_and_removed_slots;
uint32_t removed_slots_;
uint32_t occupied_and_removed_slots_;
/**
* The maximum number of slots that can be used (either occupied or removed) until the set has to
* grow. This is the total number of slots times the max load factor.
*/
uint32_t m_usable_slots;
uint32_t usable_slots_;
/**
* The number of slots minus one. This is a bit mask that can be used to turn any integer into a
* valid slot index efficiently.
*/
uint32_t m_slot_mask;
uint32_t slot_mask_;
/** This is called to hash incoming keys. */
Hash m_hash;
Hash hash_;
/** This is called to check equality of two keys. */
IsEqual m_is_equal;
IsEqual is_equal_;
/** The max load factor is 1/2 = 50% by default. */
#define LOAD_FACTOR 1, 2
LoadFactor m_max_load_factor = LoadFactor(LOAD_FACTOR);
LoadFactor max_load_factor_ = LoadFactor(LOAD_FACTOR);
using SlotArray = Array<Slot, LoadFactor::compute_total_slots(4, LOAD_FACTOR), Allocator>;
#undef LOAD_FACTOR
@ -137,19 +137,19 @@ class VectorSet {
* This is the array that contains the actual slots. There is always at least one empty slot and
* the size of the array is a power of two.
*/
SlotArray m_slots;
SlotArray slots_;
/**
* Pointer to an array that contains all keys. The keys are sorted by insertion order as long as
* no keys are removed. The first set->size() elements in this array are initialized. The
* capacity of the array is m_usable_slots.
* capacity of the array is usable_slots_.
*/
Key *m_keys;
Key *keys_;
/** Iterate over a slot index sequence for a given hash. */
#define VECTOR_SET_SLOT_PROBING_BEGIN(HASH, R_SLOT) \
SLOT_PROBING_BEGIN (ProbingStrategy, HASH, m_slot_mask, SLOT_INDEX) \
auto &R_SLOT = m_slots[SLOT_INDEX];
SLOT_PROBING_BEGIN (ProbingStrategy, HASH, slot_mask_, SLOT_INDEX) \
auto &R_SLOT = slots_[SLOT_INDEX];
#define VECTOR_SET_SLOT_PROBING_END() SLOT_PROBING_END()
public:
@ -159,12 +159,12 @@ class VectorSet {
* is performed on the first insertion.
*/
VectorSet()
: m_removed_slots(0),
m_occupied_and_removed_slots(0),
m_usable_slots(0),
m_slot_mask(0),
m_slots(1),
m_keys(nullptr)
: removed_slots_(0),
occupied_and_removed_slots_(0),
usable_slots_(0),
slot_mask_(0),
slots_(1),
keys_(nullptr)
{
}
@ -178,37 +178,37 @@ class VectorSet {
~VectorSet()
{
destruct_n(m_keys, this->size());
if (m_keys != nullptr) {
this->deallocate_keys_array(m_keys);
destruct_n(keys_, this->size());
if (keys_ != nullptr) {
this->deallocate_keys_array(keys_);
}
}
VectorSet(const VectorSet &other)
: m_removed_slots(other.m_removed_slots),
m_occupied_and_removed_slots(other.m_occupied_and_removed_slots),
m_usable_slots(other.m_usable_slots),
m_slot_mask(other.m_slot_mask),
m_slots(other.m_slots)
: removed_slots_(other.removed_slots_),
occupied_and_removed_slots_(other.occupied_and_removed_slots_),
usable_slots_(other.usable_slots_),
slot_mask_(other.slot_mask_),
slots_(other.slots_)
{
m_keys = this->allocate_keys_array(m_usable_slots);
uninitialized_copy_n(other.m_keys, other.size(), m_keys);
keys_ = this->allocate_keys_array(usable_slots_);
uninitialized_copy_n(other.keys_, other.size(), keys_);
}
VectorSet(VectorSet &&other) noexcept
: m_removed_slots(other.m_removed_slots),
m_occupied_and_removed_slots(other.m_occupied_and_removed_slots),
m_usable_slots(other.m_usable_slots),
m_slot_mask(other.m_slot_mask),
m_slots(std::move(other.m_slots)),
m_keys(other.m_keys)
: removed_slots_(other.removed_slots_),
occupied_and_removed_slots_(other.occupied_and_removed_slots_),
usable_slots_(other.usable_slots_),
slot_mask_(other.slot_mask_),
slots_(std::move(other.slots_)),
keys_(other.keys_)
{
other.m_removed_slots = 0;
other.m_occupied_and_removed_slots = 0;
other.m_usable_slots = 0;
other.m_slot_mask = 0;
other.m_slots = SlotArray(1);
other.m_keys = nullptr;
other.removed_slots_ = 0;
other.occupied_and_removed_slots_ = 0;
other.usable_slots_ = 0;
other.slot_mask_ = 0;
other.slots_ = SlotArray(1);
other.keys_ = nullptr;
}
VectorSet &operator=(const VectorSet &other)
@ -242,11 +242,11 @@ class VectorSet {
*/
void add_new(const Key &key)
{
this->add_new__impl(key, m_hash(key));
this->add_new__impl(key, hash_(key));
}
void add_new(Key &&key)
{
this->add_new__impl(std::move(key), m_hash(key));
this->add_new__impl(std::move(key), hash_(key));
}
/**
@ -269,7 +269,7 @@ class VectorSet {
*/
template<typename ForwardKey> bool add_as(ForwardKey &&key)
{
return this->add__impl(std::forward<ForwardKey>(key), m_hash(key));
return this->add__impl(std::forward<ForwardKey>(key), hash_(key));
}
/**
@ -301,7 +301,7 @@ class VectorSet {
*/
template<typename ForwardKey> bool contains_as(const ForwardKey &key) const
{
return this->contains__impl(key, m_hash(key));
return this->contains__impl(key, hash_(key));
}
/**
@ -320,7 +320,7 @@ class VectorSet {
*/
template<typename ForwardKey> bool remove_as(const ForwardKey &key)
{
return this->remove__impl(key, m_hash(key));
return this->remove__impl(key, hash_(key));
}
/**
@ -338,7 +338,7 @@ class VectorSet {
*/
template<typename ForwardKey> void remove_contained_as(const ForwardKey &key)
{
this->remove_contained__impl(key, m_hash(key));
this->remove_contained__impl(key, hash_(key));
}
/**
@ -364,7 +364,7 @@ class VectorSet {
*/
template<typename ForwardKey> uint32_t index_of_as(const ForwardKey &key) const
{
return this->index_of__impl(key, m_hash(key));
return this->index_of__impl(key, hash_(key));
}
/**
@ -381,7 +381,7 @@ class VectorSet {
*/
template<typename ForwardKey> int32_t index_of_try_as(const ForwardKey &key) const
{
return this->index_of_try__impl(key, m_hash(key));
return this->index_of_try__impl(key, hash_(key));
}
/**
@ -389,17 +389,17 @@ class VectorSet {
*/
const Key *data() const
{
return m_keys;
return keys_;
}
const Key *begin() const
{
return m_keys;
return keys_;
}
const Key *end() const
{
return m_keys + this->size();
return keys_ + this->size();
}
/**
@ -408,12 +408,12 @@ class VectorSet {
const Key &operator[](uint32_t index) const
{
BLI_assert(index <= this->size());
return m_keys[index];
return keys_[index];
}
operator Span<Key>() const
{
return Span<Key>(m_keys, this->size());
return Span<Key>(keys_, this->size());
}
/**
@ -441,7 +441,7 @@ class VectorSet {
*/
uint32_t size() const
{
return m_occupied_and_removed_slots - m_removed_slots;
return occupied_and_removed_slots_ - removed_slots_;
}
/**
@ -449,7 +449,7 @@ class VectorSet {
*/
bool is_empty() const
{
return m_occupied_and_removed_slots == m_removed_slots;
return occupied_and_removed_slots_ == removed_slots_;
}
/**
@ -457,7 +457,7 @@ class VectorSet {
*/
uint32_t capacity() const
{
return m_slots.size();
return slots_.size();
}
/**
@ -465,7 +465,7 @@ class VectorSet {
*/
uint32_t removed_amount() const
{
return m_removed_slots;
return removed_slots_;
}
/**
@ -482,7 +482,7 @@ class VectorSet {
*/
uint32_t size_in_bytes() const
{
return (uint32_t)(sizeof(Slot) * m_slots.size() + sizeof(Key) * m_usable_slots);
return (uint32_t)(sizeof(Slot) * slots_.size() + sizeof(Key) * usable_slots_);
}
/**
@ -490,7 +490,7 @@ class VectorSet {
*/
void reserve(uint32_t n)
{
if (m_usable_slots < n) {
if (usable_slots_ < n) {
this->realloc_and_reinsert(n);
}
}
@ -501,57 +501,57 @@ class VectorSet {
*/
uint32_t count_collisions(const Key &key) const
{
return this->count_collisions__impl(key, m_hash(key));
return this->count_collisions__impl(key, hash_(key));
}
private:
BLI_NOINLINE void realloc_and_reinsert(uint32_t min_usable_slots)
{
uint32_t total_slots, usable_slots;
m_max_load_factor.compute_total_and_usable_slots(
max_load_factor_.compute_total_and_usable_slots(
SlotArray::inline_buffer_capacity(), min_usable_slots, &total_slots, &usable_slots);
uint32_t new_slot_mask = total_slots - 1;
/* Optimize the case when the set was empty beforehand. We can avoid some copies here. */
if (this->size() == 0) {
m_slots.~Array();
new (&m_slots) SlotArray(total_slots);
m_removed_slots = 0;
m_occupied_and_removed_slots = 0;
m_usable_slots = usable_slots;
m_slot_mask = new_slot_mask;
m_keys = this->allocate_keys_array(usable_slots);
slots_.~Array();
new (&slots_) SlotArray(total_slots);
removed_slots_ = 0;
occupied_and_removed_slots_ = 0;
usable_slots_ = usable_slots;
slot_mask_ = new_slot_mask;
keys_ = this->allocate_keys_array(usable_slots);
return;
}
SlotArray new_slots(total_slots);
for (Slot &slot : m_slots) {
for (Slot &slot : slots_) {
if (slot.is_occupied()) {
this->add_after_grow_and_destruct_old(slot, new_slots, new_slot_mask);
}
}
Key *new_keys = this->allocate_keys_array(usable_slots);
uninitialized_relocate_n(m_keys, this->size(), new_keys);
this->deallocate_keys_array(m_keys);
uninitialized_relocate_n(keys_, this->size(), new_keys);
this->deallocate_keys_array(keys_);
/* All occupied slots have been destructed already and empty/removed slots are assumed to be
* trivially destructible. */
m_slots.clear_without_destruct();
m_slots = std::move(new_slots);
m_keys = new_keys;
m_occupied_and_removed_slots -= m_removed_slots;
m_usable_slots = usable_slots;
m_removed_slots = 0;
m_slot_mask = new_slot_mask;
slots_.clear_without_destruct();
slots_ = std::move(new_slots);
keys_ = new_keys;
occupied_and_removed_slots_ -= removed_slots_;
usable_slots_ = usable_slots;
removed_slots_ = 0;
slot_mask_ = new_slot_mask;
}
void add_after_grow_and_destruct_old(Slot &old_slot,
SlotArray &new_slots,
uint32_t new_slot_mask)
{
const Key &key = m_keys[old_slot.index()];
const Key &key = keys_[old_slot.index()];
uint32_t hash = old_slot.get_hash(key, Hash());
SLOT_PROBING_BEGIN (ProbingStrategy, hash, new_slot_mask, slot_index) {
@ -570,7 +570,7 @@ class VectorSet {
if (slot.is_empty()) {
return false;
}
if (slot.contains(key, m_is_equal, hash, m_keys)) {
if (slot.contains(key, is_equal_, hash, keys_)) {
return true;
}
}
@ -586,9 +586,9 @@ class VectorSet {
VECTOR_SET_SLOT_PROBING_BEGIN (hash, slot) {
if (slot.is_empty()) {
uint32_t index = this->size();
new (m_keys + index) Key(std::forward<ForwardKey>(key));
new (keys_ + index) Key(std::forward<ForwardKey>(key));
slot.occupy(index, hash);
m_occupied_and_removed_slots++;
occupied_and_removed_slots_++;
return;
}
}
@ -602,12 +602,12 @@ class VectorSet {
VECTOR_SET_SLOT_PROBING_BEGIN (hash, slot) {
if (slot.is_empty()) {
uint32_t index = this->size();
new (m_keys + index) Key(std::forward<ForwardKey>(key));
m_occupied_and_removed_slots++;
new (keys_ + index) Key(std::forward<ForwardKey>(key));
occupied_and_removed_slots_++;
slot.occupy(index, hash);
return true;
}
if (slot.contains(key, m_is_equal, hash, m_keys)) {
if (slot.contains(key, is_equal_, hash, keys_)) {
return false;
}
}
@ -619,7 +619,7 @@ class VectorSet {
BLI_assert(this->contains_as(key));
VECTOR_SET_SLOT_PROBING_BEGIN (hash, slot) {
if (slot.contains(key, m_is_equal, hash, m_keys)) {
if (slot.contains(key, is_equal_, hash, keys_)) {
return slot.index();
}
}
@ -630,7 +630,7 @@ class VectorSet {
int32_t index_of_try__impl(const ForwardKey &key, uint32_t hash) const
{
VECTOR_SET_SLOT_PROBING_BEGIN (hash, slot) {
if (slot.contains(key, m_is_equal, hash, m_keys)) {
if (slot.contains(key, is_equal_, hash, keys_)) {
return (int32_t)slot.index();
}
if (slot.is_empty()) {
@ -645,11 +645,11 @@ class VectorSet {
BLI_assert(this->size() > 0);
uint32_t index_to_pop = this->size() - 1;
Key key = std::move(m_keys[index_to_pop]);
m_keys[index_to_pop].~Key();
uint32_t hash = m_hash(key);
Key key = std::move(keys_[index_to_pop]);
keys_[index_to_pop].~Key();
uint32_t hash = hash_(key);
m_removed_slots++;
removed_slots_++;
VECTOR_SET_SLOT_PROBING_BEGIN (hash, slot) {
if (slot.has_index(index_to_pop)) {
@ -663,7 +663,7 @@ class VectorSet {
template<typename ForwardKey> bool remove__impl(const ForwardKey &key, uint32_t hash)
{
VECTOR_SET_SLOT_PROBING_BEGIN (hash, slot) {
if (slot.contains(key, m_is_equal, hash, m_keys)) {
if (slot.contains(key, is_equal_, hash, keys_)) {
this->remove_key_internal(slot);
return true;
}
@ -679,7 +679,7 @@ class VectorSet {
BLI_assert(this->contains_as(key));
VECTOR_SET_SLOT_PROBING_BEGIN (hash, slot) {
if (slot.contains(key, m_is_equal, hash, m_keys)) {
if (slot.contains(key, is_equal_, hash, keys_)) {
this->remove_key_internal(slot);
return;
}
@ -694,19 +694,19 @@ class VectorSet {
uint32_t last_element_index = size - 1;
if (index_to_remove < last_element_index) {
m_keys[index_to_remove] = std::move(m_keys[last_element_index]);
this->update_slot_index(m_keys[index_to_remove], last_element_index, index_to_remove);
keys_[index_to_remove] = std::move(keys_[last_element_index]);
this->update_slot_index(keys_[index_to_remove], last_element_index, index_to_remove);
}
m_keys[last_element_index].~Key();
keys_[last_element_index].~Key();
slot.remove();
m_removed_slots++;
removed_slots_++;
return;
}
void update_slot_index(const Key &key, uint32_t old_index, uint32_t new_index)
{
uint32_t hash = m_hash(key);
uint32_t hash = hash_(key);
VECTOR_SET_SLOT_PROBING_BEGIN (hash, slot) {
if (slot.has_index(old_index)) {
slot.update_index(new_index);
@ -722,7 +722,7 @@ class VectorSet {
uint32_t collisions = 0;
VECTOR_SET_SLOT_PROBING_BEGIN (hash, slot) {
if (slot.contains(key, m_is_equal, hash, m_keys)) {
if (slot.contains(key, is_equal_, hash, keys_)) {
return collisions;
}
if (slot.is_empty()) {
@ -735,20 +735,20 @@ class VectorSet {
void ensure_can_add()
{
if (m_occupied_and_removed_slots >= m_usable_slots) {
if (occupied_and_removed_slots_ >= usable_slots_) {
this->realloc_and_reinsert(this->size() + 1);
BLI_assert(m_occupied_and_removed_slots < m_usable_slots);
BLI_assert(occupied_and_removed_slots_ < usable_slots_);
}
}
Key *allocate_keys_array(uint32_t size)
{
return (Key *)m_slots.allocator().allocate((uint32_t)sizeof(Key) * size, alignof(Key), AT);
return (Key *)slots_.allocator().allocate((uint32_t)sizeof(Key) * size, alignof(Key), AT);
}
void deallocate_keys_array(Key *keys)
{
m_slots.allocator().deallocate(keys);
slots_.allocator().deallocate(keys);
}
};

View File

@ -53,7 +53,7 @@ template<typename Key> class SimpleVectorSetSlot {
/**
* After the default constructor has run, the slot has to be in the empty state.
*/
int32_t m_state = s_is_empty;
int32_t state_ = s_is_empty;
public:
/**
@ -61,7 +61,7 @@ template<typename Key> class SimpleVectorSetSlot {
*/
bool is_occupied() const
{
return m_state >= 0;
return state_ >= 0;
}
/**
@ -69,7 +69,7 @@ template<typename Key> class SimpleVectorSetSlot {
*/
bool is_empty() const
{
return m_state == s_is_empty;
return state_ == s_is_empty;
}
/**
@ -78,7 +78,7 @@ template<typename Key> class SimpleVectorSetSlot {
uint32_t index() const
{
BLI_assert(this->is_occupied());
return (uint32_t)m_state;
return (uint32_t)state_;
}
/**
@ -91,8 +91,8 @@ template<typename Key> class SimpleVectorSetSlot {
uint32_t UNUSED(hash),
const Key *keys) const
{
if (m_state >= 0) {
return is_equal(key, keys[m_state]);
if (state_ >= 0) {
return is_equal(key, keys[state_]);
}
return false;
}
@ -106,7 +106,7 @@ template<typename Key> class SimpleVectorSetSlot {
{
BLI_assert(!this->is_occupied());
BLI_assert(other.is_occupied());
m_state = other.m_state;
state_ = other.state_;
}
/**
@ -116,7 +116,7 @@ template<typename Key> class SimpleVectorSetSlot {
void occupy(uint32_t index, uint32_t UNUSED(hash))
{
BLI_assert(!this->is_occupied());
m_state = (int32_t)index;
state_ = (int32_t)index;
}
/**
@ -126,7 +126,7 @@ template<typename Key> class SimpleVectorSetSlot {
void update_index(uint32_t index)
{
BLI_assert(this->is_occupied());
m_state = (int32_t)index;
state_ = (int32_t)index;
}
/**
@ -135,7 +135,7 @@ template<typename Key> class SimpleVectorSetSlot {
void remove()
{
BLI_assert(this->is_occupied());
m_state = s_is_removed;
state_ = s_is_removed;
}
/**
@ -143,7 +143,7 @@ template<typename Key> class SimpleVectorSetSlot {
*/
bool has_index(uint32_t index) const
{
return (uint32_t)m_state == index;
return (uint32_t)state_ == index;
}
/**

View File

@ -31,16 +31,16 @@ static std::mutex current_array_mutex;
Span<uint> IndexRange::as_span() const
{
uint min_required_size = m_start + m_size;
uint min_required_size = start_ + size_;
if (min_required_size <= current_array_size) {
return Span<uint>(current_array + m_start, m_size);
return Span<uint>(current_array + start_, size_);
}
std::lock_guard<std::mutex> lock(current_array_mutex);
if (min_required_size <= current_array_size) {
return Span<uint>(current_array + m_start, m_size);
return Span<uint>(current_array + start_, size_);
}
uint new_size = std::max<uint>(1000, power_of_2_max_u(min_required_size));
@ -54,7 +54,7 @@ Span<uint> IndexRange::as_span() const
std::atomic_thread_fence(std::memory_order_seq_cst);
current_array_size = new_size;
return Span<uint>(current_array + m_start, m_size);
return Span<uint>(current_array + start_, size_);
}
} // namespace blender

View File

@ -27,8 +27,8 @@ namespace dot {
Node &Graph::new_node(StringRef label)
{
Node *node = new Node(*this);
m_nodes.append(std::unique_ptr<Node>(node));
m_top_level_nodes.add_new(node);
nodes_.append(std::unique_ptr<Node>(node));
top_level_nodes_.add_new(node);
node->set_attribute("label", label);
return *node;
}
@ -36,8 +36,8 @@ Node &Graph::new_node(StringRef label)
Cluster &Graph::new_cluster(StringRef label)
{
Cluster *cluster = new Cluster(*this);
m_clusters.append(std::unique_ptr<Cluster>(cluster));
m_top_level_clusters.add_new(cluster);
clusters_.append(std::unique_ptr<Cluster>(cluster));
top_level_clusters_.add_new(cluster);
cluster->set_attribute("label", label);
return *cluster;
}
@ -45,55 +45,55 @@ Cluster &Graph::new_cluster(StringRef label)
UndirectedEdge &UndirectedGraph::new_edge(NodePort a, NodePort b)
{
UndirectedEdge *edge = new UndirectedEdge(a, b);
m_edges.append(std::unique_ptr<UndirectedEdge>(edge));
edges_.append(std::unique_ptr<UndirectedEdge>(edge));
return *edge;
}
DirectedEdge &DirectedGraph::new_edge(NodePort from, NodePort to)
{
DirectedEdge *edge = new DirectedEdge(from, to);
m_edges.append(std::unique_ptr<DirectedEdge>(edge));
edges_.append(std::unique_ptr<DirectedEdge>(edge));
return *edge;
}
void Cluster::set_parent_cluster(Cluster *new_parent)
{
if (m_parent == new_parent) {
if (parent_ == new_parent) {
return;
}
else if (m_parent == nullptr) {
m_graph.m_top_level_clusters.remove(this);
new_parent->m_children.add_new(this);
else if (parent_ == nullptr) {
graph_.top_level_clusters_.remove(this);
new_parent->children_.add_new(this);
}
else if (new_parent == nullptr) {
m_parent->m_children.remove(this);
m_graph.m_top_level_clusters.add_new(this);
parent_->children_.remove(this);
graph_.top_level_clusters_.add_new(this);
}
else {
m_parent->m_children.remove(this);
new_parent->m_children.add_new(this);
parent_->children_.remove(this);
new_parent->children_.add_new(this);
}
m_parent = new_parent;
parent_ = new_parent;
}
void Node::set_parent_cluster(Cluster *cluster)
{
if (m_cluster == cluster) {
if (cluster_ == cluster) {
return;
}
else if (m_cluster == nullptr) {
m_graph.m_top_level_nodes.remove(this);
cluster->m_nodes.add_new(this);
else if (cluster_ == nullptr) {
graph_.top_level_nodes_.remove(this);
cluster->nodes_.add_new(this);
}
else if (cluster == nullptr) {
m_cluster->m_nodes.remove(this);
m_graph.m_top_level_nodes.add_new(this);
cluster_->nodes_.remove(this);
graph_.top_level_nodes_.add_new(this);
}
else {
m_cluster->m_nodes.remove(this);
cluster->m_nodes.add_new(this);
cluster_->nodes_.remove(this);
cluster->nodes_.add_new(this);
}
m_cluster = cluster;
cluster_ = cluster;
}
/* Utility methods
@ -101,7 +101,7 @@ void Node::set_parent_cluster(Cluster *cluster)
void Graph::set_random_cluster_bgcolors()
{
for (Cluster *cluster : m_top_level_clusters) {
for (Cluster *cluster : top_level_clusters_) {
cluster->set_random_cluster_bgcolors();
}
}
@ -113,7 +113,7 @@ void Cluster::set_random_cluster_bgcolors()
float value = 0.8f;
this->set_attribute("bgcolor", color_attr_from_hsv(hue, staturation, value));
for (Cluster *cluster : m_children) {
for (Cluster *cluster : children_) {
cluster->set_random_cluster_bgcolors();
}
}
@ -128,7 +128,7 @@ std::string DirectedGraph::to_dot_string() const
this->export__declare_nodes_and_clusters(ss);
ss << "\n";
for (const std::unique_ptr<DirectedEdge> &edge : m_edges) {
for (const std::unique_ptr<DirectedEdge> &edge : edges_) {
edge->export__as_edge_statement(ss);
ss << "\n";
}
@ -144,7 +144,7 @@ std::string UndirectedGraph::to_dot_string() const
this->export__declare_nodes_and_clusters(ss);
ss << "\n";
for (const std::unique_ptr<UndirectedEdge> &edge : m_edges) {
for (const std::unique_ptr<UndirectedEdge> &edge : edges_) {
edge->export__as_edge_statement(ss);
ss << "\n";
}
@ -156,14 +156,14 @@ std::string UndirectedGraph::to_dot_string() const
void Graph::export__declare_nodes_and_clusters(std::stringstream &ss) const
{
ss << "graph ";
m_attributes.export__as_bracket_list(ss);
attributes_.export__as_bracket_list(ss);
ss << "\n\n";
for (Node *node : m_top_level_nodes) {
for (Node *node : top_level_nodes_) {
node->export__as_declaration(ss);
}
for (Cluster *cluster : m_top_level_clusters) {
for (Cluster *cluster : top_level_clusters_) {
cluster->export__declare_nodes_and_clusters(ss);
}
}
@ -173,14 +173,14 @@ void Cluster::export__declare_nodes_and_clusters(std::stringstream &ss) const
ss << "subgraph cluster_" << (uintptr_t)this << " {\n";
ss << "graph ";
m_attributes.export__as_bracket_list(ss);
attributes_.export__as_bracket_list(ss);
ss << "\n\n";
for (Node *node : m_nodes) {
for (Node *node : nodes_) {
node->export__as_declaration(ss);
}
for (Cluster *cluster : m_children) {
for (Cluster *cluster : children_) {
cluster->export__declare_nodes_and_clusters(ss);
}
@ -189,26 +189,26 @@ void Cluster::export__declare_nodes_and_clusters(std::stringstream &ss) const
void DirectedEdge::export__as_edge_statement(std::stringstream &ss) const
{
m_a.to_dot_string(ss);
a_.to_dot_string(ss);
ss << " -> ";
m_b.to_dot_string(ss);
b_.to_dot_string(ss);
ss << " ";
m_attributes.export__as_bracket_list(ss);
attributes_.export__as_bracket_list(ss);
}
void UndirectedEdge::export__as_edge_statement(std::stringstream &ss) const
{
m_a.to_dot_string(ss);
a_.to_dot_string(ss);
ss << " -- ";
m_b.to_dot_string(ss);
b_.to_dot_string(ss);
ss << " ";
m_attributes.export__as_bracket_list(ss);
attributes_.export__as_bracket_list(ss);
}
void AttributeList::export__as_bracket_list(std::stringstream &ss) const
{
ss << "[";
m_attributes.foreach_item([&](StringRef key, StringRef value) {
attributes_.foreach_item([&](StringRef key, StringRef value) {
if (StringRef(value).startswith("<")) {
/* Don't draw the quotes, this is an html-like value. */
ss << key << "=" << value << ", ";
@ -229,15 +229,15 @@ void Node::export__as_declaration(std::stringstream &ss) const
{
this->export__as_id(ss);
ss << " ";
m_attributes.export__as_bracket_list(ss);
attributes_.export__as_bracket_list(ss);
ss << "\n";
}
void NodePort::to_dot_string(std::stringstream &ss) const
{
m_node->export__as_id(ss);
if (m_port_name.has_value()) {
ss << ":" << *m_port_name;
node_->export__as_id(ss);
if (port_name_.has_value()) {
ss << ":" << *port_name_;
}
}
@ -252,7 +252,7 @@ NodeWithSocketsRef::NodeWithSocketsRef(Node &node,
StringRef name,
Span<std::string> input_names,
Span<std::string> output_names)
: m_node(&node)
: node_(&node)
{
std::stringstream ss;
@ -297,8 +297,8 @@ NodeWithSocketsRef::NodeWithSocketsRef(Node &node,
ss << "</table>>";
m_node->set_attribute("label", ss.str());
m_node->set_shape(Attr_shape::Rectangle);
node_->set_attribute("label", ss.str());
node_->set_shape(Attr_shape::Rectangle);
}
} // namespace dot