| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758 |
- // 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
- }
|