/** * @param ngramOrder * @param offset */ private void addNewSrcPhrase(final int ngramOrder, final long offset) { growValueIndexArrayIfNecessary(ngramOrder); if (ngramOrder >= targetTranslations.length) { targetTranslations = Arrays.copyOf(targetTranslations, targetTranslations.length * 3 / 2); } if (targetTranslations[ngramOrder] == null) { targetTranslations[ngramOrder] = new ArrayList<CustomWidthArray>(); } final ArrayList<CustomWidthArray> targetTranslationPointersHere = targetTranslations[ngramOrder]; final long currVal = offset >= valueIndexes[ngramOrder].size() ? 0 : valueIndexes[ngramOrder].get((int) (offset)); if (currVal == 0) valueIndexes[ngramOrder].setAndGrowIfNeeded((int) (offset), (-targetTranslations[ngramOrder].size() - 1)); targetTranslationPointersHere.add(new CustomWidthArray(3, Integer.SIZE + Byte.SIZE)); }
/** * @param ngramOrder * @param offset * @param val */ private void addFeaturesForWholePhrase(final int ngramOrder, final long offset, final PhraseTableValues val) { growValueIndexArrayIfNecessary(ngramOrder); if (ngramOrder >= features.length) { features = Arrays.copyOf(features, Math.max(ngramOrder + 1, features.length * 3 / 2)); } if (features[ngramOrder] == null) features[ngramOrder] = LongArray.StaticMethods.newLongArray(Integer.MAX_VALUE, Integer.MAX_VALUE); valueIndexes[ngramOrder].setAndGrowIfNeeded((int) (offset), features[ngramOrder].size()); for (int f = 0; f < numFeatures; ++f) features[ngramOrder].add(Float.floatToIntBits(((FeaturePhraseTableValues) val).features[f])); }
/** * @param ngramOrder * @param offset */ private void addNewSrcPhrase(int ngramOrder, long offset) { growValueIndexArrayIfNecessary(ngramOrder); if (ngramOrder >= targetTranslations.length) { targetTranslations = Arrays.copyOf(targetTranslations, targetTranslations.length * 3 / 2); } if (targetTranslations[ngramOrder] == null) { targetTranslations[ngramOrder] = new ArrayList<LongArray>(); } final ArrayList<LongArray> targetTranslationPointersHere = targetTranslations[ngramOrder]; long currVal = offset >= valueIndexes[ngramOrder].size() ? 0 : valueIndexes[ngramOrder].get((int) (offset)); if (currVal == 0) valueIndexes[ngramOrder].setAndGrowIfNeeded((int) (offset), (-targetTranslations[ngramOrder].size() - 1)); targetTranslationPointersHere.add(new CustomWidthArray(3, Integer.SIZE + Byte.SIZE)); }
/** * @param ngramOrder * @param offset * @param val */ private void addFeaturesForWholePhrase(int ngramOrder, long offset, PhraseTableValues val) { growValueIndexArrayIfNecessary(ngramOrder); if (ngramOrder >= features.length) { features = Arrays.copyOf(features, Math.max(ngramOrder + 1, features.length * 3 / 2)); } if (features[ngramOrder] == null) features[ngramOrder] = LongArray.StaticMethods.newLongArray(Integer.MAX_VALUE, Integer.MAX_VALUE); valueIndexes[ngramOrder].setAndGrowIfNeeded((int) (offset), features[ngramOrder].size()); for (int f = 0; f < numFeatures; ++f) features[ngramOrder].add(Float.floatToIntBits(((FeaturePhraseTableValues) val).features[f])); }
@Override public void add(int[] ngram, int startPos, int endPos, int ngramOrder, long offset, long contextOffset, int word, PhraseTableValues val, long suffixOffset, boolean ngramIsNew) { assert !map.isReversed(); final boolean isSourceSidePhrase = !containsSeparator(ngram, startPos, endPos); if (isSourceSidePhrase) { addNewSrcPhrase(ngramOrder, offset); } else if (val instanceof FeaturePhraseTableValues && ((FeaturePhraseTableValues) val).features != null) { addFeaturesForWholePhrase(ngramOrder, offset, val); addPointerToTargetSidePhrase(ngramOrder, offset, contextOffset, word); } else if (ngramIsNew) { assert val instanceof TargetTranslationsValues || ((FeaturePhraseTableValues) val).features == null; growValueIndexArrayIfNecessary(ngramOrder); valueIndexes[ngramOrder].setAndGrowIfNeeded((int) (offset), EMPTY_VALUE_INDEX); } }
@Override public boolean add(final int[] ngram, final int startPos, final int endPos, final int ngramOrder, final long offset, final long contextOffset, final int word, final PhraseTableValues val, final long suffixOffset, final boolean ngramIsNew) { assert !map.isReversed(); final boolean isSourceSidePhrase = !containsSeparator(ngram, startPos, endPos); if (isSourceSidePhrase) { addNewSrcPhrase(ngramOrder, offset); } else if (val instanceof FeaturePhraseTableValues && ((FeaturePhraseTableValues) val).features != null) { addFeaturesForWholePhrase(ngramOrder, offset, val); addPointerToTargetSidePhrase(ngramOrder, offset, contextOffset, word); } else if (ngramIsNew) { assert val instanceof TargetTranslationsValues || ((FeaturePhraseTableValues) val).features == null; growValueIndexArrayIfNecessary(ngramOrder); valueIndexes[ngramOrder].setAndGrowIfNeeded((int) (offset), EMPTY_VALUE_INDEX); } return true; }