<commit_before>// Copyright 2017 by caixw, All rights reserved.
// Use of this source code is governed by a MIT
// license that can be found in the LICENSE file.

package tree

import (
	"bytes"
	"errors"
	"fmt"
	"net/http"
	"regexp"
	"regexp/syntax"
	"sort"
	"strings"
	"sync"

	"github.com/issue9/mux/internal/tree/handlers"
	ts "github.com/issue9/mux/internal/tree/syntax"
)

var nodesPool = &sync.Pool{
	New: func() interface{} {
		return make([]*Node, 0, 10)
	},
}

// Node 表示路由中的节点。
type Node struct {
	parent   *Node
	nodeType ts.Type
	children []*Node
	pattern  string
	handlers *handlers.Handlers

	// 用于表示当前节点是否为终点，仅对 nodeType 为 TypeRegexp 和 TypeNamed 有用。
	// 此值为 true，该节点的优先级会比同类型的节点低，以便优先对比其它非最终节点，
	// 且该节点之后不会有子节点。
	endpoint bool

	// 命名参数特有的参数
	name   string
	suffix string

	// 正则参数特有的参数
	expr       *regexp.Regexp
	syntaxExpr *syntax.Regexp
}

// 当前节点的优先级，根据节点类型来判断，
func (n *Node) priority() int {
	// 有 children 的，endpoit 必须为 false<commit_msg>修正文档错误<commit_after>// Copyright 2017 by caixw, All rights reserved.
// Use of this source code is governed by a MIT
// license that can be found in the LICENSE file.

package tree

import (
	"bytes"
	"errors"
	"fmt"
	"net/http"
	"regexp"
	"regexp/syntax"
	"sort"
	"strings"
	"sync"

	"github.com/issue9/mux/internal/tree/handlers"
	ts "github.com/issue9/mux/internal/tree/syntax"
)

var nodesPool = &sync.Pool{
	New: func() interface{} {
		return make([]*Node, 0, 10)
	},
}

// Node 表示路由中的节点。
type Node struct {
	parent   *Node
	nodeType ts.Type
	children []*Node
	pattern  string
	handlers *handlers.Handlers

	// 用于表示当前节点是否为终点，仅对 nodeType 为 TypeRegexp 和 TypeNamed 有用。
	// 此值为 true，该节点的优先级会比同类型的节点低，以便优先对比其它非最终节点，
	// 且该节点之后不会有子节点。
	endpoint bool

	// 命名参数特有的字段
	name   string
	suffix string

	// 正则参数特有的字段
	expr       *regexp.Regexp
	syntaxExpr *syntax.Regexp
}

// 当前节点的优先级，根据节点类型来判断，
func (n *Node) priority() int {
	// 有 children 的，endpoit 必须为 false
{'fraction_non_alphanumeric': 0.11997913406364111, 'fraction_numerical': 0.009389671361502348, 'mean_word_length': 3.5129411764705885, 'pattern_counts': {'":': 0, '<': 3, '<?xml version=': 0, '>': 3, 'https://': 0, 'lorem ipsum': 0, 'www.': 0, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 0, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'dir': 'git-commits-cleaned', 'id': '1510435', 'n_tokens_mistral': 912, 'n_tokens_neox': 941, 'n_words': 199}