go.chromium.org/luci@v0.0.0-20240309015107-7cdc2e660f33/cv/internal/prjmanager/state/pclindex.go (about)

     1  // Copyright 2021 The LUCI Authors.
     2  //
     3  // Licensed under the Apache License, Version 2.0 (the "License");
     4  // you may not use this file except in compliance with the License.
     5  // You may obtain a copy of the License at
     6  //
     7  //      http://www.apache.org/licenses/LICENSE-2.0
     8  //
     9  // Unless required by applicable law or agreed to in writing, software
    10  // distributed under the License is distributed on an "AS IS" BASIS,
    11  // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    12  // See the License for the specific language governing permissions and
    13  // limitations under the License.
    14  
    15  package state
    16  
    17  import (
    18  	"go.chromium.org/luci/cv/internal/common"
    19  )
    20  
    21  type pclIndex map[common.CLID]int
    22  
    23  func (p pclIndex) addI64(id int64, index int) { p[common.CLID(id)] = index }
    24  func (p pclIndex) hasI64(id int64) bool       { return p.has(common.CLID(id)) }
    25  func (p pclIndex) has(clid common.CLID) bool {
    26  	_, exists := p[clid]
    27  	return exists
    28  }
    29  
    30  // ensurePCLIndex constructs and fills pclIndex if necessary.
    31  func (s *State) ensurePCLIndex() {
    32  	if s.pclIndex != nil {
    33  		return
    34  	}
    35  	s.pclIndex = make(pclIndex, len(s.PB.GetPcls()))
    36  	s.forceUpdatePCLIndex()
    37  }
    38  
    39  // forceUpdatePCLIndex updates PCLIndex based latest PCLs.
    40  //
    41  // Doesn't delete entries for deleted PCLs, so must be called only after items
    42  // were updated/inserted into PCLs.
    43  func (s *State) forceUpdatePCLIndex() {
    44  	for i, pcl := range s.PB.GetPcls() {
    45  		s.pclIndex.addI64(pcl.GetClid(), i)
    46  	}
    47  }