internal int GetTopToken(int[] context) { var result = -1; var contextLimit = context.Length; var contextStart = Math.Max(0, contextLimit - _width + 1); var scanStart = contextStart; TokenPredictorDatabase leafDatabase = null; for (; leafDatabase == null && scanStart < contextLimit; scanStart++) { leafDatabase = _database.GetChild(context, scanStart, contextLimit - scanStart); } if (leafDatabase != null) { var tokens = leafDatabase.GetTopRanked(); for (; 1 < tokens.Count && scanStart < contextLimit; scanStart++) { leafDatabase = _database.GetChild(context, scanStart, contextLimit - scanStart); Debug.Assert(leafDatabase != null); tokens = leafDatabase.GetTopRanked(tokens); } Debug.Assert(result == -1); foreach (var token in tokens) { if (result < token) { result = token; } } } return(result); }
internal TokenPredictorDatabase GetChild(int[] context, int index, int length) { TokenPredictorDatabase database; if (_children != null) { database = _children.GetChild(context, index, length); } else { database = null; } return(database); }