本文整理汇总了Golang中container/list.Element类的典型用法代码示例。如果您正苦于以下问题:Golang Element类的具体用法?Golang Element怎么用?Golang Element使用的例子?那么恭喜您, 这里精选的类代码示例或许可以为您提供帮助。
在下文中一共展示了Element类的20个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于我们的系统推荐出更棒的Golang代码示例。
示例1: peekToken
// peekToken performs lookahead of the given count on the token stream.
func (l *peekableLexer) peekToken(count int) lexeme {
if count < 1 {
panic(fmt.Sprintf("Expected count > 1, received: %v", count))
}
// Ensure that the readTokens has at least the requested number of tokens.
if l.readTokens.Len() < count {
for {
l.readTokens.PushBack(l.lex.nextToken())
if l.readTokens.Len() == count {
break
}
}
}
// Retrieve the count-th token from the list.
var element *list.Element
element = l.readTokens.Front()
for i := 1; i < count; i++ {
element = element.Next()
}
return element.Value.(lexeme)
}
开发者ID:Serulian,项目名称:compiler,代码行数:27,代码来源:peekable_lex.go
示例2: listen
// listen is run in a goroutine. It reads new pull lists from its
// input queue until the queue is closed.
// listen takes ownership of the list that is passed to it.
//
// Note that the routine does not ever need to access the list
// itself once the current_item has been initialized, so we do
// not bother to keep a pointer to the list. Because it is a
// doubly linked list, holding on to the current item will keep
// it from garbage collection.
//
func (b *WorkQueue) listen() {
var current_item *list.Element
// When we're done, close the output channel to shut down any
// workers.
defer close(b.NextItem)
for {
// If the current list is empty, wait for a new list before
// even checking if workers are ready.
if current_item == nil {
if p, ok := <-b.newlist; ok {
current_item = p.Front()
} else {
// The channel was closed; shut down.
return
}
}
select {
case p, ok := <-b.newlist:
if ok {
current_item = p.Front()
} else {
// The input channel is closed; time to shut down
return
}
case b.NextItem <- current_item.Value:
current_item = current_item.Next()
}
}
}
开发者ID:WangZhenfei,项目名称:arvados,代码行数:41,代码来源:work_queue.go
示例3: SetAsync
// SetAsync 设置是否异步输出,仅当之前为非异步并且设置为异步时,logList和mu有效
func (this *SimpleLogWriter) SetAsync(async bool, logList *list.List, mu *sync.Mutex) {
if !this.async && async {
if logList == nil || mu == nil {
panic(ErrorLogWriterInvalidParam)
}
this.logList = logList
this.logmu = mu
go func() {
var counter = atomic.AddInt32(&this.counter, 1)
for this.async && counter == this.counter && !this.closed {
if this.logList.Len() > 0 {
var start *list.Element
var length = 0
this.logmu.Lock()
if this.logList.Len() > 0 {
start = this.logList.Front()
length = this.logList.Len()
this.logList.Init()
}
this.logmu.Unlock()
for i := 0; i < length; i++ {
var v, ok = start.Value.(string)
if ok {
this.writer.Write(v)
}
start = start.Next()
}
} else {
time.Sleep(50 * time.Millisecond)
}
}
}()
}
this.async = async
}
开发者ID:kdada,项目名称:tinygo,代码行数:36,代码来源:writer.go
示例4: TimeEvict
// this time eviction is called by a scheduler for background, periodic evictions
func TimeEvict(lru *LRUCache, now time.Time, ttl time.Duration) {
lru.mu.Lock()
defer lru.mu.Unlock()
if lru.list.Len() < 1 {
return
}
var n *entry
var el *list.Element
hasEvictCallback := lru.EvictCallback != nil
el = lru.list.Back()
for {
if el == nil {
break
}
n = el.Value.(*entry)
if now.Sub(n.time_accessed) > ttl {
// the Difference is greater than max TTL so we need to evict this entry
// first grab the next entry (as this is about to dissappear)
el = el.Prev()
lru.remove(n.key)
if hasEvictCallback {
lru.EvictCallback(n.key, n.value)
}
} else {
// since they are stored in time order, as soon as we find
// first item newer than ttl window, we are safe to bail
break
}
}
lru.last_ttl_check = time.Now()
}
开发者ID:zj8487,项目名称:lruttl,代码行数:36,代码来源:lru_cache.go
示例5: AsyncWrite
// AsyncWrite 异步写入日志
func (this *ConsoleLogWriter) AsyncWrite(logList *list.List, mu *sync.Mutex) {
this.logList = logList
this.logmu = mu
go func() {
for !this.closed {
if this.logList.Len() > 0 {
var start *list.Element
var length = 0
this.logmu.Lock()
start = this.logList.Front()
length = this.logList.Len()
this.logList.Init()
this.logmu.Unlock()
for i := 0; i < length; i++ {
var v, ok = start.Value.(string)
if ok {
this.Write(v)
}
start = start.Next()
}
} else {
//暂停15毫秒
time.Sleep(15 * time.Millisecond)
//runtime.Gosched()
}
}
}()
}
开发者ID:kdada,项目名称:tinylogger,代码行数:29,代码来源:console.go
示例6: cleaner
func (c *Cache) cleaner(limit int) {
for _ = range c.clean {
var item *list.Element
for {
c.lock.Lock() // X1+
if len(c.m) < limit {
c.lock.Unlock() // X1-
break
}
if item == nil {
item = c.lru.Front()
}
if p := item.Value.(*cachepage); !p.dirty {
delete(c.m, p.pi)
c.lru.Remove(item)
c.Purge++
}
item = item.Next()
c.lock.Unlock() // X1-
}
atomic.AddInt32(&c.cleaning, -1)
}
c.close <- true
}
开发者ID:matomesc,项目名称:rkt,代码行数:25,代码来源:cache.go
示例7: listXmpl
func listXmpl() {
fmt.Println("Teste Liste")
myList := list.New()
// einige Elemente einfügen
myList.PushFront(element2{"a", 1})
myList.PushFront(element2{"b", 2})
myList.PushFront(element2{"c", 3})
myList.PushFront(element2{"d", 4})
myList.PushFront(element2{"e", 5})
myList.PushFront(element2{"f", 6})
for e := myList.Front(); e != nil; e = e.Next() {
fmt.Println(e.Value)
}
// Ein Element umsortieren
fmt.Println("Gehe zum zweiten Element")
// erstmal den Anfang holen
var e *list.Element = myList.Front()
// einen Schritt weiter, zum e gehen
e = e.Next()
// Ausgeben zum Test
fmt.Println("aktuell:", e.Value)
fmt.Println("Verschiebe Element ans Listenende")
// und e/5 ans Ende verbannen
myList.MoveToBack(e)
// nochmal mittels Iterator Elemente auslesen
for e := myList.Front(); e != nil; e = e.Next() {
fmt.Println(e.Value)
}
}
开发者ID:SnertSnert,项目名称:turbulentflyer,代码行数:33,代码来源:05_09_liste.go
示例8: Next
// Returns the item after e or nil it is the last item or nil.
// The item is a *list.Element from the 'container/list' package.
// Even though it is possible to call e.Next() directly, don't. This behavior
// may not be supported moving forward.
func (q Queue) Next(e *list.Element) *list.Element {
if e == nil {
return e
}
return e.Next()
}
开发者ID:jasocox,项目名称:figo,代码行数:11,代码来源:figo.go
示例9: TestInsertBefore
func TestInsertBefore(t *testing.T) {
var e *list.Element
l := list.New()
for i := 0; i < 5; i++ {
if i == 3 {
e = l.PushFront(i)
} else {
l.PushFront(i)
}
}
l.InsertBefore(5, e)
if l.Len() != 6 {
t.Errorf("length = %d", l.Len())
}
e = l.Front()
for i := 0; i < 6; i++ {
t.Logf("e = %d", e.Value)
e = e.Next()
}
}
开发者ID:qt-luigi,项目名称:golangcafe,代码行数:25,代码来源:listsample_test.go
示例10: Update
// C & U
func (node Node) Update(cmp *RemoteNode) {
bucketID := node.ID.DistanceTo(cmp.ID).GetBucketID()
bucket := node.RoutingTable[bucketID]
var found bool = false
var foundElement *list.Element
for elem := bucket.Front(); elem != nil; elem = elem.Next() {
e, ok := elem.Value.(*RemoteNode)
if !ok {
continue // if it's not a NodeID, wtf is it doing in the list?? Probably should error out
}
if e.ID.EqualsTo(cmp.ID) || e.ID.EqualsTo(node.ID) {
found = true
foundElement = elem
break
}
}
if !found {
if bucket.Len() <= BUCKET_SIZE {
bucket.PushFront(cmp)
}
} else {
foundElement.Value = cmp // update the foundElement value
bucket.MoveToFront(foundElement)
}
}
开发者ID:sameer2800,项目名称:nanjingtaxi,代码行数:28,代码来源:node.go
示例11: incrElement
func (s *Summary) incrElement(el *list.Element) {
counter := el.Value.(*Counter)
counter.count++
// This element already has the largest count so it won't get moved.
if s.list.Front() == el {
return
}
// Starting at the previous element, move this element behind the first
// element we find which has a higher count.
moved := false
for currEl := el.Prev(); currEl != nil; currEl = currEl.Prev() {
if currEl.Value.(*Counter).count > counter.count {
s.list.MoveAfter(el, currEl)
moved = true
break
}
}
// If we didn't find an element with a higher count then this element must
// have the highest count. Move it to the front.
if !moved {
s.list.MoveToFront(el)
}
}
开发者ID:jmptrader,项目名称:stream-1,代码行数:26,代码来源:stream.go
示例12: Manage_magnet
/* Create tree ball list with id random. If Ball is already taked, a first ball next is taked */
func (Data *Data) Manage_magnet(requete *list.Element, Tab_wd *owm.All_data) {
rqt := requete.Value.(*protocol.Request)
var tab [3]int64
list_tmp := list.New()
var ifball Posball
user := Data.User.Value.(*users.User)
var answer []byte
var eball *list.Element
if user.MagnetisValid() == true {
if Data.Lst_ball.Id_max > 0 {
for i := 0; i < 3; i++ {
tab[i] = rand.Int63n(Data.Lst_ball.Id_max)
}
list_tmp_2 := Data.Lst_ball.Get_ballbyid_tomagnet(tab, Data.User)
eball = list_tmp_2.Front()
}
for eball != nil {
ball := eball.Value.(*list.Element).Value.(*ballon.Ball)
ifball.id = ball.Id_ball
ifball.title = ball.Title
ifball.FlagPoss = 0
ifball.lon = ball.Coord.Value.(ballon.Checkpoint).Coord.Lon
ifball.lat = ball.Coord.Value.(ballon.Checkpoint).Coord.Lat
ifball.wins = ball.Wind.Speed
ifball.wind = ball.Wind.Degress
list_tmp.PushBack(ifball)
eball = eball.Next()
}
answer = Write_nearby(requete, list_tmp, MAGNET, user)
} else {
answer = Data.Manage_ack(rqt.Rtype, 0, 0)
}
Data.Lst_asw.PushBack(answer)
}
开发者ID:42MrPiou42,项目名称:Wibo_OpenProject,代码行数:36,代码来源:answer.go
示例13: findRefKClosestTo
func findRefKClosestTo(kadems []*Kademlia, portrange int, searchID ID, KConst int) *list.List {
var retList *list.List = list.New()
for i := 0; i < len(kadems); i++ {
var newNodeID ID
var newNodeIDDist int
newNodeID = CopyID(kadems[i].ContactInfo.NodeID)
newNodeIDDist = newNodeID.Distance(searchID)
var e *list.Element = retList.Front()
for ; e != nil; e = e.Next() {
var dist int
dist = e.Value.(ID).Distance(searchID)
//if responseNode is closer than node in ShortList, add it
if newNodeIDDist < dist {
retList.InsertBefore(newNodeID, e)
//node inserted! getout
break
}
}
if e == nil {
//node is farthest yet
retList.PushBack(newNodeID)
}
}
return retList
}
开发者ID:johhud1,项目名称:KademliaMixNetwork,代码行数:25,代码来源:dbg.go
示例14: compareClosestContacts
func compareClosestContacts(fn []FoundNode, kadems []*Kademlia, portrange int, searchID ID) {
var closestList *list.List = findRefKClosestTo(kadems, portrange, searchID, KConst)
/*
var pE *list.Element = closestList.Front()
for ; pE != nil; pE = pE.Next(){
log.Printf("Sorted? %s %d\n", pE.Value.(ID).AsString(), pE.Value.(ID).Distance(searchID))
}*/
var e *list.Element = closestList.Front()
var overlap int = 0
//log.Printf("searching for:%s\n", searchID.AsString())
//log.Printf("reference List: \t\t\t\t\t iterativeFound List:\n")
for i := 0; i < len(fn); i++ {
var id ID = e.Value.(ID)
//log.Printf("[%d]:%s %d\t%s %d", i, id.AsString(), id.Distance(searchID), fn[i].NodeID.AsString(), fn[i].NodeID.Distance(searchID))
if id.Equals(fn[i].NodeID) {
overlap++
} else {
for k := closestList.Front(); k != nil; k = k.Next() {
if k.Value.(ID).Equals(fn[i].NodeID) {
overlap++
}
}
}
e = e.Next()
}
if overlap < 5 {
log.Printf("overlap of %d. Out of %d total nodes\n", overlap, portrange)
panic(1)
}
//return retContacts
}
开发者ID:johhud1,项目名称:KademliaMixNetwork,代码行数:31,代码来源:dbg.go
示例15: defSetup
func defSetup(e *list.Element, s *env.Scope) (*parse.Atom, error) {
name := e.Next().Value.(*parse.Atom).Value.(string)
val, err := eval(e.Next().Next().Value, s)
if err != nil {
return nil, err
}
return Def(name, val, s), nil
}
开发者ID:nanderson94,项目名称:gosp,代码行数:8,代码来源:builtins.go
示例16: requeue
func (c *Client) requeue(cursor *list.Element) {
// If `cursor` is not nil, this means there are notifications that
// need to be delivered (or redelivered)
for ; cursor != nil; cursor = cursor.Next() {
if n, ok := cursor.Value.(Notification); ok {
go func() { c.notifs <- n }()
}
}
}
开发者ID:luzhixuluke,项目名称:apns,代码行数:9,代码来源:client.go
示例17: ifSetup
func ifSetup(e *list.Element, s *env.Scope) (*parse.Atom, error) {
test, err := eval(e.Next().Value, s)
if err != nil {
return nil, err
}
thenStmt := e.Next().Next().Value
elseStmt := e.Next().Next().Next().Value
return If(test, thenStmt, elseStmt, s)
}
开发者ID:nanderson94,项目名称:gosp,代码行数:9,代码来源:builtins.go
示例18: Remove
// Removes as space map element from a space map cell and removes it,
// or return nil if not found
func (cell *SpaceMapCell) Remove(el SpaceMapElement) SpaceMapElement {
var e *list.Element
for e = cell.Shapes.Front(); e != nil; e = e.Next() {
val := e.Value
if val.(SpaceMapElement) == el {
cell.Shapes.Remove(e)
return el
}
}
return nil
}
开发者ID:beoran,项目名称:algo,代码行数:13,代码来源:spacemap.go
示例19: ListTruncate
// ListTruncate() removes elements from `e' to the last element in list `l'.
// The range to be removed is [e, l.Back()]. It returns list `l'.
func ListTruncate(l *list.List, e *list.Element) *list.List {
AssertNotEqual(nil, l)
AssertNotEqual(nil, e)
// remove `e' and all elements after `e'
var next *list.Element
for ; e != nil; e = next {
next = e.Next()
l.Remove(e)
}
return l
}
开发者ID:hhkbp2,项目名称:go-hsm,代码行数:13,代码来源:util.go
示例20: flush
// Finalize and free the cached prepared statements
// To be called in Conn#Close
func (c *cache) flush() {
if c.maxSize <= 0 {
return
}
c.m.Lock()
defer c.m.Unlock()
var e, next *list.Element
for e = c.l.Front(); e != nil; e = next {
next = e.Next()
c.l.Remove(e).(*Stmt).finalize()
}
}
开发者ID:npowern,项目名称:gosqlite,代码行数:14,代码来源:cache.go
注:本文中的container/list.Element类示例整理自Github/MSDocs等源码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。 |
请发表评论