示例#1
0
func (this *preparedCache) get(name value.Value) *Prepared {
	if name.Type() != value.STRING || !name.Truth() {
		return nil
	}
	this.RLock()
	rv := this.prepareds[name.Actual().(string)]
	this.RUnlock()
	return rv
}
示例#2
0
func (this *Not) Apply(context Context, arg value.Value) (value.Value, error) {
	switch arg.Type() {
	case value.MISSING, value.NULL:
		return arg, nil
	default:
		if arg.Truth() {
			return value.FALSE_VALUE, nil
		} else {
			return value.TRUE_VALUE, nil
		}
	}
}
示例#3
0
func (this *preparedCache) get(name value.Value, track bool) *Prepared {
	if name.Type() != value.STRING || !name.Truth() {
		return nil
	}
	this.RLock()
	defer this.RUnlock()
	rv := this.prepareds[name.Actual().(string)]
	if rv != nil {
		if track {
			atomic.AddInt32(&rv.uses, 1)
			rv.lastUse = time.Now()
		}
		return rv.prepared
	}
	return nil
}