void mlx4_unregister_mac(struct mlx4_dev *dev, u8 port, int qpn) { struct mlx4_port_info *info = &mlx4_priv(dev)->port[port]; struct mlx4_mac_table *table = &info->mac_table; int index = qpn - info->base_qpn; struct mlx4_mac_entry *entry; if (dev->caps.flags & MLX4_DEV_CAP_FLAG_VEP_UC_STEER) { entry = radix_tree_lookup(&info->mac_tree, qpn); if (entry) { mlx4_uc_steer_release(dev, port, entry->mac, qpn, 1); radix_tree_delete(&info->mac_tree, qpn); index = find_index(dev, table, entry->mac); kfree(entry); } } mutex_lock(&table->mutex); if (validate_index(dev, table, index)) goto out; /* Check whether this address has reference count */ if (!(--table->refs[index])) { table->entries[index] = 0; mlx4_set_port_mac_table(dev, port, table->entries); --table->total; } out: mutex_unlock(&table->mutex); }
void mlx4_unregister_mac(struct mlx4_dev *dev, u8 port, int qpn) { struct mlx4_port_info *info = &mlx4_priv(dev)->port[port]; struct mlx4_mac_table *table = &info->mac_table; int index = qpn - info->base_qpn; struct mlx4_mac_entry *entry; if (dev->caps.vep_uc_steering) { entry = radix_tree_lookup(&info->mac_tree, qpn); if (entry) { mlx4_uc_steer_release(dev, port, entry->mac, qpn, 1); radix_tree_delete(&info->mac_tree, qpn); index = find_index(dev, table, entry->mac); kfree(entry); } } mutex_lock(&table->mutex); if (validate_index(dev, table, index)) goto out; table->entries[index] = 0; mlx4_set_port_mac_table(dev, port, table->entries); --table->total; out: mutex_unlock(&table->mutex); }
bool bin_index_t::dir_node::next(data_t& key,data_t& val) const { validate_key_len(key); validate_index(); data_t head(key.begin(),key.begin()+parent.dir_key_len); data_t tail(key.begin()+parent.dir_key_len,key.end()); datas_t::const_iterator it=std::lower_bound(indexes.begin(),indexes.end(),head,data_less_pr()); if(it==indexes.end())return false; if(*it==head) { validate_sub(head); if(sub_node->next(tail,val)) { key=head; key.insert(key.end(),tail.begin(),tail.end()); return true; } } ++it; if(it==indexes.end())return false; head=*it; validate_sub(head); if(!sub_node->first(tail,val))return false; key=head; key.insert(key.end(),tail.begin(),tail.end()); return true; }
static VALUE rb_bitset_aset(VALUE self, VALUE index, VALUE value) { Bitset * bs = get_bitset(self); int idx = NUM2INT(index); validate_index(bs, idx); assign_bit(bs, idx, value); return Qtrue; }
/****************************************************************************** * private メソッド *****************************************************************************/ void UploadItemIterator::init(apr_pool_t *pool, UploadItemList *item_list, apr_size_t start_index, apr_size_t end_index, int (*cmp)(const UploadItem *a, const UploadItem *b)) { apr_size_t list_size; validate_index(item_list, &start_index, &end_index); size_= end_index - start_index; if (size_ == 0) { return; } // MEMO: 無駄が多いけど,ローカルに全部コピーしてソート list_size = item_list->size(); APR_PALLOC(header_list_, UploadItem::header_t *, pool, sizeof(UploadItem::header_t) * list_size); memcpy(header_list_, item_list->get_by_index(0), sizeof(UploadItem::header_t) * list_size); qsort(header_list_, list_size, sizeof(UploadItem), reinterpret_cast<int (*)(const void *a, const void *b)>(cmp)); header_list_ += start_index; }
static VALUE rb_bitset_clear(int argc, VALUE * argv, VALUE self) { int i; Bitset * bs = get_bitset(self); for(i = 0; i < argc; i++) { VALUE index = argv[i]; int idx = NUM2INT(index); validate_index(bs, idx); clear_bit(bs, idx); } return Qtrue; }
/*-------------------------------------------------------------------------------------- previous() Select previous Menu return the current selected menu --------------------------------------------------------------------------------------*/ int MenuController::previous() { int new_index = current_index - 1; if( validate_index(new_index) ) { current_index = new_index; } return current_index; }
/*-------------------------------------------------------------------------------------- next() Select next Menu return the current selected menu --------------------------------------------------------------------------------------*/ int MenuController::next() { int new_index = current_index + 1; if( validate_index(new_index) ) { current_index = new_index; } return current_index; }
/////////////////////////////////////////////////////////////////////////////////// // dir_node // bool bin_index_t::dir_node::get(const data_t& key,data_t& val) const { validate_key_len(key); validate_index(); data_t head(key.begin(),key.begin()+parent.dir_key_len); data_t tail(key.begin()+parent.dir_key_len,key.end()); if(!std::binary_search(indexes.begin(),indexes.end(),head,data_less_pr())) return false; validate_sub(head); return sub_node->get(tail,val); }
void UploadItemIterator::init(apr_pool_t *pool, UploadItemList *item_list, apr_size_t start_index, apr_size_t end_index) { validate_index(item_list, &start_index, &end_index); size_= end_index - start_index; if (size_ == 0) { return; } APR_PALLOC(header_list_, UploadItem::header_t *, pool, sizeof(UploadItem::header_t)*size_); memcpy(header_list_, item_list->get_by_index(start_index), sizeof(UploadItem::header_t) * size_); }
bool bin_index_t::dir_node::set(const data_t& key,const data_t& val) { validate_key_len(key); validate_index(); data_t head(key.begin(),key.begin()+parent.dir_key_len); data_t tail(key.begin()+parent.dir_key_len,key.end()); bool already_exists=std::binary_search(indexes.begin(),indexes.end(),head,data_less_pr()); if(!already_exists)create_text_child(head); validate_sub(head); bool r=sub_node->set(tail,val); return r; }
bool bin_index_t::dir_node::first(data_t& key,data_t& val) const { validate_index(); if(indexes.empty())return false; const data_t& head=indexes.front(); validate_sub(head); data_t tail; if(!sub_node->first(tail,val))return false; key=head; key.insert(key.end(),tail.begin(),tail.end()); return true; }
/****************************************************************************** * public メソッド *****************************************************************************/ ThumbnailIterator::ThumbnailIterator(apr_pool_t *pool, UploadItemManager *item_manager, apr_size_t start_index, apr_size_t end_index) : thumbnail_list_(NULL), curr_index_(0) { ThumbnailList *thumbnail_list; ReadLocker manager_locker(item_manager->lock_); thumbnail_list = item_manager->thumbnail_list_; validate_index(thumbnail_list, &start_index, &end_index); size_= end_index - start_index; if (size_ != 0) { APR_PALLOC(thumbnail_list_, apr_size_t *, pool, sizeof(apr_size_t)*(end_index-start_index)); memcpy(thumbnail_list_, thumbnail_list->get_by_index(start_index), sizeof(apr_size_t)*size_); }
int mlx4_replace_mac(struct mlx4_dev *dev, u8 port, int qpn, u64 new_mac, u8 wrap) { struct mlx4_port_info *info = &mlx4_priv(dev)->port[port]; struct mlx4_mac_table *table = &info->mac_table; int index = qpn - info->base_qpn; struct mlx4_mac_entry *entry; int err; if (dev->caps.vep_uc_steering) { entry = radix_tree_lookup(&info->mac_tree, qpn); if (!entry) return -EINVAL; index = find_index(dev, table, entry->mac); mlx4_uc_steer_release(dev, port, entry->mac, qpn, 0); entry->mac = new_mac; err = mlx4_uc_steer_add(dev, port, entry->mac, &qpn, 0); if (err || index < 0) return err; } mutex_lock(&table->mutex); err = validate_index(dev, table, index); if (err) goto out; table->entries[index] = cpu_to_be64(new_mac | MLX4_MAC_VALID); err = mlx4_set_port_mac_table(dev, port, table->entries); if (unlikely(err)) { mlx4_err(dev, "Failed adding MAC: 0x%llx\n", (unsigned long long) new_mac); table->entries[index] = 0; } out: mutex_unlock(&table->mutex); return err; }
static VALUE rb_bitset_aref(VALUE self, VALUE index) { Bitset * bs = get_bitset(self); int idx = NUM2INT(index); validate_index(bs, idx); return get_bit(bs, idx) > 0 ? Qtrue : Qfalse; }
boolean MenuController::validate_option(int index, int option) { return validate_index(index) && (option >= 0) && (option < options[index]); }