ble_mesh: make unicast elem lookup O(1)

This commit is contained in:
lly 2019-09-16 14:55:41 +08:00
parent 89e848c820
commit 77f186a7b9

View File

@ -505,17 +505,21 @@ static struct bt_mesh_model *bt_mesh_elem_find_group(struct bt_mesh_elem *elem,
struct bt_mesh_elem *bt_mesh_elem_find(u16_t addr) struct bt_mesh_elem *bt_mesh_elem_find(u16_t addr)
{ {
int i; u16_t index;
for (i = 0; i < dev_comp->elem_count; i++) { if (BLE_MESH_ADDR_IS_UNICAST(addr)) {
struct bt_mesh_elem *elem = &dev_comp->elem[i]; index = (addr - dev_comp->elem[0].addr);
if (index < dev_comp->elem_count) {
if (BLE_MESH_ADDR_IS_GROUP(addr) || return &dev_comp->elem[index];
BLE_MESH_ADDR_IS_VIRTUAL(addr)) { } else {
if (bt_mesh_elem_find_group(elem, addr)) { return NULL;
return elem;
} }
} else if (elem->addr == addr) { }
for (index = 0; index < dev_comp->elem_count; index++) {
struct bt_mesh_elem *elem = &dev_comp->elem[index];
if (bt_mesh_elem_find_group(elem, addr)) {
return elem; return elem;
} }
} }