Merge "32-bit dicttool"
diff --git a/java/src/com/android/inputmethod/latin/WordComposer.java b/java/src/com/android/inputmethod/latin/WordComposer.java
index 87cf644..5d21554 100644
--- a/java/src/com/android/inputmethod/latin/WordComposer.java
+++ b/java/src/com/android/inputmethod/latin/WordComposer.java
@@ -169,26 +169,7 @@
      * coordinates.
      */
     public void add(final Event event) {
-        final int primaryCode = event.mCodePoint;
-        final int keyX = event.mX;
-        final int keyY = event.mY;
-        final int newIndex = size();
         processEvent(event);
-        if (newIndex < MAX_WORD_LENGTH) {
-            mPrimaryKeyCodes[newIndex] = primaryCode >= Constants.CODE_SPACE
-                    ? Character.toLowerCase(primaryCode) : primaryCode;
-            // In the batch input mode, the {@code mInputPointers} holds batch input points and
-            // shouldn't be overridden by the "typed key" coordinates
-            // (See {@link #setBatchInputWord}).
-            if (!mIsBatchMode) {
-                // TODO: Set correct pointer id and time
-                mInputPointers.addPointerAt(newIndex, keyX, keyY, 0, 0);
-            }
-        }
-        mIsFirstCharCapitalized = isFirstCharCapitalized(
-                newIndex, primaryCode, mIsFirstCharCapitalized);
-        if (Character.isUpperCase(primaryCode)) mCapsCount++;
-        if (Character.isDigit(primaryCode)) mDigitsCount++;
     }
 
     private void processEvent(final Event event) {
@@ -223,6 +204,19 @@
             } else {
                 mTrailingSingleQuotesCount = 0;
             }
+            if (newIndex < MAX_WORD_LENGTH) {
+                // In the batch input mode, the {@code mInputPointers} holds batch input points and
+                // shouldn't be overridden by the "typed key" coordinates
+                // (See {@link #setBatchInputWord}).
+                if (!mIsBatchMode) {
+                    // TODO: Set correct pointer id and time
+                    mInputPointers.addPointerAt(newIndex, keyX, keyY, 0, 0);
+                }
+            }
+            mIsFirstCharCapitalized = isFirstCharCapitalized(
+                    newIndex, primaryCode, mIsFirstCharCapitalized);
+            if (Character.isUpperCase(primaryCode)) mCapsCount++;
+            if (Character.isDigit(primaryCode)) mDigitsCount++;
         }
         mAutoCorrection = null;
     }
diff --git a/native/jni/src/suggest/core/layout/normal_distribution.h b/native/jni/src/suggest/core/layout/normal_distribution.h
new file mode 100644
index 0000000..5f21a59
--- /dev/null
+++ b/native/jni/src/suggest/core/layout/normal_distribution.h
@@ -0,0 +1,49 @@
+/*
+ * Copyright (C) 2014 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.
+ */
+
+#ifndef LATINIME_NORMAL_DISTRIBUTION_H
+#define LATINIME_NORMAL_DISTRIBUTION_H
+
+#include <cmath>
+
+#include "defines.h"
+
+namespace latinime {
+
+// Normal distribution N(u, sigma^2).
+class NormalDistribution {
+ public:
+    NormalDistribution(const float u, const float sigma)
+            : mU(u),
+              mPreComputedNonExpPart(1.0f / sqrtf(2.0f * M_PI_F
+                      * GeometryUtils::SQUARE_FLOAT(sigma))),
+              mPreComputedExponentPart(-1.0f / (2.0f * GeometryUtils::SQUARE_FLOAT(sigma))) {}
+
+    float getProbabilityDensity(const float x) const {
+        const float shiftedX = x - mU;
+        return mPreComputedNonExpPart
+                * expf(mPreComputedExponentPart * GeometryUtils::SQUARE_FLOAT(shiftedX));
+    }
+
+ private:
+    DISALLOW_IMPLICIT_CONSTRUCTORS(NormalDistribution);
+
+    const float mU; // mean value
+    const float mPreComputedNonExpPart; // = 1 / sqrt(2 * PI * sigma^2)
+    const float mPreComputedExponentPart; // = -1 / (2 * sigma^2)
+};
+} // namespace latinime
+#endif // LATINIME_NORMAL_DISTRIBUTION_H
diff --git a/native/jni/src/suggest/core/layout/proximity_info_state_utils.cpp b/native/jni/src/suggest/core/layout/proximity_info_state_utils.cpp
index 867f598..5a3ff73 100644
--- a/native/jni/src/suggest/core/layout/proximity_info_state_utils.cpp
+++ b/native/jni/src/suggest/core/layout/proximity_info_state_utils.cpp
@@ -24,6 +24,7 @@
 
 #include "defines.h"
 #include "suggest/core/layout/geometry_utils.h"
+#include "suggest/core/layout/normal_distribution.h"
 #include "suggest/core/layout/proximity_info.h"
 #include "suggest/core/layout/proximity_info_params.h"
 
@@ -717,8 +718,8 @@
         const float sigma = speedxAngleRate + speedxNearestKeyDistanceRate
                 + ProximityInfoParams::MIN_STANDARD_DEVIATION;
 
-        ProximityInfoUtils::NormalDistribution
-                distribution(ProximityInfoParams::CENTER_VALUE_OF_NORMALIZED_DISTRIBUTION, sigma);
+        NormalDistribution distribution(
+                ProximityInfoParams::CENTER_VALUE_OF_NORMALIZED_DISTRIBUTION, sigma);
         // Summing up probability densities of all near keys.
         float sumOfProbabilityDensities = 0.0f;
         for (int j = 0; j < keyCount; ++j) {
diff --git a/native/jni/src/suggest/core/layout/proximity_info_utils.h b/native/jni/src/suggest/core/layout/proximity_info_utils.h
index 310bbdb..c273ef4 100644
--- a/native/jni/src/suggest/core/layout/proximity_info_utils.h
+++ b/native/jni/src/suggest/core/layout/proximity_info_utils.h
@@ -125,28 +125,6 @@
          return type == MATCH_CHAR || type == PROXIMITY_CHAR || type == ADDITIONAL_PROXIMITY_CHAR;
      }
 
-    // Normal distribution N(u, sigma^2).
-    struct NormalDistribution {
-     public:
-        NormalDistribution(const float u, const float sigma)
-                : mU(u),
-                  mPreComputedNonExpPart(1.0f / sqrtf(2.0f * M_PI_F
-                          * GeometryUtils::SQUARE_FLOAT(sigma))),
-                  mPreComputedExponentPart(-1.0f / (2.0f * GeometryUtils::SQUARE_FLOAT(sigma))) {}
-
-        float getProbabilityDensity(const float x) const {
-            const float shiftedX = x - mU;
-            return mPreComputedNonExpPart
-                    * expf(mPreComputedExponentPart * GeometryUtils::SQUARE_FLOAT(shiftedX));
-        }
-
-     private:
-        DISALLOW_IMPLICIT_CONSTRUCTORS(NormalDistribution);
-        const float mU; // mean value
-        const float mPreComputedNonExpPart; // = 1 / sqrt(2 * PI * sigma^2)
-        const float mPreComputedExponentPart; // = -1 / (2 * sigma^2)
-    }; // struct NormalDistribution
-
  private:
     DISALLOW_IMPLICIT_CONSTRUCTORS(ProximityInfoUtils);