github.com/unicornultrafoundation/go-u2u@v1.0.0-rc1.0.20240205080301-e74a83d3fadc/native/events.go (about)

     1  package native
     2  
     3  import (
     4  	"bytes"
     5  
     6  	"github.com/unicornultrafoundation/go-helios/hash"
     7  	"github.com/unicornultrafoundation/go-helios/native/dag"
     8  )
     9  
    10  // Events is a ordered slice of events.
    11  type Events []*Event
    12  
    13  // String returns human readable representation.
    14  func (ee Events) String() string {
    15  	return ee.Bases().String()
    16  }
    17  
    18  // Add appends hash to the slice.
    19  func (ee *Events) Add(e ...*Event) {
    20  	*ee = append(*ee, e...)
    21  }
    22  
    23  func (ee Events) IDs() hash.Events {
    24  	res := make(hash.Events, 0, len(ee))
    25  	for _, e := range ee {
    26  		res.Add(e.ID())
    27  	}
    28  	return res
    29  }
    30  
    31  func (ee Events) Bases() dag.Events {
    32  	res := make(dag.Events, 0, ee.Len())
    33  	for _, e := range ee {
    34  		res = append(res, e)
    35  	}
    36  	return res
    37  }
    38  
    39  func (ee Events) Interfaces() EventIs {
    40  	res := make(EventIs, 0, ee.Len())
    41  	for _, e := range ee {
    42  		res = append(res, e)
    43  	}
    44  	return res
    45  }
    46  
    47  func (ee Events) Len() int      { return len(ee) }
    48  func (ee Events) Swap(i, j int) { ee[i], ee[j] = ee[j], ee[i] }
    49  func (ee Events) Less(i, j int) bool {
    50  	return bytes.Compare(ee[i].ID().Bytes(), ee[j].ID().Bytes()) < 0
    51  }
    52  
    53  // EventPayloads is a ordered slice of EventPayload.
    54  type EventPayloads []*EventPayload
    55  
    56  // String returns human readable representation.
    57  func (ee EventPayloads) String() string {
    58  	return ee.Bases().String()
    59  }
    60  
    61  // Add appends hash to the slice.
    62  func (ee *EventPayloads) Add(e ...*EventPayload) {
    63  	*ee = append(*ee, e...)
    64  }
    65  
    66  func (ee EventPayloads) IDs() hash.Events {
    67  	res := make(hash.Events, 0, len(ee))
    68  	for _, e := range ee {
    69  		res.Add(e.ID())
    70  	}
    71  	return res
    72  }
    73  
    74  func (ee EventPayloads) Bases() dag.Events {
    75  	res := make(dag.Events, 0, ee.Len())
    76  	for _, e := range ee {
    77  		res = append(res, e)
    78  	}
    79  	return res
    80  }
    81  
    82  func (ee EventPayloads) Len() int      { return len(ee) }
    83  func (ee EventPayloads) Swap(i, j int) { ee[i], ee[j] = ee[j], ee[i] }
    84  func (ee EventPayloads) Less(i, j int) bool {
    85  	return bytes.Compare(ee[i].ID().Bytes(), ee[j].ID().Bytes()) < 0
    86  }
    87  
    88  // EventIs is a ordered slice of events.
    89  type EventIs []EventI
    90  
    91  // String returns human readable representation.
    92  func (ee EventIs) String() string {
    93  	return ee.Bases().String()
    94  }
    95  
    96  // Add appends hash to the slice.
    97  func (ee *EventIs) Add(e ...EventI) {
    98  	*ee = append(*ee, e...)
    99  }
   100  
   101  func (ee EventIs) IDs() hash.Events {
   102  	res := make(hash.Events, 0, len(ee))
   103  	for _, e := range ee {
   104  		res.Add(e.ID())
   105  	}
   106  	return res
   107  }
   108  
   109  func (ee EventIs) Bases() dag.Events {
   110  	res := make(dag.Events, 0, ee.Len())
   111  	for _, e := range ee {
   112  		res = append(res, e)
   113  	}
   114  	return res
   115  }
   116  
   117  func (ee EventIs) Len() int      { return len(ee) }
   118  func (ee EventIs) Swap(i, j int) { ee[i], ee[j] = ee[j], ee[i] }
   119  func (ee EventIs) Less(i, j int) bool {
   120  	return bytes.Compare(ee[i].ID().Bytes(), ee[j].ID().Bytes()) < 0
   121  }