mirror of
				https://github.com/TeaOSLab/EdgeNode.git
				synced 2025-11-04 07:40:56 +08:00 
			
		
		
		
	
		
			
				
	
	
		
			39 lines
		
	
	
		
			799 B
		
	
	
	
		
			Go
		
	
	
	
	
	
			
		
		
	
	
			39 lines
		
	
	
		
			799 B
		
	
	
	
		
			Go
		
	
	
	
	
	
// Copyright 2024 GoEdge CDN goedge.cdn@gmail.com. All rights reserved. Official site: https://goedge.cn .
 | 
						|
 | 
						|
package kvstore
 | 
						|
 | 
						|
type CounterTable[T int64 | uint64] struct {
 | 
						|
	*Table[T]
 | 
						|
}
 | 
						|
 | 
						|
func NewCounterTable[T int64 | uint64](name string) (*CounterTable[T], error) {
 | 
						|
	table, err := NewTable[T](name, NewIntValueEncoder[T]())
 | 
						|
	if err != nil {
 | 
						|
		return nil, err
 | 
						|
	}
 | 
						|
 | 
						|
	return &CounterTable[T]{
 | 
						|
		Table: table,
 | 
						|
	}, nil
 | 
						|
}
 | 
						|
 | 
						|
func (this *CounterTable[T]) Increase(key string, delta T) (newValue T, err error) {
 | 
						|
	if this.isClosed {
 | 
						|
		err = NewTableClosedErr(this.name)
 | 
						|
		return
 | 
						|
	}
 | 
						|
 | 
						|
	err = this.Table.WriteTx(func(tx *Tx[T]) error {
 | 
						|
		value, getErr := tx.Get(key)
 | 
						|
		if getErr != nil {
 | 
						|
			if !IsNotFound(getErr) {
 | 
						|
				return getErr
 | 
						|
			}
 | 
						|
		}
 | 
						|
 | 
						|
		newValue = value + delta
 | 
						|
		return tx.Set(key, newValue)
 | 
						|
	})
 | 
						|
	return
 | 
						|
}
 |