@@ -59,7 +59,7 @@ struct Value final {
5959    } u;
6060
6161    std::unique_ptr<api::vTensor> as_tensor;
62-     api::StagingBuffer as_staging;
62+     std::unique_ptr< api::StagingBuffer>  as_staging;
6363    TensorRef as_tensorref;
6464
6565    std::vector<int64_t > as_int_list;
@@ -73,7 +73,7 @@ struct Value final {
7373
7474    std::string as_string;
7575
76-     SymInt as_symint;
76+     std::unique_ptr< SymInt>  as_symint;
7777
7878    Payload () : u () {}
7979    //  NOLINTNEXTLINE
@@ -117,9 +117,7 @@ struct Value final {
117117      CASE_MOVE_TRIVIALLY_COPYABLE_TYPE (TypeTag::INT, as_int);
118118      CASE_MOVE_TRIVIALLY_COPYABLE_TYPE (TypeTag::DOUBLE, as_double);
119119      CASE_MOVE_TRIVIALLY_COPYABLE_TYPE (TypeTag::BOOL, as_bool);
120-       //  Tensor adjacent types
121-       CASE_MOVE_MOVEABLE_TYPE (
122-           TypeTag::STAGING, api::StagingBuffer, as_staging, StagingBuffer);
120+       //  Tensor adjacent type
123121      CASE_MOVE_MOVEABLE_TYPE (
124122          TypeTag::TENSORREF, TensorRef, as_tensorref, TensorRef);
125123      //  Scalar lists
@@ -134,9 +132,12 @@ struct Value final {
134132          TypeTag::VALUELIST, std::vector<ValueRef>, as_value_list, vector);
135133      CASE_MOVE_MOVEABLE_TYPE (
136134          TypeTag::STRING, std::string, as_string, basic_string);
137-       CASE_MOVE_MOVEABLE_TYPE (TypeTag::SYMINT, SymInt, as_symint, SymInt);
138135      //  Tensor type
139136      CASE_MOVE_UNIQUE_PTR_TYPE (TypeTag::TENSOR, as_tensor);
137+       //  Small tensor adjacent types
138+       CASE_MOVE_UNIQUE_PTR_TYPE (TypeTag::STAGING, as_staging);
139+       //  Large tensor adjacent types
140+       CASE_MOVE_UNIQUE_PTR_TYPE (TypeTag::SYMINT, as_symint);
140141
141142      case  TypeTag::NONE:
142143        clearToNone ();
@@ -163,9 +164,6 @@ struct Value final {
163164
164165  ~Value () {
165166    switch  (tag) {
166-       case  TypeTag::STAGING:
167-         payload.as_staging .~StagingBuffer ();
168-         break ;
169167      case  TypeTag::TENSORREF:
170168        payload.as_tensorref .~TensorRef ();
171169        break ;
@@ -184,8 +182,11 @@ struct Value final {
184182      case  TypeTag::STRING:
185183        payload.as_string .~basic_string ();
186184        break ;
185+       case  TypeTag::STAGING:
186+         payload.as_staging .reset ();
187+         break ;
187188      case  TypeTag::SYMINT:
188-         payload.as_symint .~SymInt ();
189+         payload.as_symint .reset ();
189190        break ;
190191      case  TypeTag::TENSOR:
191192        payload.as_tensor .reset ();
@@ -258,12 +259,6 @@ struct Value final {
258259    return  payload.member_name ;                             \
259260  }
260261
261-   SUPPORT_TRIVIALLY_MOVEABLE_TYPE (
262-       api::StagingBuffer,
263-       Staging,
264-       TypeTag::STAGING,
265-       as_staging);
266- 
267262  SUPPORT_TRIVIALLY_MOVEABLE_TYPE (
268263      TensorRef,
269264      TensorRef,
@@ -300,8 +295,6 @@ struct Value final {
300295      TypeTag::STRING,
301296      as_string);
302297
303-   SUPPORT_TRIVIALLY_MOVEABLE_TYPE (SymInt, SymInt, TypeTag::SYMINT, as_symint);
304- 
305298#undef  SUPPORT_TRIVIALLY_MOVEABLE_TYPE
306299
307300#define  SUPPORT_UNIQUE_PTR_TYPE (type, type_name, type_tag, member_name ) \
@@ -330,6 +323,14 @@ struct Value final {
330323
331324  SUPPORT_UNIQUE_PTR_TYPE (api::vTensor, Tensor, TypeTag::TENSOR, as_tensor);
332325
326+   SUPPORT_UNIQUE_PTR_TYPE (
327+       api::StagingBuffer,
328+       Staging,
329+       TypeTag::STAGING,
330+       as_staging);
331+ 
332+   SUPPORT_UNIQUE_PTR_TYPE (SymInt, SymInt, TypeTag::SYMINT, as_symint);
333+ 
333334#undef  SUPPORT_UNIQUE_PTR_TYPE
334335
335336 private: 
0 commit comments