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

71 lines
2.0 KiB
C

#include <common/toolkit/MathTk.h>
#include "BuddyMirrorPattern.h"
bool BuddyMirrorPattern_deserializePattern(StripePattern* this, DeserializeCtx* ctx)
{
BuddyMirrorPattern* thisCast = (BuddyMirrorPattern*)this;
RawList mirrorBuddyGroupIDsVec;
// defaultNumTargets
if(!Serialization_deserializeUInt(ctx, &thisCast->defaultNumTargets) )
return false;
// mirrorBuddyGroupIDs
if(!Serialization_deserializeUInt16VecPreprocess(ctx, &mirrorBuddyGroupIDsVec) )
return false;
if(!Serialization_deserializeUInt16Vec(&mirrorBuddyGroupIDsVec, &thisCast->mirrorBuddyGroupIDs) )
return false;
// check mirrorBuddyGroupIDs
if(!UInt16Vec_length(&thisCast->mirrorBuddyGroupIDs) )
return false;
return true;
}
size_t BuddyMirrorPattern_getStripeTargetIndex(StripePattern* this, int64_t pos)
{
struct BuddyMirrorPattern* p = container_of(this, struct BuddyMirrorPattern, stripePattern);
return (pos / this->chunkSize) % UInt16Vec_length(&p->mirrorBuddyGroupIDs);
}
uint16_t BuddyMirrorPattern_getStripeTargetID(StripePattern* this, int64_t pos)
{
BuddyMirrorPattern* thisCast = (BuddyMirrorPattern*)this;
size_t targetIndex = BuddyMirrorPattern_getStripeTargetIndex(this, pos);
return UInt16Vec_at(&thisCast->mirrorBuddyGroupIDs, targetIndex);
}
void BuddyMirrorPattern_getStripeTargetIDsCopy(StripePattern* this, UInt16Vec* outTargetIDs)
{
BuddyMirrorPattern* thisCast = (BuddyMirrorPattern*)this;
ListTk_copyUInt16ListToVec( (UInt16List*)&thisCast->mirrorBuddyGroupIDs, outTargetIDs);
}
UInt16Vec* BuddyMirrorPattern_getStripeTargetIDs(StripePattern* this)
{
BuddyMirrorPattern* thisCast = (BuddyMirrorPattern*)this;
return &thisCast->mirrorBuddyGroupIDs;
}
unsigned BuddyMirrorPattern_getMinNumTargets(StripePattern* this)
{
return 1;
}
unsigned BuddyMirrorPattern_getDefaultNumTargets(StripePattern* this)
{
BuddyMirrorPattern* thisCast = (BuddyMirrorPattern*)this;
return thisCast->defaultNumTargets;
}