Refactor SerializeBufferBase to LinearBufferBase/SerialBufferBase (Phases 1-2)#29
Refactor SerializeBufferBase to LinearBufferBase/SerialBufferBase (Phases 1-2)#29devin-ai-integration[bot] wants to merge 5 commits intodevelfrom
Conversation
…fferBase/SerialBufferBase Phase 1 of SerialBufferBase refactoring. Replace SerializeBufferBase alias with the appropriate concrete type in Svc/CmdSequencer test utility files: - Functions that call getBuffAddr() on buffer parameters use LinearBufferBase& - Functions that only use serialize/deserialize API use SerialBufferBase& - Virtual method overrides in derived classes match base class signatures Changed to SerialBufferBase& (no pointer access needed): - AMPCS/Headers: serialize() functions only call serializeFrom() - FPrime/Headers: serialize() only calls serializeFrom() - FPrime/Records: all serialize() overloads only call serializeFrom() - AMPCS/Records: dest parameter only calls serializeFrom() Kept as LinearBufferBase& (pointer access required): - AMPCS/Records: cmdField parameter calls getBuffAddr() - AMPCS/CRCs: computeCRC()/createFile() call getBuffAddr() - FPrime/CRCs: serialize() calls getBuffAddr() - Buffers: write() calls getBuffAddr(); FileBuffer IS a LinearBufferBase - File base class: virtual methods must match derived implementations - All derived file classes: override virtual methods from File base class Co-Authored-By: cindy.h.oda <cindy.h.oda@jpl.nasa.gov>
Original prompt from cindy.h.oda
|
🤖 Devin AI EngineerI'll be helping with this pull request! Here's what you should know: ✅ I will automatically:
Note: I can only respond to comments from users who have write access to this repository. ⚙️ Control Options:
|
…Base/LinearBufferBase - TmFramer::fill_with_idle_packet: SerializeBufferBase& -> SerialBufferBase& (serialize-only API) - AosFramer::serialize_idle_spp_packet: SerializeBufferBase& -> SerialBufferBase& (serialize-only API) - GenericHubTester::random_fill: SerializeBufferBase& -> SerialBufferBase& (serialize-only API) - DpContainerHeader::checkDeserialAtOffset: SerializeBufferBase& -> LinearBufferBase& (calls getBuffAddr) - AmpcsEvrLogPacket::deserializeFrom: fix header/impl mismatch, SerializeBufferBase& -> SerialBufferBase& - Add fpp-codegen-changes-needed.md tracking FPP-blocked changes Co-Authored-By: cindy.h.oda <cindy.h.oda@jpl.nasa.gov>
… in isDataBufferEmpty Local variable only calls getSize() and getDeserializeSizeLeft() — no pointer access needed. Co-Authored-By: cindy.h.oda <cindy.h.oda@jpl.nasa.gov>
…SerialBufferBase& random_fill() only calls serializeFrom() — no pointer access needed. Co-Authored-By: cindy.h.oda <cindy.h.oda@jpl.nasa.gov>
…lBufferBase& random_fill() only calls serializeFrom() — no pointer access needed. Co-Authored-By: cindy.h.oda <cindy.h.oda@jpl.nasa.gov>
fpp-codegen-changes-needed.mdadded)Change Description
Replace all uses of the
Fw::SerializeBufferBasealias with the appropriate explicit type based on what the function body actually requires.SerializeBufferBaseis a type alias forLinearBufferBase. Each usage is disambiguated into:Fw::SerialBufferBase&— for parameters/variables where the function only calls serialize/deserialize API methods (serializeFrom(),deserializeTo(),resetSer(),getSize(), etc.). This is the abstract buffer interface with no pointer-access methods.Fw::LinearBufferBase&— for parameters/variables where the function (or a callee) callsgetBuffAddr()or other pointer-returning methods.Phase 1:
Svc/CmdSequencer/test/ut/SequenceFiles/(50 files)Changed to
SerialBufferBase&(4 function groups):AMPCS::Headers::serialize()(both overloads) — only callsserializeFrom()AMPCS::Records::serialize()—destparameter in all 3 overloads — only callsserializeFrom()FPrime::Headers::serialize()— only callsserializeFrom()FPrime::Records::serialize()—destBufferin all 3 overloads — only callsserializeFrom()Kept as
LinearBufferBase&(everything else):AMPCS::CRCs::computeCRC()/createFile()— callsbuffer.getBuffAddr()AMPCS::Records::serialize()cmdFieldparam — callscmdField.getBuffAddr()FPrime::CRCs::serialize()— callsdestBuffer.getBuffAddr()Buffers::write()— callsbuffer.getBuffAddr()FileBufferclass — concrete buffer, inheritance changed from alias to canonicalLinearBufferBaseFilebase class virtual methods — must match derived signaturesBadCRCFile,ImmediateFile, etc.) — override virtual methods fromFilePhase 2: Framework, Drv, and test utility files (13 files changed)
Changed to
SerialBufferBase&:TmFramer::fill_with_idle_packet()— only callsgetSize()andserializeFrom()AosFramer::serialize_idle_spp_packet()— only callsserializeFrom()GenericHubTester::random_fill()— only callsresetSer()andserializeFrom()AsyncByteStreamBufferAdapterTester::random_fill()— only callsserializeFrom()ByteStreamBufferAdapterTester::random_fill()— only callsserializeFrom()AmpcsEvrLogPacket::deserializeFrom()header declaration — fixes mismatch with.cpp(which already usedSerialBufferBase&); body only callsdeserializeTo()andgetDeserializeSizeLeft()DpContainerTester::isDataBufferEmpty()— local variable only callsgetSize()andgetDeserializeSizeLeft()Changed to explicit
LinearBufferBase&:DpContainerHeader::checkDeserialAtOffset()— callsgetBuffAddr()andgetBuffAddrLeft()Evaluated, no change needed:
AmpcsEvrLogPacket::serializeTo()— alreadySerialBufferBase&ConstStringBaseserialize/deserialize methods — alreadySerialBufferBase&FprimeFrameDetector.cpp— only comments mentioningSerializeBufferBase, no parameter typesSerializeBufferBaseTester— accessesLinearBufferBaseprivate members (m_serLoc,m_deserLoc) viafriend class; must staySerializeBufferBase&Skipped (FPP codegen required):
InputPortBase::invokeSerial(),InputSerializePort::invokeSerial(),OutputPortBase::invokeSerial(),CompFuncPtrtypedefserialIn_handler/from_serialOut_handlersignatures inGenericHuband testerfpp-codegen-changes-needed.mdNew documentation:
fpp-codegen-changes-needed.mdTracks locations where
LinearBufferBase/SerializeBufferBasecould becomeSerialBufferBasebut are blocked by FPP code generator dependencies. Includes justifications and a summary table.Rationale
This is part of a broader effort to use the abstract
SerialBufferBaseinterface wherever possible, enabling future circular buffer implementations to be used interchangeably. TheSerializeBufferBasealias obscures whether code actually needs linear/contiguous buffer access or just the serialize API.Testing/Review Recommendations
Key items to verify:
File::serializeFPrime()/serializeAMPCS()are declared asLinearBufferBase&. All 17 derived class overrides must match exactly.SerialBufferBasecorrectness: Verify thatAMPCS::Headers::serialize()andFPrime::Records::serialize()truly never callgetBuffAddr().TmFramer::fill_with_idle_packet()(TmFramer.cpp:108–129)AosFramer::serialize_idle_spp_packet()(AosFramer.cpp:343–364)GenericHubTester::random_fill()(GenericHubTester.cpp:84–90)AsyncByteStreamBufferAdapterTester::random_fill()(AsyncByteStreamBufferAdapterTester.cpp:46–51)ByteStreamBufferAdapterTester::random_fill()(ByteStreamBufferAdapterTester.cpp:45–51).hppdeclareddeserializeFrom(SerializeBufferBase&)while the.cppalready usedSerialBufferBase&. SinceSerializeBufferBaseis an alias forLinearBufferBase(which is a subclass ofSerialBufferBase), this was a type mismatch between declaration and definition. Verify the fix is correct and the function compiles.Drv/tester files were found reactively during review and were not in the original Phase 2 file list. A repo-wide grep has been performed, but reviewers should verify no other test utilities were missed.fpp-codegen-changes-needed.mdfor accuracy of the deferred change analysis.Future Work
Svc/files (CmdSequencer,FpySequencer,PrmDb,TlmPacketizer,ComLogger,ComQueue,BufferLogger)LinearBufferBaseSerialBufferBase's ownLinearBufferBasereferences (design decision)AI Usage (see policy)
AI (Devin) was used to systematically analyze each function body for
getBuffAddr()calls, determine the correct replacement type, perform the mechanical edits, and produce thefpp-codegen-changes-needed.mdtracking document. Each change decision was based on examining whether the function body (and its callees) access buffer data pointers.Link to Devin session: https://nasa-jpl-demo.devinenterprise.com/sessions/913162b97ea340479b60953cdb2d3443