// package archive_stat_combo -- статистика архивных комбо по частоте встречи package archive_stat_combo import ( "fmt" "gitp78su.ipnodns.ru/svi/packer/lev0/alias" "gitp78su.ipnodns.ru/svi/packer/lev1/archive_combo" ) // ArchiveStatCombo -- статистика архивных комбо по частоте type ArchiveStatCombo struct { dict map[alias.ArchCombo]*archive_combo.ArchiveCombo // Частота встречи комбо } // NewArchiveStatVal -- возвращает новую статистику архивных значений func NewArchiveStatVal(binData []uint32) *ArchiveStatCombo { dict := map[alias.ArchCombo]*archive_combo.ArchiveCombo{} valHi := alias.ArchVal(binData[0]) for _, binVal1 := range binData[1:] { valLow := alias.ArchVal(binVal1) combo := alias.ArchCombo(valHi*65535 + valLow) _, isOk := dict[combo] if isOk { dict[combo].Inc() } else { dict[combo] = archive_combo.NewArchiveCombo(valHi, valLow) } valHi = valLow } sf := &ArchiveStatCombo{ dict: dict, } return sf } // Len -- возвращает размер словаря архивных комбо func (sf *ArchiveStatCombo) Len() int { return len(sf.dict) } // String -- возвращает строковое представление статистики архивных комбо func (sf *ArchiveStatCombo) String() string { return fmt.Sprintf("{len=%v}", len(sf.dict)) } // Max -- возвращает следующее самое частотное значение func (sf *ArchiveStatCombo) Max() *archive_combo.ArchiveCombo { var ( val *archive_combo.ArchiveCombo ) for _, _val := range sf.dict { if _val.Count() >= val.Count() { val = _val } } return val }