init
Some checks failed
Docker. / Ubuntu (push) Has been cancelled
User-agent updater. / User-agent (push) Failing after 15s
Lock Threads / lock (push) Failing after 10s
Waiting for answer. / waiting-for-answer (push) Failing after 22s
Needs user action. / needs-user-action (push) Failing after 8s
Can't reproduce. / cant-reproduce (push) Failing after 8s
Close stale issues and PRs / stale (push) Has been cancelled
Some checks failed
Docker. / Ubuntu (push) Has been cancelled
User-agent updater. / User-agent (push) Failing after 15s
Lock Threads / lock (push) Failing after 10s
Waiting for answer. / waiting-for-answer (push) Failing after 22s
Needs user action. / needs-user-action (push) Failing after 8s
Can't reproduce. / cant-reproduce (push) Failing after 8s
Close stale issues and PRs / stale (push) Has been cancelled
This commit is contained in:
97
Telegram/ThirdParty/nimf/modules/services/xim/IMdkit/i18nOffsetCache.c
vendored
Normal file
97
Telegram/ThirdParty/nimf/modules/services/xim/IMdkit/i18nOffsetCache.c
vendored
Normal file
@@ -0,0 +1,97 @@
|
||||
/* -*- Mode: C; indent-tabs-mode: nil; c-basic-offset: 2; tab-width: 2 -*- */
|
||||
/*
|
||||
* Copyright (C) 2014 Peng Huang <shawn.p.huang@gmail.com>
|
||||
* Copyright (C) 2014 Red Hat, Inc.
|
||||
*
|
||||
* Permission to use, copy, modify, distribute, and sell this
|
||||
* software and its documentation for any purpose is hereby granted
|
||||
* without fee, provided that the above copyright notice appear in
|
||||
* all copies and that both that copyright notice and this permission
|
||||
* notice appear in supporting documentation, and that the name of
|
||||
* the copyright holders not be used in advertising or publicity
|
||||
* pertaining to distribution of the software without specific,
|
||||
* written prior permission. The copyright holders make no
|
||||
* representations about the suitability of this software for any
|
||||
* purpose. It is provided "as is" without express or implied
|
||||
* warranty.
|
||||
*
|
||||
* THE COPYRIGHT HOLDERS DISCLAIM ALL WARRANTIES WITH REGARD TO THIS
|
||||
* SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND
|
||||
* FITNESS, IN NO EVENT SHALL THE COPYRIGHT HOLDERS BE LIABLE FOR ANY
|
||||
* SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
|
||||
* WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN
|
||||
* AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION,
|
||||
* ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF
|
||||
* THIS SOFTWARE.
|
||||
*
|
||||
* Author: Klemens Baum <klemensbaum@gmail.com>
|
||||
*/
|
||||
|
||||
#include <X11/Xlib.h>
|
||||
#include <stddef.h>
|
||||
#include "Xi18n.h"
|
||||
|
||||
/*
|
||||
* The XIM specification does not limit the number of window properties
|
||||
* that can be used to transfer data, but Xlib uses the atom strings
|
||||
* _client0 through _client20.
|
||||
*
|
||||
* So use that as a sensible initial size for the offset cache.
|
||||
*/
|
||||
#define INITIAL_OFFSET_CACHE_CAPACITY 21
|
||||
#define OFFSET_CACHE_GROWTH_FACTOR 2
|
||||
|
||||
void _Xi18nInitOffsetCache (Xi18nOffsetCache *offset_cache)
|
||||
{
|
||||
offset_cache->size = 0;
|
||||
offset_cache->capacity = INITIAL_OFFSET_CACHE_CAPACITY;
|
||||
offset_cache->data = (Xi18nAtomOffsetPair *) malloc (
|
||||
INITIAL_OFFSET_CACHE_CAPACITY * sizeof (Xi18nAtomOffsetPair));
|
||||
}
|
||||
|
||||
unsigned long _Xi18nLookupPropertyOffset (Xi18nOffsetCache *offset_cache,
|
||||
Atom key)
|
||||
{
|
||||
Xi18nAtomOffsetPair *data;
|
||||
size_t i;
|
||||
|
||||
data = offset_cache->data;
|
||||
for (i = 0; i < offset_cache->size; ++i) {
|
||||
if (data[i].key == key) {
|
||||
return data[i].offset;
|
||||
}
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
void _Xi18nSetPropertyOffset (Xi18nOffsetCache *offset_cache, Atom key,
|
||||
unsigned long offset)
|
||||
{
|
||||
Xi18nAtomOffsetPair *data = offset_cache->data;
|
||||
size_t i;
|
||||
|
||||
for (i = 0; i < offset_cache->size; ++i) {
|
||||
if (data[i].key == key) {
|
||||
data[i].offset = offset;
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
if (++offset_cache->size > offset_cache->capacity) {
|
||||
offset_cache->capacity *= OFFSET_CACHE_GROWTH_FACTOR;
|
||||
offset_cache->data = (Xi18nAtomOffsetPair *) realloc (data,
|
||||
offset_cache->capacity * sizeof (Xi18nAtomOffsetPair));
|
||||
if (offset_cache->data == NULL) {
|
||||
offset_cache->data = data;
|
||||
--offset_cache->size;
|
||||
}
|
||||
data = offset_cache->data;
|
||||
}
|
||||
|
||||
if (offset_cache->size > 0) {
|
||||
data[i].key = key;
|
||||
data[i].offset = offset;
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user