chenlh
2026-01-29 1ac2340f684bf8c0b05fb571f5994b0755050671
src/param_ctrl.h
@@ -14,7 +14,7 @@
//预设参数解析用
typedef u32 (*ParamCtrl_fn)(IModule* m, void* handle, int &plen);
//参数控制用
typedef u32 (*Ctrl_fn)(IModule* m, u32 pID, s16* val_c);
typedef u32 (*Ctrl_fn)(IModule* m, u32 pID, s16* val_c, u32 num, void* param);
class ParamEntry {
private:
@@ -23,11 +23,11 @@
   Ctrl_fn ctrl;
public:
   ParamCtrl_fn GetParamEntry(){
   ParamCtrl_fn GetParamEntry() const {
      return param;
   }
   Ctrl_fn GetCtrlEntry(){
   Ctrl_fn GetCtrlEntry() const {
      return ctrl;
   }
   ParamEntry() : param(nullptr), ctrl(nullptr) {}
@@ -40,24 +40,57 @@
class param_ctrl_t{
protected:
   std::map<u32, ParamEntry> mctrl_list;
public:
   ParamCtrl_fn GetParamEntry(u32 mtype)
   {
      if(mctrl_list.count(mtype))
         return mctrl_list[mtype].GetParamEntry();
      else
         return NULL;
   }
    std::map<u32, ParamEntry> mctrl_list;
   Ctrl_fn GetCtrlEntry(u32 mtype)
   {
      if(mctrl_list.count(mtype))
         return mctrl_list[mtype].GetCtrlEntry();
      else
      return NULL;
   }
public:
    // 返回pair避免重复查找
    std::pair<ParamCtrl_fn, Ctrl_fn> GetEntries(u32 mtype) const
    {
        auto it = mctrl_list.find(mtype);
        if(it != mctrl_list.end()) {
            return {it->second.GetParamEntry(), it->second.GetCtrlEntry()};
        }
        return {nullptr, nullptr};
    }
    ParamCtrl_fn GetParamEntry(u32 mtype) const
    {
        auto it = mctrl_list.find(mtype);
        return (it != mctrl_list.end()) ? it->second.GetParamEntry() : nullptr;
    }
    Ctrl_fn GetCtrlEntry(u32 mtype) const
    {
        auto it = mctrl_list.find(mtype);
        return (it != mctrl_list.end()) ? it->second.GetCtrlEntry() : nullptr;
    }
    // 检查是否存在
    bool HasEntry(u32 mtype) const
    {
        return mctrl_list.find(mtype) != mctrl_list.end();
    }
};
//class param_ctrl_t{
//protected:
//   std::map<u32, ParamEntry> mctrl_list;
//public:
//   ParamCtrl_fn GetParamEntry(u32 mtype)
//   {
//      if(mctrl_list.count(mtype))
//         return mctrl_list[mtype].GetParamEntry();
//      else
//         return NULL;
//   }
//
//   Ctrl_fn GetCtrlEntry(u32 mtype)
//   {
//      if(mctrl_list.count(mtype))
//         return mctrl_list[mtype].GetCtrlEntry();
//      else
//         return NULL;
//   }
//};