Skip to content

Commit

Permalink
Merge pull request #429 from nasa/issue-399-record-sizes
Browse files Browse the repository at this point in the history
Add constant expressions for record sizes
  • Loading branch information
bocchino authored May 23, 2024
2 parents 19eeefb + e0f0c7a commit 5de9bc1
Show file tree
Hide file tree
Showing 17 changed files with 304 additions and 3 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -213,7 +213,8 @@ case class ComponentCppWriter (
cmdWriter.getConstantMembers,
eventWriter.getConstantMembers,
tlmWriter.getConstantMembers,
paramWriter.getConstantMembers
paramWriter.getConstantMembers,
dpWriter.getConstantMembers
).flatten

if constants.isEmpty then Nil
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,26 @@ case class ComponentDataProducts (
aNode: Ast.Annotated[AstNode[Ast.DefComponent]]
) extends ComponentCppWriterUtils(s, aNode) {

def getConstantMembers: List[CppDoc.Class.Member] = {
def writeRecordSize(record: Record) = {
val data = record.aNode._2.data
val constantName = s"SIZE_OF_${data.name}_RECORD"
val typeName = TypeCppWriter.getName(s, record.recordType)
val eltSize = writeSerializedSizeExpr(s, record.recordType, typeName)
if record.isArray
then s"""|static constexpr FwSizeType $constantName(FwSizeType arraySize) {
| return sizeof(FwDpIdType) + sizeof(FwSizeStoreType) + arraySize * $eltSize;
|}"""
else s"""|static constexpr FwSizeType $constantName =
| sizeof(FwDpIdType) + $eltSize;"""
}
val sizes = recordsByName.map((_, record) => writeRecordSize(record)).flatMap(lines)
lazy val member = linesClassMember(
Line.blank :: line("//! Record sizes") :: sizes
)
guardedList (!sizes.isEmpty) (List(member))
}

def getTypeMembers: List[CppDoc.Class.Member] =
addAccessTagAndComment(
"PROTECTED",
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ case class TypeCppWriter(
/** CppWriterState */
s: CppWriterState,
/** The name to use for string types */
stringTypeName: String = "Fw::String"
stringTypeName: String = "Fw::StringBase"
) {

private object NameVisitor extends TypeVisitor {
Expand Down Expand Up @@ -52,7 +52,7 @@ object TypeCppWriter {
def getName(
s: CppWriterState,
t: Type,
stringTypeName: String = "Fw::String"
stringTypeName: String = "Fw::StringBase"
): String =
TypeCppWriter(s, stringTypeName).write(t)

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -99,6 +99,26 @@ class ActiveAsyncProductsComponentBase :
NUM_TYPEDRETURNOUT_OUTPUT_PORTS = 1,
};

//! Record sizes
static constexpr FwSizeType SIZE_OF_DataArrayRecord_RECORD(FwSizeType arraySize) {
return sizeof(FwDpIdType) + sizeof(FwSizeStoreType) + arraySize * ActiveAsyncProducts_Data::SERIALIZED_SIZE;
}
static constexpr FwSizeType SIZE_OF_DataRecord_RECORD =
sizeof(FwDpIdType) + ActiveAsyncProducts_Data::SERIALIZED_SIZE;
static constexpr FwSizeType SIZE_OF_StringArrayRecord_RECORD(FwSizeType arraySize) {
return sizeof(FwDpIdType) + sizeof(FwSizeStoreType) + arraySize * Fw::StringBase::STATIC_SERIALIZED_SIZE(80);
}
static constexpr FwSizeType SIZE_OF_StringRecord_RECORD =
sizeof(FwDpIdType) + Fw::StringBase::STATIC_SERIALIZED_SIZE(80);
static constexpr FwSizeType SIZE_OF_U32ArrayRecord_RECORD(FwSizeType arraySize) {
return sizeof(FwDpIdType) + sizeof(FwSizeStoreType) + arraySize * sizeof(U32);
}
static constexpr FwSizeType SIZE_OF_U32Record_RECORD =
sizeof(FwDpIdType) + sizeof(U32);
static constexpr FwSizeType SIZE_OF_U8ArrayRecord_RECORD(FwSizeType arraySize) {
return sizeof(FwDpIdType) + sizeof(FwSizeStoreType) + arraySize * sizeof(U8);
}

PROTECTED:

// ----------------------------------------------------------------------
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -97,6 +97,26 @@ class ActiveGetProductsComponentBase :
NUM_TYPEDRETURNOUT_OUTPUT_PORTS = 1,
};

//! Record sizes
static constexpr FwSizeType SIZE_OF_DataArrayRecord_RECORD(FwSizeType arraySize) {
return sizeof(FwDpIdType) + sizeof(FwSizeStoreType) + arraySize * ActiveGetProducts_Data::SERIALIZED_SIZE;
}
static constexpr FwSizeType SIZE_OF_DataRecord_RECORD =
sizeof(FwDpIdType) + ActiveGetProducts_Data::SERIALIZED_SIZE;
static constexpr FwSizeType SIZE_OF_StringArrayRecord_RECORD(FwSizeType arraySize) {
return sizeof(FwDpIdType) + sizeof(FwSizeStoreType) + arraySize * Fw::StringBase::STATIC_SERIALIZED_SIZE(80);
}
static constexpr FwSizeType SIZE_OF_StringRecord_RECORD =
sizeof(FwDpIdType) + Fw::StringBase::STATIC_SERIALIZED_SIZE(80);
static constexpr FwSizeType SIZE_OF_U32ArrayRecord_RECORD(FwSizeType arraySize) {
return sizeof(FwDpIdType) + sizeof(FwSizeStoreType) + arraySize * sizeof(U32);
}
static constexpr FwSizeType SIZE_OF_U32Record_RECORD =
sizeof(FwDpIdType) + sizeof(U32);
static constexpr FwSizeType SIZE_OF_U8ArrayRecord_RECORD(FwSizeType arraySize) {
return sizeof(FwDpIdType) + sizeof(FwSizeStoreType) + arraySize * sizeof(U8);
}

PROTECTED:

// ----------------------------------------------------------------------
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -99,6 +99,26 @@ class ActiveGuardedProductsComponentBase :
NUM_TYPEDRETURNOUT_OUTPUT_PORTS = 1,
};

//! Record sizes
static constexpr FwSizeType SIZE_OF_DataArrayRecord_RECORD(FwSizeType arraySize) {
return sizeof(FwDpIdType) + sizeof(FwSizeStoreType) + arraySize * ActiveGuardedProducts_Data::SERIALIZED_SIZE;
}
static constexpr FwSizeType SIZE_OF_DataRecord_RECORD =
sizeof(FwDpIdType) + ActiveGuardedProducts_Data::SERIALIZED_SIZE;
static constexpr FwSizeType SIZE_OF_StringArrayRecord_RECORD(FwSizeType arraySize) {
return sizeof(FwDpIdType) + sizeof(FwSizeStoreType) + arraySize * Fw::StringBase::STATIC_SERIALIZED_SIZE(80);
}
static constexpr FwSizeType SIZE_OF_StringRecord_RECORD =
sizeof(FwDpIdType) + Fw::StringBase::STATIC_SERIALIZED_SIZE(80);
static constexpr FwSizeType SIZE_OF_U32ArrayRecord_RECORD(FwSizeType arraySize) {
return sizeof(FwDpIdType) + sizeof(FwSizeStoreType) + arraySize * sizeof(U32);
}
static constexpr FwSizeType SIZE_OF_U32Record_RECORD =
sizeof(FwDpIdType) + sizeof(U32);
static constexpr FwSizeType SIZE_OF_U8ArrayRecord_RECORD(FwSizeType arraySize) {
return sizeof(FwDpIdType) + sizeof(FwSizeStoreType) + arraySize * sizeof(U8);
}

PROTECTED:

// ----------------------------------------------------------------------
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -99,6 +99,26 @@ class ActiveSyncProductsComponentBase :
NUM_TYPEDRETURNOUT_OUTPUT_PORTS = 1,
};

//! Record sizes
static constexpr FwSizeType SIZE_OF_DataArrayRecord_RECORD(FwSizeType arraySize) {
return sizeof(FwDpIdType) + sizeof(FwSizeStoreType) + arraySize * ActiveSyncProducts_Data::SERIALIZED_SIZE;
}
static constexpr FwSizeType SIZE_OF_DataRecord_RECORD =
sizeof(FwDpIdType) + ActiveSyncProducts_Data::SERIALIZED_SIZE;
static constexpr FwSizeType SIZE_OF_StringArrayRecord_RECORD(FwSizeType arraySize) {
return sizeof(FwDpIdType) + sizeof(FwSizeStoreType) + arraySize * Fw::StringBase::STATIC_SERIALIZED_SIZE(80);
}
static constexpr FwSizeType SIZE_OF_StringRecord_RECORD =
sizeof(FwDpIdType) + Fw::StringBase::STATIC_SERIALIZED_SIZE(80);
static constexpr FwSizeType SIZE_OF_U32ArrayRecord_RECORD(FwSizeType arraySize) {
return sizeof(FwDpIdType) + sizeof(FwSizeStoreType) + arraySize * sizeof(U32);
}
static constexpr FwSizeType SIZE_OF_U32Record_RECORD =
sizeof(FwDpIdType) + sizeof(U32);
static constexpr FwSizeType SIZE_OF_U8ArrayRecord_RECORD(FwSizeType arraySize) {
return sizeof(FwDpIdType) + sizeof(FwSizeStoreType) + arraySize * sizeof(U8);
}

PROTECTED:

// ----------------------------------------------------------------------
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -186,6 +186,26 @@ namespace M {
PARAMID_PARAMSTRUCT = 0x32, //!< A parameter with struct data and set/save opcodes
};

//! Record sizes
static constexpr FwSizeType SIZE_OF_DataArrayRecord_RECORD(FwSizeType arraySize) {
return sizeof(FwDpIdType) + sizeof(FwSizeStoreType) + arraySize * M::ActiveTest_Data::SERIALIZED_SIZE;
}
static constexpr FwSizeType SIZE_OF_DataRecord_RECORD =
sizeof(FwDpIdType) + M::ActiveTest_Data::SERIALIZED_SIZE;
static constexpr FwSizeType SIZE_OF_StringArrayRecord_RECORD(FwSizeType arraySize) {
return sizeof(FwDpIdType) + sizeof(FwSizeStoreType) + arraySize * Fw::StringBase::STATIC_SERIALIZED_SIZE(80);
}
static constexpr FwSizeType SIZE_OF_StringRecord_RECORD =
sizeof(FwDpIdType) + Fw::StringBase::STATIC_SERIALIZED_SIZE(80);
static constexpr FwSizeType SIZE_OF_U32ArrayRecord_RECORD(FwSizeType arraySize) {
return sizeof(FwDpIdType) + sizeof(FwSizeStoreType) + arraySize * sizeof(U32);
}
static constexpr FwSizeType SIZE_OF_U32Record_RECORD =
sizeof(FwDpIdType) + sizeof(U32);
static constexpr FwSizeType SIZE_OF_U8ArrayRecord_RECORD(FwSizeType arraySize) {
return sizeof(FwDpIdType) + sizeof(FwSizeStoreType) + arraySize * sizeof(U8);
}

PROTECTED:

// ----------------------------------------------------------------------
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -92,6 +92,26 @@ class PassiveGetProductsComponentBase :
NUM_TYPEDRETURNOUT_OUTPUT_PORTS = 1,
};

//! Record sizes
static constexpr FwSizeType SIZE_OF_DataArrayRecord_RECORD(FwSizeType arraySize) {
return sizeof(FwDpIdType) + sizeof(FwSizeStoreType) + arraySize * PassiveGetProducts_Data::SERIALIZED_SIZE;
}
static constexpr FwSizeType SIZE_OF_DataRecord_RECORD =
sizeof(FwDpIdType) + PassiveGetProducts_Data::SERIALIZED_SIZE;
static constexpr FwSizeType SIZE_OF_StringArrayRecord_RECORD(FwSizeType arraySize) {
return sizeof(FwDpIdType) + sizeof(FwSizeStoreType) + arraySize * Fw::StringBase::STATIC_SERIALIZED_SIZE(80);
}
static constexpr FwSizeType SIZE_OF_StringRecord_RECORD =
sizeof(FwDpIdType) + Fw::StringBase::STATIC_SERIALIZED_SIZE(80);
static constexpr FwSizeType SIZE_OF_U32ArrayRecord_RECORD(FwSizeType arraySize) {
return sizeof(FwDpIdType) + sizeof(FwSizeStoreType) + arraySize * sizeof(U32);
}
static constexpr FwSizeType SIZE_OF_U32Record_RECORD =
sizeof(FwDpIdType) + sizeof(U32);
static constexpr FwSizeType SIZE_OF_U8ArrayRecord_RECORD(FwSizeType arraySize) {
return sizeof(FwDpIdType) + sizeof(FwSizeStoreType) + arraySize * sizeof(U8);
}

PROTECTED:

// ----------------------------------------------------------------------
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -94,6 +94,26 @@ class PassiveGuardedProductsComponentBase :
NUM_TYPEDRETURNOUT_OUTPUT_PORTS = 1,
};

//! Record sizes
static constexpr FwSizeType SIZE_OF_DataArrayRecord_RECORD(FwSizeType arraySize) {
return sizeof(FwDpIdType) + sizeof(FwSizeStoreType) + arraySize * PassiveGuardedProducts_Data::SERIALIZED_SIZE;
}
static constexpr FwSizeType SIZE_OF_DataRecord_RECORD =
sizeof(FwDpIdType) + PassiveGuardedProducts_Data::SERIALIZED_SIZE;
static constexpr FwSizeType SIZE_OF_StringArrayRecord_RECORD(FwSizeType arraySize) {
return sizeof(FwDpIdType) + sizeof(FwSizeStoreType) + arraySize * Fw::StringBase::STATIC_SERIALIZED_SIZE(80);
}
static constexpr FwSizeType SIZE_OF_StringRecord_RECORD =
sizeof(FwDpIdType) + Fw::StringBase::STATIC_SERIALIZED_SIZE(80);
static constexpr FwSizeType SIZE_OF_U32ArrayRecord_RECORD(FwSizeType arraySize) {
return sizeof(FwDpIdType) + sizeof(FwSizeStoreType) + arraySize * sizeof(U32);
}
static constexpr FwSizeType SIZE_OF_U32Record_RECORD =
sizeof(FwDpIdType) + sizeof(U32);
static constexpr FwSizeType SIZE_OF_U8ArrayRecord_RECORD(FwSizeType arraySize) {
return sizeof(FwDpIdType) + sizeof(FwSizeStoreType) + arraySize * sizeof(U8);
}

PROTECTED:

// ----------------------------------------------------------------------
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -94,6 +94,26 @@ class PassiveSyncProductsComponentBase :
NUM_TYPEDRETURNOUT_OUTPUT_PORTS = 1,
};

//! Record sizes
static constexpr FwSizeType SIZE_OF_DataArrayRecord_RECORD(FwSizeType arraySize) {
return sizeof(FwDpIdType) + sizeof(FwSizeStoreType) + arraySize * PassiveSyncProducts_Data::SERIALIZED_SIZE;
}
static constexpr FwSizeType SIZE_OF_DataRecord_RECORD =
sizeof(FwDpIdType) + PassiveSyncProducts_Data::SERIALIZED_SIZE;
static constexpr FwSizeType SIZE_OF_StringArrayRecord_RECORD(FwSizeType arraySize) {
return sizeof(FwDpIdType) + sizeof(FwSizeStoreType) + arraySize * Fw::StringBase::STATIC_SERIALIZED_SIZE(80);
}
static constexpr FwSizeType SIZE_OF_StringRecord_RECORD =
sizeof(FwDpIdType) + Fw::StringBase::STATIC_SERIALIZED_SIZE(80);
static constexpr FwSizeType SIZE_OF_U32ArrayRecord_RECORD(FwSizeType arraySize) {
return sizeof(FwDpIdType) + sizeof(FwSizeStoreType) + arraySize * sizeof(U32);
}
static constexpr FwSizeType SIZE_OF_U32Record_RECORD =
sizeof(FwDpIdType) + sizeof(U32);
static constexpr FwSizeType SIZE_OF_U8ArrayRecord_RECORD(FwSizeType arraySize) {
return sizeof(FwDpIdType) + sizeof(FwSizeStoreType) + arraySize * sizeof(U8);
}

PROTECTED:

// ----------------------------------------------------------------------
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -173,6 +173,26 @@ class PassiveTestComponentBase :
PARAMID_PARAMSTRUCT = 0x32, //!< A parameter with struct data and set/save opcodes
};

//! Record sizes
static constexpr FwSizeType SIZE_OF_DataArrayRecord_RECORD(FwSizeType arraySize) {
return sizeof(FwDpIdType) + sizeof(FwSizeStoreType) + arraySize * PassiveTest_Data::SERIALIZED_SIZE;
}
static constexpr FwSizeType SIZE_OF_DataRecord_RECORD =
sizeof(FwDpIdType) + PassiveTest_Data::SERIALIZED_SIZE;
static constexpr FwSizeType SIZE_OF_StringArrayRecord_RECORD(FwSizeType arraySize) {
return sizeof(FwDpIdType) + sizeof(FwSizeStoreType) + arraySize * Fw::StringBase::STATIC_SERIALIZED_SIZE(80);
}
static constexpr FwSizeType SIZE_OF_StringRecord_RECORD =
sizeof(FwDpIdType) + Fw::StringBase::STATIC_SERIALIZED_SIZE(80);
static constexpr FwSizeType SIZE_OF_U32ArrayRecord_RECORD(FwSizeType arraySize) {
return sizeof(FwDpIdType) + sizeof(FwSizeStoreType) + arraySize * sizeof(U32);
}
static constexpr FwSizeType SIZE_OF_U32Record_RECORD =
sizeof(FwDpIdType) + sizeof(U32);
static constexpr FwSizeType SIZE_OF_U8ArrayRecord_RECORD(FwSizeType arraySize) {
return sizeof(FwDpIdType) + sizeof(FwSizeStoreType) + arraySize * sizeof(U8);
}

PROTECTED:

// ----------------------------------------------------------------------
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -99,6 +99,26 @@ class QueuedAsyncProductsComponentBase :
NUM_TYPEDRETURNOUT_OUTPUT_PORTS = 1,
};

//! Record sizes
static constexpr FwSizeType SIZE_OF_DataArrayRecord_RECORD(FwSizeType arraySize) {
return sizeof(FwDpIdType) + sizeof(FwSizeStoreType) + arraySize * QueuedAsyncProducts_Data::SERIALIZED_SIZE;
}
static constexpr FwSizeType SIZE_OF_DataRecord_RECORD =
sizeof(FwDpIdType) + QueuedAsyncProducts_Data::SERIALIZED_SIZE;
static constexpr FwSizeType SIZE_OF_StringArrayRecord_RECORD(FwSizeType arraySize) {
return sizeof(FwDpIdType) + sizeof(FwSizeStoreType) + arraySize * Fw::StringBase::STATIC_SERIALIZED_SIZE(80);
}
static constexpr FwSizeType SIZE_OF_StringRecord_RECORD =
sizeof(FwDpIdType) + Fw::StringBase::STATIC_SERIALIZED_SIZE(80);
static constexpr FwSizeType SIZE_OF_U32ArrayRecord_RECORD(FwSizeType arraySize) {
return sizeof(FwDpIdType) + sizeof(FwSizeStoreType) + arraySize * sizeof(U32);
}
static constexpr FwSizeType SIZE_OF_U32Record_RECORD =
sizeof(FwDpIdType) + sizeof(U32);
static constexpr FwSizeType SIZE_OF_U8ArrayRecord_RECORD(FwSizeType arraySize) {
return sizeof(FwDpIdType) + sizeof(FwSizeStoreType) + arraySize * sizeof(U8);
}

PROTECTED:

// ----------------------------------------------------------------------
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -97,6 +97,26 @@ class QueuedGetProductsComponentBase :
NUM_TYPEDRETURNOUT_OUTPUT_PORTS = 1,
};

//! Record sizes
static constexpr FwSizeType SIZE_OF_DataArrayRecord_RECORD(FwSizeType arraySize) {
return sizeof(FwDpIdType) + sizeof(FwSizeStoreType) + arraySize * QueuedGetProducts_Data::SERIALIZED_SIZE;
}
static constexpr FwSizeType SIZE_OF_DataRecord_RECORD =
sizeof(FwDpIdType) + QueuedGetProducts_Data::SERIALIZED_SIZE;
static constexpr FwSizeType SIZE_OF_StringArrayRecord_RECORD(FwSizeType arraySize) {
return sizeof(FwDpIdType) + sizeof(FwSizeStoreType) + arraySize * Fw::StringBase::STATIC_SERIALIZED_SIZE(80);
}
static constexpr FwSizeType SIZE_OF_StringRecord_RECORD =
sizeof(FwDpIdType) + Fw::StringBase::STATIC_SERIALIZED_SIZE(80);
static constexpr FwSizeType SIZE_OF_U32ArrayRecord_RECORD(FwSizeType arraySize) {
return sizeof(FwDpIdType) + sizeof(FwSizeStoreType) + arraySize * sizeof(U32);
}
static constexpr FwSizeType SIZE_OF_U32Record_RECORD =
sizeof(FwDpIdType) + sizeof(U32);
static constexpr FwSizeType SIZE_OF_U8ArrayRecord_RECORD(FwSizeType arraySize) {
return sizeof(FwDpIdType) + sizeof(FwSizeStoreType) + arraySize * sizeof(U8);
}

PROTECTED:

// ----------------------------------------------------------------------
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -99,6 +99,26 @@ class QueuedGuardedProductsComponentBase :
NUM_TYPEDRETURNOUT_OUTPUT_PORTS = 1,
};

//! Record sizes
static constexpr FwSizeType SIZE_OF_DataArrayRecord_RECORD(FwSizeType arraySize) {
return sizeof(FwDpIdType) + sizeof(FwSizeStoreType) + arraySize * QueuedGuardedProducts_Data::SERIALIZED_SIZE;
}
static constexpr FwSizeType SIZE_OF_DataRecord_RECORD =
sizeof(FwDpIdType) + QueuedGuardedProducts_Data::SERIALIZED_SIZE;
static constexpr FwSizeType SIZE_OF_StringArrayRecord_RECORD(FwSizeType arraySize) {
return sizeof(FwDpIdType) + sizeof(FwSizeStoreType) + arraySize * Fw::StringBase::STATIC_SERIALIZED_SIZE(80);
}
static constexpr FwSizeType SIZE_OF_StringRecord_RECORD =
sizeof(FwDpIdType) + Fw::StringBase::STATIC_SERIALIZED_SIZE(80);
static constexpr FwSizeType SIZE_OF_U32ArrayRecord_RECORD(FwSizeType arraySize) {
return sizeof(FwDpIdType) + sizeof(FwSizeStoreType) + arraySize * sizeof(U32);
}
static constexpr FwSizeType SIZE_OF_U32Record_RECORD =
sizeof(FwDpIdType) + sizeof(U32);
static constexpr FwSizeType SIZE_OF_U8ArrayRecord_RECORD(FwSizeType arraySize) {
return sizeof(FwDpIdType) + sizeof(FwSizeStoreType) + arraySize * sizeof(U8);
}

PROTECTED:

// ----------------------------------------------------------------------
Expand Down
Loading

0 comments on commit 5de9bc1

Please sign in to comment.