Skip to content

Commit 4dcaf8f

Browse files
committed
add trait value storage and accelerated trait property get/set
1 parent f3e137d commit 4dcaf8f

24 files changed

Lines changed: 395 additions & 237 deletions

core/genomic_element.cpp

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -101,8 +101,9 @@ EidosValue_SP GenomicElement::GetProperty(EidosGlobalStringID p_property_id)
101101
}
102102
}
103103

104-
EidosValue *GenomicElement::GetProperty_Accelerated_startPosition(EidosObject **p_values, size_t p_values_size)
104+
EidosValue *GenomicElement::GetProperty_Accelerated_startPosition(EidosGlobalStringID p_property_id, EidosObject **p_values, size_t p_values_size)
105105
{
106+
#pragma unused (p_property_id)
106107
EidosValue_Int *int_result = (new (gEidosValuePool->AllocateChunk()) EidosValue_Int())->resize_no_initialize(p_values_size);
107108

108109
for (size_t value_index = 0; value_index < p_values_size; ++value_index)
@@ -115,8 +116,9 @@ EidosValue *GenomicElement::GetProperty_Accelerated_startPosition(EidosObject **
115116
return int_result;
116117
}
117118

118-
EidosValue *GenomicElement::GetProperty_Accelerated_endPosition(EidosObject **p_values, size_t p_values_size)
119+
EidosValue *GenomicElement::GetProperty_Accelerated_endPosition(EidosGlobalStringID p_property_id, EidosObject **p_values, size_t p_values_size)
119120
{
121+
#pragma unused (p_property_id)
120122
EidosValue_Int *int_result = (new (gEidosValuePool->AllocateChunk()) EidosValue_Int())->resize_no_initialize(p_values_size);
121123

122124
for (size_t value_index = 0; value_index < p_values_size; ++value_index)
@@ -129,8 +131,9 @@ EidosValue *GenomicElement::GetProperty_Accelerated_endPosition(EidosObject **p_
129131
return int_result;
130132
}
131133

132-
EidosValue *GenomicElement::GetProperty_Accelerated_tag(EidosObject **p_values, size_t p_values_size)
134+
EidosValue *GenomicElement::GetProperty_Accelerated_tag(EidosGlobalStringID p_property_id, EidosObject **p_values, size_t p_values_size)
133135
{
136+
#pragma unused (p_property_id)
134137
EidosValue_Int *int_result = (new (gEidosValuePool->AllocateChunk()) EidosValue_Int())->resize_no_initialize(p_values_size);
135138

136139
for (size_t value_index = 0; value_index < p_values_size; ++value_index)
@@ -147,8 +150,9 @@ EidosValue *GenomicElement::GetProperty_Accelerated_tag(EidosObject **p_values,
147150
return int_result;
148151
}
149152

150-
EidosValue *GenomicElement::GetProperty_Accelerated_genomicElementType(EidosObject **p_values, size_t p_values_size)
153+
EidosValue *GenomicElement::GetProperty_Accelerated_genomicElementType(EidosGlobalStringID p_property_id, EidosObject **p_values, size_t p_values_size)
151154
{
155+
#pragma unused (p_property_id)
152156
EidosValue_Object *object_result = (new (gEidosValuePool->AllocateChunk()) EidosValue_Object(gSLiM_GenomicElementType_Class))->resize_no_initialize(p_values_size);
153157

154158
for (size_t value_index = 0; value_index < p_values_size; ++value_index)

core/genomic_element.h

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -76,10 +76,10 @@ class GenomicElement : public EidosObject
7676
EidosValue_SP ExecuteMethod_setGenomicElementType(EidosGlobalStringID p_method_id, const std::vector<EidosValue_SP> &p_arguments, EidosInterpreter &p_interpreter);
7777

7878
// Accelerated property access; see class EidosObject for comments on this mechanism
79-
static EidosValue *GetProperty_Accelerated_startPosition(EidosObject **p_values, size_t p_values_size);
80-
static EidosValue *GetProperty_Accelerated_endPosition(EidosObject **p_values, size_t p_values_size);
81-
static EidosValue *GetProperty_Accelerated_tag(EidosObject **p_values, size_t p_values_size);
82-
static EidosValue *GetProperty_Accelerated_genomicElementType(EidosObject **p_values, size_t p_values_size);
79+
static EidosValue *GetProperty_Accelerated_startPosition(EidosGlobalStringID p_property_id, EidosObject **p_values, size_t p_values_size);
80+
static EidosValue *GetProperty_Accelerated_endPosition(EidosGlobalStringID p_property_id, EidosObject **p_values, size_t p_values_size);
81+
static EidosValue *GetProperty_Accelerated_tag(EidosGlobalStringID p_property_id, EidosObject **p_values, size_t p_values_size);
82+
static EidosValue *GetProperty_Accelerated_genomicElementType(EidosGlobalStringID p_property_id, EidosObject **p_values, size_t p_values_size);
8383
};
8484

8585
// support stream output of GenomicElement, for debugging

core/genomic_element_type.cpp

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -301,8 +301,9 @@ EidosValue_SP GenomicElementType::GetProperty(EidosGlobalStringID p_property_id)
301301
}
302302
}
303303

304-
EidosValue *GenomicElementType::GetProperty_Accelerated_id(EidosObject **p_values, size_t p_values_size)
304+
EidosValue *GenomicElementType::GetProperty_Accelerated_id(EidosGlobalStringID p_property_id, EidosObject **p_values, size_t p_values_size)
305305
{
306+
#pragma unused (p_property_id)
306307
EidosValue_Int *int_result = (new (gEidosValuePool->AllocateChunk()) EidosValue_Int())->resize_no_initialize(p_values_size);
307308

308309
for (size_t value_index = 0; value_index < p_values_size; ++value_index)
@@ -315,8 +316,9 @@ EidosValue *GenomicElementType::GetProperty_Accelerated_id(EidosObject **p_value
315316
return int_result;
316317
}
317318

318-
EidosValue *GenomicElementType::GetProperty_Accelerated_tag(EidosObject **p_values, size_t p_values_size)
319+
EidosValue *GenomicElementType::GetProperty_Accelerated_tag(EidosGlobalStringID p_property_id, EidosObject **p_values, size_t p_values_size)
319320
{
321+
#pragma unused (p_property_id)
320322
EidosValue_Int *int_result = (new (gEidosValuePool->AllocateChunk()) EidosValue_Int())->resize_no_initialize(p_values_size);
321323

322324
for (size_t value_index = 0; value_index < p_values_size; ++value_index)

core/genomic_element_type.h

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -102,8 +102,8 @@ class GenomicElementType : public EidosDictionaryUnretained
102102
EidosValue_SP ExecuteMethod_setMutationMatrix(EidosGlobalStringID p_method_id, const std::vector<EidosValue_SP> &p_arguments, EidosInterpreter &p_interpreter);
103103

104104
// Accelerated property access; see class EidosObject for comments on this mechanism
105-
static EidosValue *GetProperty_Accelerated_id(EidosObject **p_values, size_t p_values_size);
106-
static EidosValue *GetProperty_Accelerated_tag(EidosObject **p_values, size_t p_values_size);
105+
static EidosValue *GetProperty_Accelerated_id(EidosGlobalStringID p_property_id, EidosObject **p_values, size_t p_values_size);
106+
static EidosValue *GetProperty_Accelerated_tag(EidosGlobalStringID p_property_id, EidosObject **p_values, size_t p_values_size);
107107
};
108108

109109
// support stream output of GenomicElementType, for debugging

core/haplosome.cpp

Lines changed: 10 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -481,8 +481,9 @@ EidosValue_SP Haplosome::GetProperty(EidosGlobalStringID p_property_id)
481481
}
482482
}
483483

484-
EidosValue *Haplosome::GetProperty_Accelerated_haplosomePedigreeID(EidosObject **p_values, size_t p_values_size)
484+
EidosValue *Haplosome::GetProperty_Accelerated_haplosomePedigreeID(EidosGlobalStringID p_property_id, EidosObject **p_values, size_t p_values_size)
485485
{
486+
#pragma unused (p_property_id)
486487
EidosValue_Int *int_result = (new (gEidosValuePool->AllocateChunk()) EidosValue_Int())->resize_no_initialize(p_values_size);
487488
size_t value_index = 0;
488489

@@ -508,8 +509,9 @@ EidosValue *Haplosome::GetProperty_Accelerated_haplosomePedigreeID(EidosObject *
508509
return int_result;
509510
}
510511

511-
EidosValue *Haplosome::GetProperty_Accelerated_chromosomeSubposition(EidosObject **p_values, size_t p_values_size)
512+
EidosValue *Haplosome::GetProperty_Accelerated_chromosomeSubposition(EidosGlobalStringID p_property_id, EidosObject **p_values, size_t p_values_size)
512513
{
514+
#pragma unused (p_property_id)
513515
EidosValue_Int *int_result = (new (gEidosValuePool->AllocateChunk()) EidosValue_Int())->resize_no_initialize(p_values_size);
514516

515517
for (size_t value_index = 0; value_index < p_values_size; ++value_index)
@@ -523,8 +525,9 @@ EidosValue *Haplosome::GetProperty_Accelerated_chromosomeSubposition(EidosObject
523525
return int_result;
524526
}
525527

526-
EidosValue *Haplosome::GetProperty_Accelerated_isNullHaplosome(EidosObject **p_values, size_t p_values_size)
528+
EidosValue *Haplosome::GetProperty_Accelerated_isNullHaplosome(EidosGlobalStringID p_property_id, EidosObject **p_values, size_t p_values_size)
527529
{
530+
#pragma unused (p_property_id)
528531
EidosValue_Logical *logical_result = (new (gEidosValuePool->AllocateChunk()) EidosValue_Logical())->resize_no_initialize(p_values_size);
529532

530533
for (size_t value_index = 0; value_index < p_values_size; ++value_index)
@@ -537,8 +540,9 @@ EidosValue *Haplosome::GetProperty_Accelerated_isNullHaplosome(EidosObject **p_v
537540
return logical_result;
538541
}
539542

540-
EidosValue *Haplosome::GetProperty_Accelerated_tag(EidosObject **p_values, size_t p_values_size)
543+
EidosValue *Haplosome::GetProperty_Accelerated_tag(EidosGlobalStringID p_property_id, EidosObject **p_values, size_t p_values_size)
541544
{
545+
#pragma unused (p_property_id)
542546
EidosValue_Int *int_result = (new (gEidosValuePool->AllocateChunk()) EidosValue_Int())->resize_no_initialize(p_values_size);
543547

544548
for (size_t value_index = 0; value_index < p_values_size; ++value_index)
@@ -575,8 +579,9 @@ void Haplosome::SetProperty(EidosGlobalStringID p_property_id, const EidosValue
575579
}
576580
}
577581

578-
void Haplosome::SetProperty_Accelerated_tag(EidosObject **p_values, size_t p_values_size, const EidosValue &p_source, size_t p_source_size)
582+
void Haplosome::SetProperty_Accelerated_tag(EidosGlobalStringID p_property_id, EidosObject **p_values, size_t p_values_size, const EidosValue &p_source, size_t p_source_size)
579583
{
584+
#pragma unused (p_property_id)
580585
Individual::s_any_haplosome_tag_set_ = true;
581586

582587
// SLiMCastToUsertagTypeOrRaise() is a no-op at present

core/haplosome.h

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -437,13 +437,13 @@ class Haplosome : public EidosObject
437437
EidosValue_SP ExecuteMethod_sumOfMutationsOfType(EidosGlobalStringID p_method_id, const std::vector<EidosValue_SP> &p_arguments, EidosInterpreter &p_interpreter);
438438

439439
// Accelerated property access; see class EidosObject for comments on this mechanism
440-
static EidosValue *GetProperty_Accelerated_haplosomePedigreeID(EidosObject **p_values, size_t p_values_size);
441-
static EidosValue *GetProperty_Accelerated_chromosomeSubposition(EidosObject **p_values, size_t p_values_size);
442-
static EidosValue *GetProperty_Accelerated_isNullHaplosome(EidosObject **p_values, size_t p_values_size);
443-
static EidosValue *GetProperty_Accelerated_tag(EidosObject **p_values, size_t p_values_size);
440+
static EidosValue *GetProperty_Accelerated_haplosomePedigreeID(EidosGlobalStringID p_property_id, EidosObject **p_values, size_t p_values_size);
441+
static EidosValue *GetProperty_Accelerated_chromosomeSubposition(EidosGlobalStringID p_property_id, EidosObject **p_values, size_t p_values_size);
442+
static EidosValue *GetProperty_Accelerated_isNullHaplosome(EidosGlobalStringID p_property_id, EidosObject **p_values, size_t p_values_size);
443+
static EidosValue *GetProperty_Accelerated_tag(EidosGlobalStringID p_property_id, EidosObject **p_values, size_t p_values_size);
444444

445445
// Accelerated property writing; see class EidosObject for comments on this mechanism
446-
static void SetProperty_Accelerated_tag(EidosObject **p_values, size_t p_values_size, const EidosValue &p_source, size_t p_source_size);
446+
static void SetProperty_Accelerated_tag(EidosGlobalStringID p_property_id, EidosObject **p_values, size_t p_values_size, const EidosValue &p_source, size_t p_source_size);
447447

448448
friend class Haplosome_Class;
449449

0 commit comments

Comments
 (0)