11#include " hook_wrapper.hpp"
2- #include " context_wrappers.hpp"
32
43#include < launchdarkly/bindings/c/data/evaluation_detail.h>
54#include < launchdarkly/bindings/c/value.h>
87#include < cassert>
98
109// Helper macros for type conversions
11- #define AS_EVAL_SERIES_CONTEXT_WRAPPER (ptr ) \
12- (reinterpret_cast <LDServerSDKEvaluationSeriesContext>(ptr))
10+ #define AS_EVAL_SERIES_CONTEXT (ptr ) \
11+ (reinterpret_cast <LDServerSDKEvaluationSeriesContext>(const_cast <launchdarkly::server_side::hooks::EvaluationSeriesContext*>( ptr) ))
1312
1413#define AS_EVAL_SERIES_DATA (ptr ) \
1514 (reinterpret_cast <LDServerSDKEvaluationSeriesData>( \
1615 &const_cast <launchdarkly::server_side::hooks::EvaluationSeriesData&>(ptr)))
1716
18- #define AS_TRACK_SERIES_CONTEXT_WRAPPER (ptr ) \
19- (reinterpret_cast <LDServerSDKTrackSeriesContext>(ptr))
17+ #define AS_TRACK_SERIES_CONTEXT (ptr ) \
18+ (reinterpret_cast <LDServerSDKTrackSeriesContext>(const_cast <launchdarkly::server_side::hooks::TrackSeriesContext*>( ptr) ))
2019
2120#define AS_EVAL_DETAIL (ptr ) \
2221 (reinterpret_cast <LDEvalDetail>( \
@@ -48,20 +47,17 @@ hooks::EvaluationSeriesData CHookWrapper::BeforeEvaluation(
4847 return data;
4948 }
5049
51- // Create wrapper on stack - holds context reference + default value copy
52- EvaluationSeriesContextWrapper wrapper (series_context);
53-
54- // Convert to C types
50+ // Convert to C types - cast context directly
5551 const auto c_series_context =
56- AS_EVAL_SERIES_CONTEXT_WRAPPER (&wrapper );
52+ AS_EVAL_SERIES_CONTEXT (&series_context );
5753
5854 // Create a heap-allocated copy of the data to pass to C callback
5955 // This gives the callback ownership that it can return or modify
6056 const auto c_data_input =
6157 reinterpret_cast <LDServerSDKEvaluationSeriesData>(
6258 new hooks::EvaluationSeriesData (data));
6359
64- // Call the C callback - wrapper stays alive for entire call
60+ // Call the C callback - context stays alive for entire call
6561 LDServerSDKEvaluationSeriesData result_data =
6662 before_evaluation_ (c_series_context, c_data_input, user_data_);
6763
@@ -95,12 +91,9 @@ hooks::EvaluationSeriesData CHookWrapper::AfterEvaluation(
9591 return data;
9692 }
9793
98- // Create wrapper on stack - holds context reference + default value copy
99- EvaluationSeriesContextWrapper wrapper (series_context);
100-
101- // Convert to C types
94+ // Convert to C types - cast context directly
10295 const auto c_series_context =
103- AS_EVAL_SERIES_CONTEXT_WRAPPER (&wrapper );
96+ AS_EVAL_SERIES_CONTEXT (&series_context );
10497
10598 // Create a heap-allocated copy of the data to pass to C callback
10699 // This gives the callback ownership that it can return or modify
@@ -110,7 +103,7 @@ hooks::EvaluationSeriesData CHookWrapper::AfterEvaluation(
110103
111104 const auto c_detail = AS_EVAL_DETAIL (&detail);
112105
113- // Call the C callback - wrapper stays alive for entire call
106+ // Call the C callback - context stays alive for entire call
114107 LDServerSDKEvaluationSeriesData result_data =
115108 after_evaluation_ (c_series_context, c_data_input, c_detail, user_data_);
116109
@@ -142,14 +135,11 @@ void CHookWrapper::AfterTrack(
142135 return ;
143136 }
144137
145- // Create wrapper on stack - holds context reference
146- TrackSeriesContextWrapper wrapper (series_context);
147-
148- // Convert to C type
138+ // Convert to C type - cast context directly
149139 const auto c_series_context =
150- AS_TRACK_SERIES_CONTEXT_WRAPPER (&wrapper );
140+ AS_TRACK_SERIES_CONTEXT (&series_context );
151141
152- // Call the C callback - wrapper stays alive for entire call
142+ // Call the C callback - context stays alive for entire call
153143 after_track_ (c_series_context, user_data_);
154144}
155145
0 commit comments