Exemplo n.º 1
0
        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;
        }
Exemplo n.º 2
0
        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());
        }
Exemplo n.º 3
0
 internal MeaningListMemory(MeaningListBuilder builder)
 {
     MeaningStart  = builder.MeaningStart;
     MeaningLength = (byte)(builder.MeaningMemory.Count - builder.MeaningStart);
 }