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 }