From c1d32ecdb36d7365a660ae2cf1405e1ca1898b4b Mon Sep 17 00:00:00 2001 From: zhangzengfei <zhangzengfei@smartai.com> Date: 星期日, 20 十月 2024 22:21:02 +0800 Subject: [PATCH] 优化楼层查找 --- nvcs/cache.go | 70 ++++++++++++++++++----------------- 1 files changed, 36 insertions(+), 34 deletions(-) diff --git a/nvcs/cache.go b/nvcs/cache.go index 1915fd3..eb89865 100644 --- a/nvcs/cache.go +++ b/nvcs/cache.go @@ -112,66 +112,68 @@ } func (c *simpleCache) getPositionByTime(timestamp int64) (runData ElevatorRunData) { - node := c.data.Back() + node := c.data.Back() // 浠庨摼琛ㄥ熬閮ㄥ紑濮� if node == nil { return } - for { - if node.Prev() == nil { - break - } - - if node.Prev().Value.(ElevatorRunData).Timestamp >= timestamp { - node = node.Prev() + for node != nil { + if data, ok := node.Value.(ElevatorRunData); ok { + if data.Timestamp >= timestamp { + runData = data + node = node.Prev() // 鍚戝墠绉诲姩鑺傜偣 + } else { + break + } } else { break } - } - - if node.Value.(ElevatorRunData).Timestamp >= timestamp { - runData = node.Value.(ElevatorRunData) } return } func (c *simpleCache) getMovePosition(timestamp int64, floor string) (runData ElevatorRunData) { - node := c.data.Back() + node := c.data.Back() // 浠庨摼琛ㄦ湯灏惧紑濮� if node == nil { return } - // 鍏堟壘鍒版渶杩戣妭鐐� - for { - if node.Prev() == nil { - break - } - - if node.Prev().Value.(ElevatorRunData).Timestamp >= timestamp { - node = node.Prev() + // 鎵惧埌鏈�杩戠殑绗﹀悎鏃堕棿鎴崇殑鑺傜偣 + for node != nil { + if data, ok := node.Value.(ElevatorRunData); ok { + if data.Timestamp >= timestamp { + node = node.Prev() // 鍚戝墠绉诲姩鑺傜偣 + } else { + break + } } else { break } } - if node.Value.(ElevatorRunData).Timestamp >= timestamp { - for { - if node.Next() == nil { - break + // 濡傛灉鎵惧埌鐨勮妭鐐圭殑鏃堕棿鎴崇鍚堣姹傦紝缁х画妫�鏌ユゼ灞� + if node != nil { + if current, ok := node.Value.(ElevatorRunData); ok && current.Timestamp >= timestamp { + for node != nil { + if nextNode := node.Next(); nextNode != nil { + if nextData, ok := nextNode.Value.(ElevatorRunData); ok { + if nextData.Floor == floor { + node = nextNode // 鍚戝墠绉诲姩鑺傜偣 + } else { + break + } + } + } else { + break + } } - if node.Next().Value.(ElevatorRunData).Floor == floor { - node = node.Next() - } else { - break + // 濡傛灉鎵惧埌鐨勬ゼ灞備笌鐩爣妤煎眰涓嶅悓锛岃繑鍥炶鏁版嵁 + if current.Floor != floor { + runData = current } } - } - - if node.Value.(ElevatorRunData).Timestamp >= timestamp && - node.Value.(ElevatorRunData).Floor != floor { - runData = node.Value.(ElevatorRunData) } return -- Gitblit v1.8.0