PanGu.Dict.WordDictionary.InsertWord C# (CSharp) Method

InsertWord() public method

public InsertWord ( String word, double frequency, POS pos ) : void
word String
frequency double
pos POS
return void
        public void InsertWord(String word, double frequency, POS pos)
        {
            if (_WordDict == null)
            {
                return;
            }

            string key = word.ToLower();

            if (key.Length == 1)
            {
                if (_FirstCharDict.ContainsKey(key[0]))
                {
                    _FirstCharDict[key[0]].Pos = pos;
                    _FirstCharDict[key[0]].Frequency += frequency;
                    return;
                }
            }

            if (key.Length == 2)
            {
                uint doubleChar = ((uint)key[0] * 65536) + key[1];
                if (_DoubleCharDict.ContainsKey(doubleChar))
                {
                    _DoubleCharDict[doubleChar].Pos = pos;
                    _DoubleCharDict[doubleChar].Frequency += frequency;

                    return;
                }
            }

            if (_WordDict.ContainsKey(key))
            {
                _WordDict[key].Pos = pos;
                _WordDict[key].Frequency += frequency;
                return;
            }

            WordAttribute wa = new WordAttribute(word, pos, frequency);

            if (key.Length == 1)
            {
                if (!_FirstCharDict.ContainsKey(key[0]))
                {
                    _FirstCharDict.Add(key[0], wa);
                    return;
                }
            }

            if (key.Length == 2)
            {
                uint doubleChar = ((uint)key[0] * 65536) + key[1];
                if (!_DoubleCharDict.ContainsKey(doubleChar))
                {
                    _DoubleCharDict.Add(doubleChar, wa);
                    return;
                }
            }

            _WordDict.Add(key, wa);

            long tripleChar = ((long)key[0]) * 0x100000000 + (uint)(key[1] * 65536) + key[2];

            byte[] wordLenArray;
            if (!_TripleCharDict.TryGetValue(tripleChar, out wordLenArray))
            {
                wordLenArray = new byte[4];
                wordLenArray[0] = (byte)key.Length;

                _TripleCharDict.Add(tripleChar, wordLenArray);
            }
            else
            {
                bool find = false;
                int i;
                for (i = 0; i < wordLenArray.Length; i++)
                {
                    byte len = wordLenArray[i];
                    if (len == key.Length)
                    {
                        find = true;
                        break;
                    }

                    if (len == 0)
                    {
                        wordLenArray[i] = (byte)key.Length;
                        find = true;
                        break;
                    }
                }

                if (!find)
                {
                    byte[] temp = new byte[wordLenArray.Length * 2];

                    wordLenArray.CopyTo(temp, 0);
                    wordLenArray = temp;
                    wordLenArray[i] = (byte)key.Length;

                    _TripleCharDict[tripleChar] = wordLenArray;
                }
            }
        }