AutoMappingByOpFnDynamic
========================

#### 函数功能

动态输入/输出算子的自动映射回调函数。

#### 函数原型

Status AutoMappingByOpFnDynamic(const ge::Operator &op\_src, ge::Operator &op, const std::vector<DynamicInputOutputInfo> &dynamic\_name\_attr\_value)

#### 参数说明

| 参数 | 输入/输出 | 说明 |
| :-- | :-- | :-- |
| op\_src | 输入 | 
转换前原始模型中的算子，包含原始模型中算子的属性。

关于Operator类，请参见[Operator](https://developer.huawei.com/consumer/cn/doc/harmonyos-guides/cannkit-operator-construction-and-destructor)。

 |
| op | 输入 | 

适配AI处理器的算子。

关于Operator类，请参见[Operator](https://developer.huawei.com/consumer/cn/doc/harmonyos-guides/cannkit-operator-construction-and-destructor)。

 |
| dynamic\_name\_attr\_value | 输入 | 描述动态输入输出实际个数，**DynamicInputOutputInfo**数据结构请参见[DynamicInputOutputInfo数据结构说明](#dynamicinputoutputinfo数据结构说明)。 |

#### DynamicInputOutputInfo数据结构说明

constexpr int64\_t kMaxNameLength = 1048576; // 1M
enum DynamicType : int16\_t {
  kInvalid = 0,
  kInput = 1,
  kOutput = 2
};
struct DynamicInputOutputInfo {
  DynamicType type; // input/output
  const char\_t \*port\_name;
  int64\_t port\_name\_len;
  const char\_t \*attr\_name;
  int64\_t attr\_name\_len;
  DynamicInputOutputInfo(const DynamicType type\_instance, const char\_t \*const port\_name\_instance,
                         const int64\_t port\_name\_len\_instance, const char\_t \*const attr\_name\_instance,
                         const int64\_t attr\_name\_len\_instance)
      : type(type\_instance), port\_name(port\_name\_instance), port\_name\_len(port\_name\_len\_instance),
        attr\_name(attr\_name\_instance), attr\_name\_len(attr\_name\_len\_instance) {}
  DynamicInputOutputInfo() : DynamicInputOutputInfo(kInvalid, nullptr, 0L, nullptr, 0L) {}
};

| 参数 | 说明 |
| :-- | :-- |
| type | 
指定是动态输入或输出。

0：无效值

1：输入

2：输出

 |
| port\_name | 端口名字，输入或者输出的Name。 |
| port\_name\_len | 端口名字长度，最大长度为kMaxNameLength。 |
| attr\_name | 属性名字。 |
| attr\_name\_len | 属性名字长度，最大长度为kMaxNameLength。 |

#### 调用示例

Status QueueDequeueUpToMapping(const  ge::Operator& op\_src, ge::Operator& op) {
vector<DynamicInputOutputInfo> dynamic\_name\_attr\_value;
string port\_name = "components";
string attr\_name = "component\_types";
DynamicInputOutputInfo name\_attr(kOutput, port\_name.c\_str(), port\_name.size(), attr\_name.c\_str(), attr\_name.size());
dynamic\_name\_attr\_value.push\_back(name\_attr);
AutoMappingByOpFnDynamic(op\_src, op, dynamic\_name\_attr\_value);
return SUCCESS;
}
 
REGISTER\_CUSTOM\_OP("QueueDequeueUpTo")
.FrameworkType(TENSORFLOW)
.OriginOpType("QueueDequeueUpToV2")
.ParseParamsByOperatorFn(QueueDequeueUpToMapping)
.ImplyType(ImplyType::AI\_CPU);