From f997f03b75a3682240cb70fef221bef7d8fbbfe0 Mon Sep 17 00:00:00 2001
From: Giovanna Lazzari Miotto <giovanna.lazzari.miotto@cern.ch>
Date: Mon, 26 Feb 2024 00:08:17 +0100
Subject: [PATCH] Coalesce `ProcessBlock` args under `BxMetadata`

---
 src/bmtf_orbit_processor.cc     | 7 +++----
 src/bmtf_orbit_processor.h      | 3 +--
 src/calo_obj_orbit_processor.cc | 7 +++----
 src/calo_obj_orbit_processor.h  | 3 +--
 src/calo_orbit_processor.cc     | 6 ++----
 src/calo_orbit_processor.h      | 3 +--
 src/calo_sum_orbit_processor.cc | 7 ++++---
 src/calo_sum_orbit_processor.h  | 3 +--
 src/muon_orbit_processor.cc     | 9 ++++-----
 src/muon_orbit_processor.h      | 3 +--
 src/orbit_processor.cc          | 2 +-
 src/orbit_processor.h           | 5 ++---
 src/ugt_orbit_processor.cc      | 5 ++---
 src/ugt_orbit_processor.h       | 3 +--
 14 files changed, 27 insertions(+), 39 deletions(-)

diff --git a/src/bmtf_orbit_processor.cc b/src/bmtf_orbit_processor.cc
index 7a4974a7..c4406a90 100644
--- a/src/bmtf_orbit_processor.cc
+++ b/src/bmtf_orbit_processor.cc
@@ -4,8 +4,7 @@
 
 #include "log.h"
 
-int BmtfOrbitProcessor::ProcessBlock(uint32_t bx, uint32_t orbit, bool has_header,
-                                     WriteMemRegion &writer, MemRegion &reader) {
+int BmtfOrbitProcessor::ProcessBlock(BxMetadata md, WriteMemRegion &writer, MemRegion &reader) {
   using SourceDataType = blockBmtf;
   using SinkDataType = uint64_t;
   const uint32_t source_data_length = 8;
@@ -28,8 +27,8 @@ int BmtfOrbitProcessor::ProcessBlock(uint32_t bx, uint32_t orbit, bool has_heade
 
   // header word of packed bmtf stub data contains count of stubs in bx
   // as well as the warning test enable flag.
-  uint32_t header = uint32_t{(static_cast<uint32_t>(has_header) << 8) + bx_data.count};
-  writer.Fill(BxMetadataType{header, bx, orbit});
+  md.header = uint32_t{(static_cast<uint32_t>(md.header) << 8) + bx_data.count};
+  writer.Fill(md);
   writer.Fill(bx_data.GetBuffer(), bx_data.GetSize());
 
   return bx_data.count;  // Original incremented counts by sCount
diff --git a/src/bmtf_orbit_processor.h b/src/bmtf_orbit_processor.h
index 766af6d9..f5bbc6cb 100644
--- a/src/bmtf_orbit_processor.h
+++ b/src/bmtf_orbit_processor.h
@@ -7,8 +7,7 @@ class BmtfOrbitProcessor : public OrbitProcessor {
   using OrbitProcessor::OrbitProcessor;
 
  protected:
-  int ProcessBlock(uint32_t bx, uint32_t orbit, bool has_header, WriteMemRegion &writer,
-                   MemRegion &reader) override;
+  int ProcessBlock(BxMetadata md, WriteMemRegion &writer, MemRegion &reader) override;
 
   inline uint32_t GetPacketSize() const {
     // size of bmtf stubs packet is 4bytes*(3headerWords + 2frames*8dataWords)=236
diff --git a/src/calo_obj_orbit_processor.cc b/src/calo_obj_orbit_processor.cc
index 1ad8fca8..3fb95091 100644
--- a/src/calo_obj_orbit_processor.cc
+++ b/src/calo_obj_orbit_processor.cc
@@ -5,8 +5,7 @@
 #include "log.h"
 
 // Returns the counts if valid or a negative error code
-int CaloObjOrbitProcessor::ProcessBlock(uint32_t bx, uint32_t orbit, bool has_header,
-                                        WriteMemRegion &writer, MemRegion &reader) {
+int CaloObjOrbitProcessor::ProcessBlock(BxMetadata md, WriteMemRegion &writer, MemRegion &reader) {
   using SourceDataType = blockCaloObj;
   using SinkDataType = uint32_t;
   const uint32_t source_data_length = 12;
@@ -29,8 +28,8 @@ int CaloObjOrbitProcessor::ProcessBlock(uint32_t bx, uint32_t orbit, bool has_he
     return -1;
   }
 
-  auto header = uint32_t{(static_cast<uint32_t>(has_header) << 8) + bx_data.count};
-  writer.Fill(BxMetadataType{header, bx, orbit});
+  md.header = uint32_t{(static_cast<uint32_t>(md.header) << 8) + bx_data.count};
+  writer.Fill(md);
   writer.Fill(bx_data.GetBuffer(), bx_data.GetSize());
 
   return bx_data.count;  // Original increments counts for each oBlocksOn toggled.
diff --git a/src/calo_obj_orbit_processor.h b/src/calo_obj_orbit_processor.h
index 4df90016..225afa63 100644
--- a/src/calo_obj_orbit_processor.h
+++ b/src/calo_obj_orbit_processor.h
@@ -30,8 +30,7 @@ class CaloObjOrbitProcessor : public OrbitProcessor {
   }
 
  protected:
-  int ProcessBlock(uint32_t bx, uint32_t orbit, bool has_header, WriteMemRegion &writer,
-                   MemRegion &reader) override;
+  int ProcessBlock(BxMetadata md, WriteMemRegion &writer, MemRegion &reader) override;
 
   inline uint32_t GetPacketSize() const {
     // size of calo object packet is 4bytes*(3headerWords + 2frames*8dataWords)=76
diff --git a/src/calo_orbit_processor.cc b/src/calo_orbit_processor.cc
index af62cb18..1a7606b2 100644
--- a/src/calo_orbit_processor.cc
+++ b/src/calo_orbit_processor.cc
@@ -2,8 +2,7 @@
 
 #include <cassert>
 
-int CaloOrbitProcessor::ProcessBlock(uint32_t bx, uint32_t orbit, bool has_header,
-                                     WriteMemRegion &writer, MemRegion &reader) {
+int CaloOrbitProcessor::ProcessBlock(BxMetadata md, WriteMemRegion &writer, MemRegion &reader) {
   struct CaloLinkData {
     uint32_t id;
     uint32_t data[6];  // Contains inverse matrix `calo0..6[id]` from `blockCalo`
@@ -22,8 +21,7 @@ int CaloOrbitProcessor::ProcessBlock(uint32_t bx, uint32_t orbit, bool has_heade
         {i, bl->calo0[i], bl->calo1[i], bl->calo2[i], bl->calo3[i], bl->calo4[i], bl->calo5[i]});
   }
 
-  auto header = uint32_t{has_header};  // header can be added to later
-  writer.Fill(BxMetadataType{header, bx, orbit});
+  writer.Fill(BxMetadata{md.header, md.bx, md.orbit});
   writer.Fill(bx_data.GetBuffer(), bx_data.GetSize());
 
   return 1;  // Returns one in the original
diff --git a/src/calo_orbit_processor.h b/src/calo_orbit_processor.h
index 01b2e994..41f1e29b 100644
--- a/src/calo_orbit_processor.h
+++ b/src/calo_orbit_processor.h
@@ -7,8 +7,7 @@ class CaloOrbitProcessor : public OrbitProcessor {
   using OrbitProcessor::OrbitProcessor;
 
  protected:
-  int ProcessBlock(uint32_t bx, uint32_t orbit, bool has_header, WriteMemRegion &writer,
-                   MemRegion &reader) override;
+  int ProcessBlock(BxMetadata md, WriteMemRegion &writer, MemRegion &reader) override;
 
   inline uint32_t GetPacketSize() const {
     // size of calo packet is 4bytes*(8links*7dataWords + 3headerWords)=236 bytes.
diff --git a/src/calo_sum_orbit_processor.cc b/src/calo_sum_orbit_processor.cc
index 594e9ef8..c242ec3c 100644
--- a/src/calo_sum_orbit_processor.cc
+++ b/src/calo_sum_orbit_processor.cc
@@ -2,8 +2,7 @@
 
 #include <cassert>
 
-int CaloSumOrbitProcessor::ProcessBlock(uint32_t bx, uint32_t orbit, bool, WriteMemRegion &writer,
-                                        MemRegion &reader) {
+int CaloSumOrbitProcessor::ProcessBlock(BxMetadata md, WriteMemRegion &writer, MemRegion &reader) {
   struct BxMetadataType {
     uint32_t bx;
     uint32_t orbit;
@@ -14,9 +13,11 @@ int CaloSumOrbitProcessor::ProcessBlock(uint32_t bx, uint32_t orbit, bool, Write
   //  const uint32_t source_data_length = 6;
 
   assert(reader.CheckBounds(sizeof(SourceDataType)));
+
   SourceDataType *bl = reader.Scan<SourceDataType>();
   //  BxData<SinkDataType, source_data_length> bx_data;
-  writer.Fill(BxMetadataType{bx, orbit});
+
+  writer.Fill(BxMetadataType{md.bx, md.orbit});
   writer.Fill(bl->calo_sum, sizeof(bl->calo_sum));
 
   return 6;  // Original left counts at zero
diff --git a/src/calo_sum_orbit_processor.h b/src/calo_sum_orbit_processor.h
index 8c7ba977..4cdf2ff1 100644
--- a/src/calo_sum_orbit_processor.h
+++ b/src/calo_sum_orbit_processor.h
@@ -7,8 +7,7 @@ class CaloSumOrbitProcessor : public OrbitProcessor {
   using OrbitProcessor::OrbitProcessor;
 
  protected:
-  int ProcessBlock(uint32_t bx, uint32_t orbit, bool has_header, WriteMemRegion &writer,
-                   MemRegion &reader) override;
+  int ProcessBlock(BxMetadata md, WriteMemRegion &writer, MemRegion &reader) override;
 
   inline uint32_t GetPacketSize() const {
     // size of calo sums packet is 4bytes*(2headerWords + 1frames*8dataWords)=40
diff --git a/src/muon_orbit_processor.cc b/src/muon_orbit_processor.cc
index b7b8c118..1d8423df 100644
--- a/src/muon_orbit_processor.cc
+++ b/src/muon_orbit_processor.cc
@@ -4,8 +4,7 @@
 
 #include "log.h"
 
-int MuonOrbitProcessor::ProcessBlock(uint32_t bx, uint32_t orbit, bool has_header,
-                                     WriteMemRegion &writer, MemRegion &reader) {
+int MuonOrbitProcessor::ProcessBlock(BxMetadata md, WriteMemRegion &writer, MemRegion &reader) {
   struct MuonLinkData {
     uint32_t f;
     uint32_t s;
@@ -45,10 +44,10 @@ int MuonOrbitProcessor::ProcessBlock(uint32_t bx, uint32_t orbit, bool has_heade
 
   // header word of packed muon data contains number of muons in words 3-4 and number of muons in
   // words 5-6, as well as the warning test enable flag.
-  auto header = uint32_t{(bx_data_1.count << 16) + ((static_cast<uint32_t>(has_header)) << 8) +
-                         bx_data_2.count};
+  md.header = uint32_t{(bx_data_1.count << 16) + ((static_cast<uint32_t>(md.header)) << 8) +
+                       bx_data_2.count};
 
-  writer.Fill(BxMetadataType{header, bx, orbit});
+  writer.Fill(BxMetadata{md.header, md.bx, md.orbit});
   writer.Fill(bx_data_1.GetBuffer(), bx_data_1.GetSize());
   writer.Fill(bx_data_2.GetBuffer(), bx_data_2.GetSize());
 
diff --git a/src/muon_orbit_processor.h b/src/muon_orbit_processor.h
index e1c4467c..fdf266ec 100644
--- a/src/muon_orbit_processor.h
+++ b/src/muon_orbit_processor.h
@@ -7,8 +7,7 @@ class MuonOrbitProcessor : public OrbitProcessor {
   using OrbitProcessor::OrbitProcessor;
 
  protected:
-  int ProcessBlock(uint32_t bx, uint32_t orbit, bool has_header, WriteMemRegion &writer,
-                   MemRegion &reader) override;
+  int ProcessBlock(BxMetadata md, WriteMemRegion &writer, MemRegion &reader) override;
 
   inline uint32_t GetPacketSize() const { return (3 + 2 * 8 * 3) * 4; }
 
diff --git a/src/orbit_processor.cc b/src/orbit_processor.cc
index 2324b6de..e8f6c913 100644
--- a/src/orbit_processor.cc
+++ b/src/orbit_processor.cc
@@ -154,7 +154,7 @@ OrbitProcessor::FillOrbitMetadata OrbitProcessor::FillOrbit(orbit_trailer *trail
     WriteMemRegion writer(&wr_ptr, wr_end_ptr);
     assert(writer.CheckBounds(GetPacketSize()));  // Max size a decoded block can use
 
-    if (int ret_counts = ProcessBlock(bx, orbit, orbit_header.second, writer, reader);
+    if (int ret_counts = ProcessBlock({orbit_header.second, bx, orbit}, writer, reader);
         ret_counts == -1) {
       continue;  // skip bunch crossing
     } else {
diff --git a/src/orbit_processor.h b/src/orbit_processor.h
index f7bf84bc..fbedf90d 100644
--- a/src/orbit_processor.h
+++ b/src/orbit_processor.h
@@ -43,7 +43,7 @@ class OrbitProcessor : public Processor {
     uint32_t count = 0;
   };
 
-  struct BxMetadataType {
+  struct BxMetadata {
     uint32_t header;
     uint32_t bx;
     uint32_t orbit;
@@ -104,8 +104,7 @@ class OrbitProcessor : public Processor {
 
   void ProcessSliceImpl(Slice &input, Slice &out) override;
 
-  virtual int ProcessBlock(uint32_t bx, uint32_t orbit, bool has_header, WriteMemRegion &writer,
-                           MemRegion &reader) = 0;
+  virtual int ProcessBlock(BxMetadata md, WriteMemRegion &writer, MemRegion &reader) = 0;
 
   virtual uint32_t GetPacketSize() const = 0;
 
diff --git a/src/ugt_orbit_processor.cc b/src/ugt_orbit_processor.cc
index 88147824..aacf829b 100644
--- a/src/ugt_orbit_processor.cc
+++ b/src/ugt_orbit_processor.cc
@@ -2,8 +2,7 @@
 
 #include <cassert>
 
-int UgtOrbitProcessor::ProcessBlock(uint32_t bx, uint32_t orbit, bool, WriteMemRegion &writer,
-                                    MemRegion &reader) {
+int UgtOrbitProcessor::ProcessBlock(BxMetadata md, WriteMemRegion &writer, MemRegion &reader) {
   struct BxMetadataType {
     uint32_t bx;
     uint32_t orbit;
@@ -12,7 +11,7 @@ int UgtOrbitProcessor::ProcessBlock(uint32_t bx, uint32_t orbit, bool, WriteMemR
   using SourceDataType = blockUgt;
 
   assert(reader.CheckBounds(sizeof(SourceDataType)));
-  writer.Fill(BxMetadataType{bx, orbit});
+  writer.Fill(BxMetadataType{md.bx, md.orbit});
 
   memcpy(writer.Scan<SourceDataType>(), reader.Scan<SourceDataType>(), sizeof(SourceDataType));
 
diff --git a/src/ugt_orbit_processor.h b/src/ugt_orbit_processor.h
index 9616f868..b645da5f 100644
--- a/src/ugt_orbit_processor.h
+++ b/src/ugt_orbit_processor.h
@@ -7,8 +7,7 @@ class UgtOrbitProcessor : public OrbitProcessor {
   using OrbitProcessor::OrbitProcessor;
 
  protected:
-  int ProcessBlock(uint32_t bx, uint32_t orbit, bool has_header, WriteMemRegion &writer,
-                   MemRegion &reader) override;
+  int ProcessBlock(BxMetadata md, WriteMemRegion &writer, MemRegion &reader) override;
 
   inline uint32_t GetPacketSize() const {
     // size of ugt bits packet is 4bytes*(2headerWords + 2frames*8dataWords)
-- 
GitLab