aboutsummaryrefslogtreecommitdiffstats
path: root/java/src/com/android/inputmethod/latin/spellcheck/DictionaryPool.java
diff options
context:
space:
mode:
authorJean Chalard <jchalard@google.com>2011-08-16 17:37:18 +0900
committerJean Chalard <jchalard@google.com>2011-08-16 18:13:12 +0900
commita562767a14c7bbac95b25e69e360fc28d6ce9e33 (patch)
treebb18f50cf1a5d0f83a8cab1fce44cefc7431550a /java/src/com/android/inputmethod/latin/spellcheck/DictionaryPool.java
parent70b9c5d9913b676f21fe29f795bdb25324509205 (diff)
downloadlatinime-a562767a14c7bbac95b25e69e360fc28d6ce9e33.tar.gz
latinime-a562767a14c7bbac95b25e69e360fc28d6ce9e33.tar.xz
latinime-a562767a14c7bbac95b25e69e360fc28d6ce9e33.zip
Have a pool of dictionaries to check spelling.
The dictionaries and proximities are not thread-safe. In order to be able to check spelling in parallel, make a dictionary pool to call upon when a spelling check is necessary. Bug: 5156851 Change-Id: Ie3796164187dd7b7abf5ccd5d014073d43d74408
Diffstat (limited to 'java/src/com/android/inputmethod/latin/spellcheck/DictionaryPool.java')
-rw-r--r--java/src/com/android/inputmethod/latin/spellcheck/DictionaryPool.java55
1 files changed, 55 insertions, 0 deletions
diff --git a/java/src/com/android/inputmethod/latin/spellcheck/DictionaryPool.java b/java/src/com/android/inputmethod/latin/spellcheck/DictionaryPool.java
new file mode 100644
index 000000000..dfbfcc7f6
--- /dev/null
+++ b/java/src/com/android/inputmethod/latin/spellcheck/DictionaryPool.java
@@ -0,0 +1,55 @@
+/*
+ * Copyright (C) 2011 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License"); you may not
+ * use this file except in compliance with the License. You may obtain a copy of
+ * the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+ * License for the specific language governing permissions and limitations under
+ * the License.
+ */
+
+package com.android.inputmethod.latin.spellcheck;
+
+import android.content.Context;
+
+import java.util.Locale;
+import java.util.concurrent.LinkedBlockingQueue;
+
+/**
+ * A blocking queue that creates dictionaries up to a certain limit as necessary.
+ */
+public class DictionaryPool extends LinkedBlockingQueue<DictAndProximity> {
+ private final AndroidSpellCheckerService mService;
+ private final int mMaxSize;
+ private final Locale mLocale;
+ private int mSize = 0;
+
+ public DictionaryPool(final int maxSize, final AndroidSpellCheckerService service,
+ final Locale locale) {
+ super();
+ mMaxSize = maxSize;
+ mService = service;
+ mLocale = locale;
+ }
+
+ @Override
+ public DictAndProximity take() throws InterruptedException {
+ final DictAndProximity dict = poll();
+ if (null != dict) return dict;
+ synchronized(this) {
+ if (mSize >= mMaxSize) {
+ // Our pool is already full. Wait until some dictionary is ready.
+ return super.take();
+ } else {
+ ++mSize;
+ return mService.createDictAndProximity(mLocale);
+ }
+ }
+ }
+}