public unsafe int CommonPrefixSearch(char *key, int len, DoubleArray.ResultPair *result, int rLen) { int maxByteCount = this.encoding.GetMaxByteCount(len); byte *ptr = stackalloc byte[(int)(uint)maxByteCount]; int bytes = this.encoding.GetBytes(key, len, ptr, maxByteCount); int num = this.da.CommonPrefixSearch(ptr, result, rLen, bytes, 0); for (int i = 0; i < num; i++) { result[i].Length = this.encoding.GetCharCount(ptr, result[i].Length); } return(num); }
public unsafe int CommonPrefixSearch(char *key, int len, DoubleArray.ResultPair *result, int rLen) { //エンコード int maxByteLen = this.encoding.GetMaxByteCount(len); byte *bytes = stackalloc byte[maxByteLen]; int bytesLen = this.encoding.GetBytes(key, len, bytes, maxByteLen); int n = this.da.CommonPrefixSearch(bytes, result, rLen, bytesLen); //文字数をデコードしたものに変換 for (int i = 0; i < n; i++) { result[i].Length = this.encoding.GetCharCount(bytes, result[i].Length); } return(n); }
public unsafe MeCabNode Lookup(char* begin, char* end) { MeCabNode meCabNode = null; if (end - begin > 65535) { end = begin + 65535; } CharInfo charInfo = default(CharInfo); int num = default(int); char* ptr = this.property.SeekToOtherType(begin, end, this.space, &charInfo, &num); DoubleArray.ResultPair* ptr2 = stackalloc DoubleArray.ResultPair[512]; MeCabDictionary[] array = this.dic; foreach (MeCabDictionary meCabDictionary in array) { int num2 = meCabDictionary.CommonPrefixSearch(ptr, (int)(end - ptr), ptr2, 512); for (int j = 0; j < num2; j++) { Token[] token = meCabDictionary.GetToken(ptr2[j]); for (int k = 0; k < token.Length; k++) { MeCabNode newNode = this.GetNewNode(); this.ReadNodeInfo(meCabDictionary, token[k], newNode); newNode.Length = ptr2[j].Length; newNode.RLength = (int)(ptr - begin) + ptr2[j].Length; newNode.Surface = new string(ptr, 0, ptr2[j].Length); newNode.Stat = MeCabNodeStat.Nor; newNode.CharType = charInfo.DefaultType; newNode.BNext = meCabNode; meCabNode = newNode; } } } if (meCabNode != null && !charInfo.Invoke) { return meCabNode; } char* ptr3 = ptr + 1; char* ptr4 = null; if (ptr3 > end) { this.AddUnknown(ref meCabNode, charInfo, begin, ptr, ptr3); return meCabNode; } if (charInfo.Group) { char* ptr5 = ptr3; CharInfo charInfo2 = default(CharInfo); ptr3 = this.property.SeekToOtherType(ptr3, end, charInfo, &charInfo2, &num); if (num <= this.maxGroupingSize) { this.AddUnknown(ref meCabNode, charInfo, begin, ptr, ptr3); } ptr4 = ptr3; ptr3 = ptr5; } for (int l = 1; l <= charInfo.Length; l++) { if (ptr3 > end) { break; } if (ptr3 != ptr4) { num = l; this.AddUnknown(ref meCabNode, charInfo, begin, ptr, ptr3); if (!charInfo.IsKindOf(this.property.GetCharInfo(*ptr3))) { break; } ptr3++; } } if (meCabNode == null) { this.AddUnknown(ref meCabNode, charInfo, begin, ptr, ptr3); } return meCabNode; }
public unsafe MeCabNode Lookup(char *begin, char *end) { CharInfo cInfo; MeCabNode resultNode = null; int cLen; if (end - begin > ushort.MaxValue) { end = begin + ushort.MaxValue; } char *begin2 = property.SeekToOtherType(begin, end, this.space, &cInfo, &cLen); DoubleArray.ResultPair *daResults = stackalloc DoubleArray.ResultPair[DAResultSize]; foreach (MeCabDictionary it in this.dic) { int n = it.CommonPrefixSearch(begin2, (int)(end - begin2), daResults, DAResultSize); for (int i = 0; i < n; i++) { Token[] token = it.GetToken(daResults[i]); for (int j = 0; j < token.Length; j++) { MeCabNode newNode = this.GetNewNode(); this.ReadNodeInfo(it, token[j], newNode); //newNode.Token = token[j]; newNode.Length = daResults[i].Length; newNode.RLength = (int)(begin2 - begin) + daResults[i].Length; newNode.Surface = new string(begin2, 0, daResults[i].Length); newNode.Stat = MeCabNodeStat.Nor; newNode.CharType = cInfo.DefaultType; newNode.BNext = resultNode; resultNode = newNode; } } } if (resultNode != null && !cInfo.Invoke) { return(resultNode); } char *begin3 = begin2 + 1; char *groupBegin3 = null; if (begin3 > end) { this.AddUnknown(ref resultNode, cInfo, begin, begin2, begin3); return(resultNode); } if (cInfo.Group) { char * tmp = begin3; CharInfo fail; begin3 = this.property.SeekToOtherType(begin3, end, cInfo, &fail, &cLen); if (cLen <= maxGroupingSize) { this.AddUnknown(ref resultNode, cInfo, begin, begin2, begin3); } groupBegin3 = begin3; begin3 = tmp; } for (int i = 1; i <= cInfo.Length; i++) { if (begin3 > end) { break; } if (begin3 == groupBegin3) { continue; } cLen = i; this.AddUnknown(ref resultNode, cInfo, begin, begin2, begin3); if (!cInfo.IsKindOf(this.property.GetCharInfo(*begin3))) { break; } begin3 += 1; } if (resultNode == null) { this.AddUnknown(ref resultNode, cInfo, begin, begin2, begin3); } return(resultNode); }
public unsafe int CommonPrefixSearch(byte *key, int len, DoubleArray.ResultPair *result, int rLen) { return(this.da.CommonPrefixSearch(key, result, rLen, len)); }