internal Word( StringPointerBuilder stringPointerBuilder, string hanzi, string traditional, string thumbPinyin, string thumbTranslation, string radicals, string link, MeaningListBuilder meaningBuilder, StringPointerBuilder tagBuilder, ulong pinyinMask) { WordStart = stringPointerBuilder.StringPointers.Count; stringPointerBuilder.Add(hanzi); stringPointerBuilder.Add(traditional); stringPointerBuilder.Add(thumbPinyin); stringPointerBuilder.Add(thumbTranslation); stringPointerBuilder.Add(radicals); stringPointerBuilder.Add(link); stringPointerBuilder.Append(meaningBuilder.Pinyins); stringPointerBuilder.Append(meaningBuilder.Translations); stringPointerBuilder.Append(tagBuilder); PinyinListLength = (byte)meaningBuilder.Pinyins.StringPointers.Count; TranslationListLength = (byte)meaningBuilder.Translations.StringPointers.Count; TagListLength = (byte)tagBuilder.StringPointers.Count; MeaningsMemory = new MeaningListMemory(meaningBuilder); PinyinMask = pinyinMask; }
protected virtual void SortDictionaryWords() { // sort WordDictionary._Words.Sort(); // repack everything... StringPointerBuilder stringBuilder = new StringPointerBuilder(); MeaningListBuilder meaningBuilder = new MeaningListBuilder(); StringPointerBuilder pinyinBuilder = new StringPointerBuilder(); StringPointerBuilder translationBuilder = new StringPointerBuilder(); StringPointerBuilder tagBuilder = new StringPointerBuilder(); List <Word> newWords = new List <Word>(); foreach (Word word in WordDictionary.Words) { foreach (Meaning meaning in word.Meanings) { foreach (StringPointer pinyin in meaning.Pinyins) { pinyinBuilder.Add(pinyin); } foreach (StringPointer translation in meaning.Translations) { translationBuilder.Add(translation); } meaningBuilder.Add(pinyinBuilder, translationBuilder); pinyinBuilder.Clear(); translationBuilder.Clear(); } foreach (StringPointer tag in word.Tags) { tagBuilder.Add(tag); } newWords.Add(new Word(stringBuilder, word.Hanzi, word.Traditional, word.ThumbPinyin, word.ThumbTranslation, word.Radicals, word.Link, meaningBuilder, tagBuilder, word.PinyinMask)); meaningBuilder.Clear(); tagBuilder.Clear(); } WordDictionary.SetDictionary( DictionaryName, newWords, stringBuilder.StringBuilder.ToString(), stringBuilder.StringPointers.ToArray(), meaningBuilder.MeaningMemory.ToArray()); }
internal MeaningListMemory(MeaningListBuilder builder) { MeaningStart = builder.MeaningStart; MeaningLength = (byte)(builder.MeaningMemory.Count - builder.MeaningStart); }