Example #1
0
int main(int argc, char* argv[])
{
	int i = 0;
	int n = 10000;
	int ret_data = 0;
	HashTable* hash_table = hash_table_create(NULL, NULL, hash_int, 31);

	for(i = 0; i < n; i++)
	{
		assert(hash_table_length(hash_table) == i);
		assert(hash_table_insert(hash_table, (void*)i) == RET_OK);
		assert(hash_table_length(hash_table) == (i + 1));
		assert(hash_table_find(hash_table, cmp_int, (void*)i, (void**)&ret_data) == RET_OK);
		assert(ret_data == i);
	}

	for(i = 0; i < n; i++)
	{
		assert(hash_table_delete(hash_table, cmp_int, (void*)i) == RET_OK);
		assert(hash_table_length(hash_table) == (n - i -1));
		assert(hash_table_find(hash_table, cmp_int, (void*)i, (void**)&ret_data) != RET_OK);
	}
	
	hash_table_destroy(hash_table);

	return 0;
}
Example #2
0
TEST_F(link_varyings, one_interface_and_one_simple_input)
{
   ir_variable *const v =
      new(mem_ctx) ir_variable(glsl_type::vec(4),
                               "a",
                               ir_var_shader_in);


   ir.push_tail(v);

   ir_variable *const iface =
      new(mem_ctx) ir_variable(simple_interface->fields.structure[0].type,
                               simple_interface->fields.structure[0].name,
                               ir_var_shader_in);

   iface->init_interface_type(simple_interface);

   ir.push_tail(iface);

   ASSERT_TRUE(linker::populate_consumer_input_sets(mem_ctx,
                                                    &ir,
                                                    consumer_inputs,
                                                    consumer_interface_inputs,
                                                    junk));

   char *const iface_field_name = interface_field_name(simple_interface);

   EXPECT_EQ((void *) iface, hash_table_find(consumer_interface_inputs,
                                             iface_field_name));
   EXPECT_EQ(1u, num_elements(consumer_interface_inputs));

   EXPECT_EQ((void *) v, hash_table_find(consumer_inputs, "a"));
   EXPECT_EQ(1u, num_elements(consumer_inputs));
}
Example #3
0
void
ir_coalesce_floats_replacing_visitor::handle_rvalue(ir_rvalue **rvalue)
{
   ir_rvalue *ir = *rvalue;
   if(!ir) return;

   ir_dereference *dv;
   ir_swizzle *swiz;

   ir_swizzle *outerswiz = ir->as_swizzle();
   if( outerswiz ) {
      dv = outerswiz->val->as_dereference();
      if(dv) {
         //fprintf(stderr, "var1: %s\n", dv->variable_referenced()->name);
         swiz = (ir_swizzle*)hash_table_find(promotions, dv->variable_referenced());
         if(swiz) {
            //fprintf(stderr, "// replacing[1] %p %p\n", ir, swiz);
            *rvalue = swiz->clone(ralloc_parent(swiz), NULL);
            return;
         }
      }
   }

   dv = ir->as_dereference();
   if(!dv) return;

   swiz = (ir_swizzle*)hash_table_find(promotions, dv->variable_referenced());

   //fprintf(stderr, "var2: %s %p\n", dv->variable_referenced()->name, dv->variable_referenced());
   if (!swiz) return;

   //fprintf(stderr, "// replacing[2] %p %p\n", ir, swiz);
   *rvalue = swiz->clone(ralloc_parent(swiz), NULL);
}
Example #4
0
void ir_remap_agalvars_visitor::handleDeref(ir_variable **varloc)
{
   ir_variable *glvar = *varloc;
   ir_variable *agalvar = (ir_variable*)hash_table_find(varhash, glvar->name);

   if(agalvar) {
      *varloc = agalvar;
      //fprintf(stderr, "remapping deref -- %s\n", glvar->name);
   } else if(glvar->name[0] == 'g' && glvar->name[1] == 'l' && glvar->name[2] == '_') {
      computeAgalName(glvar);
      agalvar = new (glvar) ir_variable(glvar->type, ralloc_strdup(glvar, &agalName[0]), (ir_variable_mode)glvar->mode, (glsl_precision)glvar->precision);
      hash_table_insert(varhash, agalvar, ralloc_strdup(agalvar, glvar->name));
      hash_table_insert(varhash, agalvar, ralloc_strdup(agalvar, &agalName[0]));
      hash_table_insert(renamedvars, glvar, glvar);
      varbase->insert_before(agalvar);
      *varloc = agalvar;
      //fprintf(stderr, "renaming: %s -> %s\n", glvar->name, &agalName[0]);
   } else if (hash_table_find(renamedvars, glvar)) {
      // already renamed
   } else {
      computeAgalName(glvar);
      glvar->name = ralloc_strdup(glvar, agalName);
      hash_table_insert(renamedvars, glvar, glvar);
   }
}
ir_visitor_status
ir_shorten_liveranges_visitor::visit(ir_dereference_variable *ir)
{
  ir_variable *v = ir->variable_referenced();
  //printf("ir_shorten_liveranges_visitor: ir_dereference_variable %s\n", v ? v->name : "NULL");
  
  if(hash_table_find(varhash, v) == (void*)VAR_UNHANDLED) {
    hash_table_insert(varhash, (void*)VAR_HANDLED, v); // used before assigned?!
  } else if(hash_table_find(varhash, v) > (void*)VAR_PTR) {
    referencedVars.push_back(ir->variable_referenced());
  }
  return visit_continue;
}
	foreach_list_safe(node, instructions)
	{
		ir_instruction *ir = (ir_instruction *)node;

		if (ir->ir_type == ir_type_assignment)
		{
			ir_assignment *assign = (ir_assignment *)ir;

			if (hash_table_find(ht, assign) == NULL)
			{
				hash_table_insert(ht, assign, assign);

				/* If the LHS of the assignment is a condition variable that was
				* previously added, insert an additional assignment of false to
				* the variable.
				*/
				const bool assign_to_cv =
					hash_table_find(ht, assign->lhs->variable_referenced()) != NULL;

				if (!assign->condition)
				{
					if (assign_to_cv)
					{
						assign->rhs =
							new(mem_ctx)ir_expression(ir_binop_logic_and,
							glsl_type::bool_type,
							cond_expr->clone(mem_ctx, NULL),
							assign->rhs);
					}
					else
					{
						assign->condition = cond_expr->clone(mem_ctx, NULL);
					}
				}
				else
				{
					assign->condition =
						new(mem_ctx)ir_expression(ir_binop_logic_and,
						glsl_type::bool_type,
						cond_expr->clone(mem_ctx, NULL),
						assign->condition);
				}
			}
		}

		/* Now, move from the if block to the block surrounding it. */
		ir->remove();
		if_ir->insert_before(ir);
	}
Example #7
0
File: bank.c Project: yufangfred/hm
void handle_user_login(Bank* bank, char* args) {
    char send_msg[MAX_LINE_SIZE + 1];
    memset(send_msg, 0, MAX_LINE_SIZE);

    if ((char*)hash_table_find(bank->user_balance_ht, args) == NULL ||
            (char*)hash_table_find(bank->logged_user_ht, args) != NULL)  {
        strcat(send_msg, "NA");
    } else {
        strcat(send_msg, "OK");
        hash_table_add(bank->logged_user_ht, args, "1");
    }

    bank_encrypt(bank, send_msg, strlen(send_msg));
    bank_send(bank, send_msg, strlen(send_msg));
}
Example #8
0
/** Process pending wait requests */
void process_pending_wait(void)
{
	task_exit_t texit;
	
loop:
	list_foreach(pending_wait, cur) {
		pending_wait_t *pr = list_get_instance(cur, pending_wait_t, link);
		
		unsigned long keys[2] = {
			LOWER32(pr->id),
			UPPER32(pr->id)
		};
		
		link_t *link = hash_table_find(&task_hash_table, keys);
		if (!link)
			continue;
		
		hashed_task_t *ht = hash_table_get_instance(link, hashed_task_t, link);
		if (!ht->finished)
			continue;
		
		if (!(pr->callid & IPC_CALLID_NOTIFICATION)) {
			texit = ht->have_rval ? TASK_EXIT_NORMAL :
			    TASK_EXIT_UNEXPECTED;
			ipc_answer_2(pr->callid, EOK, texit,
			    ht->retval);
		}
		
		hash_table_remove(&task_hash_table, keys, 2);
		list_remove(cur);
		free(pr);
		goto loop;
	}
Example #9
0
void slang_sym_type_add(const char* in_sym) {
    if (!hash_table_find(symTable, &in_sym)) {
        char* str = malloc(strlen(in_sym)+1);
        strcpy(str, in_sym);
        hash_table_insert(symTable, &str, str);
    }
}
Example #10
0
unsigned num_space_collapser_get (num_space_collapser_t *nsc, unsigned key)
{
    unsigned *val;
    char key_str[1024];


    pthread_mutex_lock(&nsc->mutex);

    sprintf(key_str, "%u", key);

    if ((val = (unsigned *)hash_table_find(nsc->hash_table, key_str)))
    {
        printf("returning mapping %s -> %u\n", key_str, *val);
    }
    else
    {
        val = (unsigned *)malloc(sizeof(unsigned));
        *val = next_value++;
        printf("adding mapping %s -> %u\n", key_str, *val);
        hash_table_add(nsc->hash_table, strdup(key_str), (void *)val);
    }

    pthread_mutex_unlock(&nsc->mutex);

    return *val;
}
Example #11
0
int slang_sym_table_check(const char* in_sym) {
    const char* sym = hash_table_find(symTable, &in_sym);
    if (!sym)
        return IDENTIFIER;
    else
        return TYPE_NAME;
}
Example #12
0
/* void close_database(id) */
static int cc_close_database(lua_State* L)
{
	int id;
	database_handler_t* database_handler;
	worker_handler_t* handler = find_handler_by_stack(L);
	int args = lua_gettop(L);
	if (args < 1)
	{
		error_log("`%s` parameter lack:%d\n", __FUNCTION__, args);
		return 0;
	}
	if (!lua_isnumber(L, -args))
	{
		error_log("`%s` parameter error:%s\n", __FUNCTION__, lua_typename(L, lua_type(L, -args)));
		return 0;
	}
	id = lua_tointeger(L, -args);
	database_handler = hash_table_find(handler->database_table, id);
	if (!database_handler)
	{
		error_log("`%s` not found database:%d\n", __FUNCTION__, id);
		return 0;
	}
	hash_table_remove(handler->database_table, id);
	database_handler_delete(database_handler);
	return 0;
}
Example #13
0
/** Process pending wait requests */
void process_pending_wait(void)
{
	task_exit_t texit;
	
loop:
	list_foreach(pending_wait, link, pending_wait_t, pr) {
		ht_link_t *link = hash_table_find(&task_hash_table, &pr->id);
		if (!link)
			continue;
		
		hashed_task_t *ht = hash_table_get_inst(link, hashed_task_t, link);
		if (!ht->finished)
			continue;
		
		if (!(pr->callid & IPC_CALLID_NOTIFICATION)) {
			texit = ht->have_rval ? TASK_EXIT_NORMAL :
			    TASK_EXIT_UNEXPECTED;
			ipc_answer_2(pr->callid, EOK, texit,
			    ht->retval);
		}
		
		list_remove(&pr->link);
		free(pr);
		goto loop;
	}
Example #14
0
const glsl_type *
glsl_type::get_array_instance(const glsl_type *base, unsigned array_size)
{

   if (array_types == NULL) {
      array_types = hash_table_ctor(64, hash_table_string_hash,
				    hash_table_string_compare);
   }

   /* Generate a name using the base type pointer in the key.  This is
    * done because the name of the base type may not be unique across
    * shaders.  For example, two shaders may have different record types
    * named 'foo'.
    */
   char key[128];
   snprintf(key, sizeof(key), "%p[%u]", (void *) base, array_size);

   const glsl_type *t = (glsl_type *) hash_table_find(array_types, key);
   if (t == NULL) {
      t = new glsl_type(base, array_size);

      hash_table_insert(array_types, (void *) t, ralloc_strdup(mem_ctx, key));
   }

   assert(t->base_type == GLSL_TYPE_ARRAY);
   assert(t->length == array_size);
   assert(t->fields.array == base);

   return t;
}
Example #15
0
const glsl_type *
glsl_type::get_interface_instance(const glsl_struct_field *fields,
				  unsigned num_fields,
				  enum glsl_interface_packing packing,
				  const char *name)
{
   const glsl_type key(fields, num_fields, packing, name);

   if (interface_types == NULL) {
      interface_types = hash_table_ctor(64, record_key_hash, record_key_compare);
   }

   const glsl_type *t = (glsl_type *) hash_table_find(interface_types, & key);
   if (t == NULL) {
      t = new glsl_type(fields, num_fields, packing, name);

      hash_table_insert(interface_types, (void *) t, t);
   }

   assert(t->base_type == GLSL_TYPE_INTERFACE);
   assert(t->length == num_fields);
   assert(strcmp(t->name, name) == 0);

   return t;
}
int hash_table_insert(struct hash_table_t *table, char *key, void *data)
{
	struct hash_table_elem_t *elem;

	int index;

	/* No find operation */
	table->find_op = 0;

	/* Data cannot be null */
	if (!data)
		return 0;

	/* Rehashing */
	if (table->count >= table->size / 2)
		hash_table_grow(table);

	/* Element must not exists */
	elem = hash_table_find(table, key, &index);
	if (elem)
		return 0;

	/* Create element and insert at the head of collision list */
	elem = hash_table_elem_create(key, data);
	elem->next = table->elem_vector[index];
	table->elem_vector[index] = elem;

	/* One more element */
	table->count++;
	assert(table->count < table->size);

	/* Success */
	return 1;
}
ir_visitor_status
ir_set_program_inouts_visitor::visit_enter(ir_dereference_array *ir)
{
   ir_dereference_variable *deref_var;
   ir_constant *index = ir->array_index->as_constant();
   deref_var = ir->array->as_dereference_variable();
   ir_variable *var = NULL;

   /* Check that we're dereferencing a shader in or out */
   if (deref_var)
      var = (ir_variable *)hash_table_find(this->ht, deref_var->var);

   if (index && var) {
      int width = 1;

      if (deref_var->type->is_array() &&
	  deref_var->type->fields.array->is_matrix()) {
	 width = deref_var->type->fields.array->matrix_columns;
      }

      mark(this->prog, var, index->value.i[0] * width, width,
           this->is_fragment_shader);
      return visit_continue_with_parent;
   }

   return visit_continue;
}
Example #18
0
partychan_t *partychan_lookup_cid(int cid)
{
	partychan_t *chan = NULL;

	hash_table_find(cid_ht, (void *)cid, &chan);
	if (chan && chan->flags & PARTY_DELETED) chan = NULL;
	return(chan);
}
Example #19
0
/* bool update_record(id, table_name, sid, o) */
static int cc_update_record(lua_State* L)
{
	int id;
	int64_t sid;
	size_t len;
	const char* data;
	const char* table_name;
	bool retcode;
	database_handler_t* database_handler;
	worker_handler_t* handler = find_handler_by_stack(L);
	int args = lua_gettop(L);
	if (args < 4)
	{
		error_log("`%s` parameter lack:%d\n", __FUNCTION__, args);
		return 0;
	}

	if (!lua_isnumber(L, -args))
	{
		error_log("`%s` parameter error:%s\n", __FUNCTION__, lua_typename(L, lua_type(L, -args)));
		return 0;
	}

	if (!lua_isstring(L, -(args-1)))
	{
		error_log("`%s` parameter error:%s\n", __FUNCTION__, lua_typename(L, lua_type(L, -(args-1))));
		return 0;
	}

	if (!lua_isnumber(L, -(args-2)))
	{
		error_log("`%s` parameter error:%s\n", __FUNCTION__, lua_typename(L, lua_type(L, -(args-2))));
		return 0;
	}

	if (!lua_isstring(L, -(args-3)))
	{
		error_log("`%s` parameter error:%s\n", __FUNCTION__, lua_typename(L, lua_type(L, -(args-3))));
		return 0;
	}

	id = lua_tointeger(L, -args);
	table_name = lua_tostring(L, -(args-1));
	sid = lua_tonumber(L, -(args-2));
	len = 0;
	data = lua_tolstring(L, -(args-3), &len);
	database_handler = hash_table_find(handler->database_table, id);
	if (!database_handler)
	{
		error_log("`%s` not found database:%d\n", __FUNCTION__, id);
		return 0;
	}
	retcode = record_update(database_handler, table_name, sid, data, len);
	lua_pushboolean(L, retcode ? 1 : 0);

	return 1;
}
Example #20
0
ir_visitor_status
ir_remap_agalvars_visitor::visit(ir_dereference_variable *ir)
{
   ir_variable *glvar = ir->variable_referenced();
   ir_variable *agalvar = (ir_variable*)hash_table_find(varhash, glvar->name);
   handleDeref(&ir->var);

   return visit_continue;
}
Example #21
0
void delete_process_ht(hash_table_t * fd_mappings, int32_t pid) {
	item_t * process_ht_item;

	if ( (process_ht_item = hash_table_find(fd_mappings, &pid)) != NULL ) {
		hash_table_remove(fd_mappings, &pid);
	} else {
		ERRORPRINTF("Can not find pid %"PRIi32" when removing delete_process_ht\n", pid);
	}
}
Example #22
0
ir_visitor_status ir_float_liverange_visitor::handleDereference(ir_dereference *d)
{
   ir_variable *var = d->variable_referenced();

   if(!var)
      abort();

   if(!hash_table_find(firstUse, var)) {
      hash_table_insert(firstUse, d, var);
      //fprintf(stderr, "=== ir_dereference_variable firstUse %p %p : %s ===\n", var, d, var->name);
   }

   if(hash_table_find(lastUse, var))
      hash_table_remove(lastUse, var);
   hash_table_insert(lastUse, d, var);
   //fprintf(stderr, "=== ir_dereference_variable lastUse %p %p : %s ===\n", var, d, var->name);

   return visit_continue;
}
   function *get_function(ir_function_signature *sig)
   {
      function *f = (function *) hash_table_find(this->function_hash, sig);
      if (f == NULL) {
	 f = new(mem_ctx) function(sig);
	 hash_table_insert(this->function_hash, f, sig);
      }

      return f;
   }
Example #24
0
static uhost_cache_entry_t *cache_lookup(const char *nick)
{
	char buf[64], *lnick;
	uhost_cache_entry_t *cache = NULL;

	lnick = egg_msprintf(buf, sizeof(buf), NULL, "%s", nick);
	str_tolower(lnick);
	hash_table_find(uhost_cache_ht, lnick, &cache);
	if (lnick != buf) free(lnick);
	return(cache);
}
ir_visitor_status ir_lower_conditional_assigns_to_agal_visitor::visit(ir_variable *v)
{
   if(!varbase)
      varbase = base_ir;

   bool previouslywritten = hash_table_find(assignedvars, v) != NULL;
   if(!previouslywritten)
   hash_table_insert(assignedvars, (void*)0x1, v);

   return visit_continue;
}
Example #26
0
File: bank.c Project: yufangfred/hm
void bank_deposit(Bank* bank, char* name, char* amt) {
    if (!name || !amt) {
        printf("Usage: deposit <user-name> <amt>\n");
        return;
    }
   if (check_username(name) || check_amt(amt)) {
        printf("Usage: deposit <user-name> <amt>\n");
        return;
    }
   if (!hash_table_find(bank->user_balance_ht, name)) {
       printf("No such user\n");
       return;
   }
	
	// handle name
	char card_name[MAX_CARD_NAME_SIZE + 1];
   memset(card_name, 0, MAX_CARD_NAME_SIZE);
   strcat(card_name, name);
   strcat(card_name, ".card");


	// handle balance
	int amount = 0; 
	int balance = 0;   
	sscanf(amt, "%d", &amount);		
   sscanf((char*)hash_table_find(bank->user_balance_ht, name), "%d", &balance);

    if (balance + amount < 0) {
        printf("Too rich for this program\n");
        return;
    }

    balance += amount;
	 char* tmp;
    tmp = (char*)malloc(64);
    sprintf(tmp, "%d", balance);
    hash_table_del(bank->user_balance_ht, name);
    hash_table_add(bank->user_balance_ht, name, tmp);

    printf("$%d added to %s's account\n", amount, name);
}
Example #27
0
// Return 1 if changed; 0 otherwise
bool infer_pop_edges(const BinaryKmer node_bkey, Edges *edges,
                     const Covg *covgs, const dBGraph *db_graph)
{
  Edges uedges = 0, iedges = 0xf, add_edges, edge;
  size_t orient, nuc, col, kmer_size = db_graph->kmer_size;
  const size_t ncols = db_graph->num_of_cols;
  BinaryKmer bkey, bkmer;
  hkey_t next;
  Edges newedges[ncols];

  // char tmp[MAX_KMER_SIZE+1];
  // binary_kmer_to_str(node_bkey, db_graph->kmer_size, tmp);
  // status("Inferring %s", tmp);

  for(col = 0; col < ncols; col++) {
    uedges |= edges[col]; // union of edges
    iedges &= edges[col]; // intersection of edges
    newedges[col] = edges[col];
  }

  add_edges = uedges & ~iedges;

  if(!add_edges) return 0;

  for(orient = 0; orient < 2; orient++)
  {
    bkmer = (orient == FORWARD ? binary_kmer_left_shift_one_base(node_bkey, kmer_size)
                               : binary_kmer_right_shift_one_base(node_bkey));

    for(nuc = 0; nuc < 4; nuc++)
    {
      edge = nuc_orient_to_edge(nuc, orient);
      if(add_edges & edge)
      {
        // get next bkmer, look up in graph
        if(orient == FORWARD) binary_kmer_set_last_nuc(&bkmer, nuc);
        else binary_kmer_set_first_nuc(&bkmer, dna_nuc_complement(nuc), kmer_size);

        bkey = bkmer_get_key(bkmer, kmer_size);
        next = hash_table_find(&db_graph->ht, bkey);
        ctx_assert(next != HASH_NOT_FOUND);

        for(col = 0; col < ncols; col++)
          if(covgs[col] > 0 && db_node_has_col(db_graph, next, col))
            newedges[col] |= edge;
      }
    }
  }

  int cmp = memcmp(edges, newedges, sizeof(Edges)*ncols);
  memcpy(edges, newedges, sizeof(Edges)*ncols);
  return (cmp != 0);
}
Example #28
0
File: bank.c Project: yufangfred/hm
void handle_balance_atm(Bank* bank, char* args) {
    char* tmp;
    char send_msg[MAX_LINE_SIZE + 1];
    memset(send_msg, 0, MAX_LINE_SIZE);
    
    tmp = (char*)hash_table_find(bank->user_balance_ht, args);
    printf("balance:%s\n", tmp);
    strcat(send_msg, tmp);
    
    bank_encrypt(bank, send_msg, strlen(send_msg));
    bank_send(bank, send_msg, strlen(send_msg));
}
void *hash_table_get(struct hash_table_t *table, char *key)
{
	struct hash_table_elem_t *elem;

	/* Find element */
	elem = hash_table_find(table, key, NULL);
	if (!elem)
		return NULL;

	/* Return data */
	return elem->data;
}
Example #30
0
hash_table_t * get_process_ht(hash_table_t * fd_mappings, int32_t pid) {
	process_hash_item_t * p_item;
	item_t * process_ht_item;

	if ( (process_ht_item = hash_table_find(fd_mappings, &pid)) != NULL ) {
		p_item = hash_table_entry(process_ht_item, process_hash_item_t, item);
		if ( pid == p_item->pid) {
			return (p_item->ht);
		}
	}
	return NULL;
}