bool XYVirtualKeyboard::a2zkey_clicked(int unicode, int key)
{
#ifdef XYINPUT
    alreadyInputLetters.append(QChar(unicode).toLower());
    search_begin(alreadyInputLetters);
#else
    search_begin(alreadyInputLetters);
    if (alreadyInputLetters.size() > 26) // 如果查询内容太长google库崩溃
    {
        return true;
    }
    alreadyInputLetters += QChar(unicode);
    unsigned cand_num = googlePinyin->search(alreadyInputLetters.toLower());
    translateHView->dataStrings.clear();

    for (unsigned i = 0; i < cand_num; i++) {
        QString str = googlePinyin->get_candidate(i);
        translateHView->dataStrings.append(str);
    }
    translateHView->move(0, 0);
    translateHView->update();

    loadLetterLabel();
#endif
    return true;
}
bool XYVirtualKeyboard::backspace_clicked()
{
#ifdef XYINPUT
    if (!alreadyInputLetters.isEmpty())
    {
        alreadyInputLetters = alreadyInputLetters.left(alreadyInputLetters.size() - 1);
        if (!alreadyInputLetters.isEmpty())
        {
            search_begin(alreadyInputLetters);
        }
        else
        {
            clear_history();
        }
    }
#else
    if (letterLabel->text().isEmpty())
    {
        return false;
    }

    unsigned cand_num;
    int already_cand_num = alreadySelectTranslates.size();

    if (already_cand_num > 0) {
        // remove last choose
        alreadySelectTranslates.removeLast();

        cand_num = googlePinyin->unchoose();

    } else {
        // remove last input key
        int spell_len = alreadyInputLetters.length();
        alreadyInputLetters.truncate(spell_len - 1);

        cand_num = googlePinyin->del_search(spell_len - 1);
    }

    if (cand_num == 0) {
        search_closure();
    } else {
        translateHView->dataStrings.clear();
        for (unsigned i = 0; i < cand_num; i++) {
            QString str = googlePinyin->get_candidate(i);
            translateHView->dataStrings.append(str);
        }
        translateHView->move(0, 0);
        translateHView->update();
    }
    loadLetterLabel();
#endif
    return true;
}
示例#3
0
void XonoticPlayerModelSelector_configureXonoticPlayerModelSelector(entity me)
{
	float sortbuf, glob, i;
	string fn;

	glob = search_begin(language_filename(get_model_datafilename(string_null, -1, "txt")), TRUE, TRUE);
	if (glob < 0)
		return;

	me.configureXonoticImage(me, string_null, -1);

	sortbuf = buf_create();
	for(i = 0; i < search_getsize(glob); ++i)
	{
		// select model #i!
		fn = search_getfilename(glob, i);
		if(!get_model_parameters(fn, -1))
			continue;
		bufstr_add(sortbuf, sprintf("%-128s%s", get_model_parameters_name, fn), 1);
	}
	search_end(glob);
	buf_sort(sortbuf, 128, 0);
	me.numModels = buf_getsize(sortbuf);
	me.bufModels = buf_create();
	for(i = 0; i < me.numModels; ++i)
	{
		fn = substring(bufstr_get(sortbuf, i), 128, -1);
		if(!get_model_parameters(fn, -1))
			error("But it JUST worked!");
		bufstr_set(me.bufModels, BUFMODELS_COUNT*i+BUFMODELS_TITLE, get_model_parameters_name);
		bufstr_set(me.bufModels, BUFMODELS_COUNT*i+BUFMODELS_IMAGE, strcat("/", substring(get_model_datafilename(get_model_parameters_modelname, get_model_parameters_modelskin, "tga"), 0, -5)));
		bufstr_set(me.bufModels, BUFMODELS_COUNT*i+BUFMODELS_MODEL, get_model_parameters_modelname);
		bufstr_set(me.bufModels, BUFMODELS_COUNT*i+BUFMODELS_SKIN, ftos(get_model_parameters_modelskin));
		get_model_parameters_desc = strcat(get_model_parameters_desc, "\n");
		if(get_model_parameters_sex)
			get_model_parameters_desc = strcat(get_model_parameters_desc, sprintf("\nSex: %s", get_model_parameters_sex));
		if(get_model_parameters_weight)
			get_model_parameters_desc = strcat(get_model_parameters_desc, sprintf("\nWeight: %g kg", get_model_parameters_weight));
		if(get_model_parameters_age)
			get_model_parameters_desc = strcat(get_model_parameters_desc, sprintf("\nAge: %g", get_model_parameters_age));
		while(substring(get_model_parameters_desc, -1, 1) == "\n")
			get_model_parameters_desc = substring(get_model_parameters_desc, 0, -2);
		bufstr_set(me.bufModels, BUFMODELS_COUNT*i+BUFMODELS_DESC, get_model_parameters_desc);
	}
	buf_del(sortbuf);
	get_model_parameters(string_null, 0);
	me.loadCvars(me); // this will select the initial model, depending on the current cvars
	me.go(me, 0); // this will set the vars for the selected model
}
	void add( const mass_point_vector_type &mp )
	{
		if( m_indices.size() != mp.size() ) m_indices.resize( mp.size() );
		if( m_permutated_indices.size() != mp.size() ) m_permutated_indices.resize( mp.size() );

		thrust::counting_iterator<unsigned int> search_begin(0);

		// determine the index of each particle
		thrust::transform( mp.begin() , mp.end() , m_indices.begin() ,
				mp_to_indices( m_num_of_bins , m_height , m_x_min , m_x_max ) );

		// sort according to the indices
		thrust::copy( search_begin , search_begin + mp.size() , m_permutated_indices.begin() );
		thrust::sort_by_key( m_indices.begin() , m_indices.end() , m_permutated_indices.begin() );

		// calculate the center of mass velocity of each bins
		thrust::reduce_by_key( m_indices.begin() , m_indices.end() ,
				thrust::make_transform_iterator(
						thrust::make_permutation_iterator( mp.begin() , m_permutated_indices.begin() ) ,
						mp_to_vel() ) ,
				m_keys.begin() , m_av.begin() );

		// add the center of mass velocity to the bins
		thrust::transform( m_bins.begin() , m_bins.end() , m_av.begin() , m_bins.begin() ,
				thrust::plus< point_type >() );

		// find the beginning of each bucket's list of points
		thrust::lower_bound( m_indices.begin() , m_indices.end() ,
				search_begin , search_begin + m_num_of_bins + 1 ,
				m_bucket_begin.begin() );

		// find the end of each bucket's list of points
		thrust::upper_bound( m_indices.begin(), m_indices.end() ,
				search_begin , search_begin + m_num_of_bins + 1 ,
		        m_bucket_end.begin() );

		// take the difference between bounds to find each bucket’s size
		thrust::transform( m_bucket_end.begin() , m_bucket_end.end() ,
				m_bucket_begin.begin() , m_bucket_sizes.begin() ,
				thrust::minus<unsigned int>() );

		// add the bucket size to the counts
		thrust::transform( m_counts.begin() , m_counts.end() , m_bucket_sizes.begin() , m_counts.begin() ,
				thrust::plus< size_type >() );
	}
示例#5
0
文件: demolist.c 项目: Bader14/Nexuiz
void NexuizDemoList_getDemos(entity me)
{
    string s;
    
    if(me.filterString)
    	//subdirectory in filterString allowed    
    	s=strcat("demos/*", me.filterString, "*.dem");    	
    else
    	s="demos/*.dem";
	
    //dprint("Search demos with the pattern ", s, "\n");    
	if(me.listDemo >= 0)
		search_end(me.listDemo);
    me.listDemo = search_begin(s, FALSE, TRUE);
    if(me.listDemo < 0)
    	me.nItems=0;
    else
    	me.nItems=search_getsize(me.listDemo);				
}
void InstantAction_LoadMap(entity btn, entity dummy)
{
	float glob, i, n, fh;
	string s;
	glob = search_begin("maps/*.instantaction", TRUE, TRUE);
	if(glob < 0)
		return;
	i = ceil(random() * search_getsize(glob)) - 1;
	fh = fopen(search_getfilename(glob, i), FILE_READ);
	search_end(glob);
	if(fh < 0)
		return;
	while((s = fgets(fh)))
	{
		if(substring(s, 0, 4) == "set ")
			s = substring(s, 4, strlen(s) - 4);
		n = tokenize_console(s);
		if(argv(0) == "bot_number")
			cvar_set("bot_number", argv(1));
		else if(argv(0) == "skill")
			cvar_set("skill", argv(1));
		else if(argv(0) == "timelimit")
			cvar_set("timelimit_override", argv(1));
		else if(argv(0) == "fraglimit")
			cvar_set("fraglimit_override", argv(1));
		else if(argv(0) == "changelevel")
		{
			fclose(fh);
			localcmd("\nmenu_loadmap_prepare\n");
			MapInfo_SwitchGameType(MAPINFO_TYPE_DEATHMATCH);
			MapInfo_LoadMap(argv(1));
			cvar_set("lastlevel", "1");
			return;
		}
	}
	fclose(fh);
}
void regions(cuda::Param<T> out, cuda::CParam<char> in, cudaTextureObject_t tex)
{
    const dim3 threads(THREADS_X, THREADS_Y);

    const int blk_x = divup(in.dims[0], threads.x*2);
    const int blk_y = divup(in.dims[1], threads.y*2);

    const dim3 blocks(blk_x, blk_y);

    CUDA_LAUNCH((initial_label<T,n_per_thread>), blocks, threads, out, in);

    POST_LAUNCH_CHECK();

    int h_continue = 1;

    while (h_continue) {
        h_continue = 0;
        CUDA_CHECK(cudaMemcpyToSymbolAsync(continue_flag, &h_continue, sizeof(int),
                    0, cudaMemcpyHostToDevice,
                    cuda::getActiveStream()));

        CUDA_LAUNCH((update_equiv<T, 16, n_per_thread, full_conn>), blocks, threads, out, tex);

        POST_LAUNCH_CHECK();

        CUDA_CHECK(cudaMemcpyFromSymbolAsync(&h_continue, continue_flag, sizeof(int),
                    0, cudaMemcpyDeviceToHost,
                    cuda::getActiveStream()));
        CUDA_CHECK(cudaStreamSynchronize(cuda::getActiveStream()));
    }

    // Now, perform the final relabeling.  This converts the equivalency
    // map from having unique labels based on the lowest pixel in the
    // component to being sequentially numbered components starting at
    // 1.
    int size = in.dims[0] * in.dims[1];
    auto tmp = cuda::memAlloc<T>(size);
    CUDA_CHECK(cudaMemcpyAsync(tmp.get(), out.ptr, size * sizeof(T),
                          cudaMemcpyDeviceToDevice,
                          cuda::getActiveStream()));

    // Wrap raw device ptr
    thrust::device_ptr<T> wrapped_tmp = thrust::device_pointer_cast(tmp.get());

    // Sort the copy
    THRUST_SELECT(thrust::sort, wrapped_tmp, wrapped_tmp + size);

    // Take the max element which is the number
    // of label assignments to compute.
    const int num_bins = wrapped_tmp[size - 1] + 1;

    // If the number of label assignments is two,
    // then either the entire input image is one big
    // component(1's) or it has only one component other than
    // background(0's). Either way, no further
    // post-processing of labels is required.
    if (num_bins<=2)
        return;

    cuda::ThrustVector<T> labels(num_bins);

    // Find the end of each section of values
    thrust::counting_iterator<T> search_begin(0);
    THRUST_SELECT(thrust::upper_bound, wrapped_tmp,  wrapped_tmp  + size,
                        search_begin, search_begin + num_bins,
                        labels.begin());

    THRUST_SELECT(thrust::adjacent_difference, labels.begin(), labels.end(), labels.begin());

    // Operators for the scan
    clamp_to_one<T> clamp;
    thrust::plus<T> add;

    // Perform scan -- this computes the correct labels for each component
    THRUST_SELECT(thrust::transform_exclusive_scan,
                                     labels.begin(),
                                     labels.end(),
                                     labels.begin(),
                                     clamp,
                                     0,
                                     add);
    // Apply the correct labels to the equivalency map
    CUDA_LAUNCH((final_relabel<T,n_per_thread>), blocks,threads,
            out, in, thrust::raw_pointer_cast(&labels[0]));

    POST_LAUNCH_CHECK();
}