2025-08-10 01:34:16 +02:00

71 lines
1.8 KiB
C

#include <common/toolkit/MathTk.h>
#include "Raid0Pattern.h"
bool Raid0Pattern_deserializePattern(StripePattern* this, DeserializeCtx* ctx)
{
Raid0Pattern* thisCast = (Raid0Pattern*)this;
RawList targetIDsList;
// defaultNumTargets
if(!Serialization_deserializeUInt(ctx, &thisCast->defaultNumTargets) )
return false;
// targetIDs
if(!Serialization_deserializeUInt16VecPreprocess(ctx, &targetIDsList) )
return false;
if(!Serialization_deserializeUInt16Vec(&targetIDsList, &thisCast->stripeTargetIDs) )
return false;
// check targetIDs
if(!UInt16Vec_length(&thisCast->stripeTargetIDs) )
return false;
return true;
}
size_t Raid0Pattern_getStripeTargetIndex(StripePattern* this, int64_t pos)
{
struct Raid0Pattern* p = container_of(this, struct Raid0Pattern, stripePattern);
return (pos / this->chunkSize) % UInt16Vec_length(&p->stripeTargetIDs);
}
uint16_t Raid0Pattern_getStripeTargetID(StripePattern* this, int64_t pos)
{
Raid0Pattern* thisCast = (Raid0Pattern*)this;
size_t targetIndex = Raid0Pattern_getStripeTargetIndex(this, pos);
return UInt16Vec_at(&thisCast->stripeTargetIDs, targetIndex);
}
void Raid0Pattern_getStripeTargetIDsCopy(StripePattern* this, UInt16Vec* outTargetIDs)
{
Raid0Pattern* thisCast = (Raid0Pattern*)this;
ListTk_copyUInt16ListToVec( (UInt16List*)&thisCast->stripeTargetIDs, outTargetIDs);
}
UInt16Vec* Raid0Pattern_getStripeTargetIDs(StripePattern* this)
{
Raid0Pattern* thisCast = (Raid0Pattern*)this;
return &thisCast->stripeTargetIDs;
}
unsigned Raid0Pattern_getMinNumTargets(StripePattern* this)
{
return 1;
}
unsigned Raid0Pattern_getDefaultNumTargets(StripePattern* this)
{
Raid0Pattern* thisCast = (Raid0Pattern*)this;
return thisCast->defaultNumTargets;
}