////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// Copyright (c) Qualcomm Technologies, Inc. and/or its subsidiaries.
// All Rights Reserved.
// Confidential and Proprietary - Qualcomm Technologies, Inc.
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/// THIS IS AUTO-GENERATED CODE.  PLEASE DO NOT EDIT (File bug reports against tools).
///
/// Auto-generated by: Parameter Parser V5.5.1 (2411131018)
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/// @file  parametermodule.h
/// @brief Auto-generated Chromatix parameter file
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

#ifndef PARAMETERMODULE_H
#define PARAMETERMODULE_H

#include "parametertypes.h"
#include "parameterfilesymboltable.h"

class ParameterSetManager;
class DefaultModule;

class ParameterModule
{
public:
    ParameterModule(
        const CHAR* const   name,
        const VersionUnion& version,
        ModuleData* const   moduleData);

    ParameterModule(
        const CHAR* const name,
        UINT16 const      major,
        UINT16 const      minor,
        UINT32 const      patch,
        ModuleData* const moduleData);

    virtual ~ParameterModule();

    virtual ParameterModule* Create(
        ModuleData* const moduleData,
        DefaultModule* const defModule) const = 0;

    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    /// Release this module's reference
    /// Module references are added automatically when SetManager::GetModule is called. Once a scenario mode has no
    /// referenced modules, it can be unloaded
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    void Release();

    UINT32 GetReferenceCount();

    virtual bool LoadModule(
        ParameterFileSymbolTable* const table) = 0;

    virtual void UnloadModule() = 0;

    virtual bool GetValue(
        const CHAR* const /*__path*/,
        CHAR* const       /*__value*/,
        UINT32 const      /*__size*/)
    {
        return false;
    }

    virtual bool SetValue(
        const CHAR* const /*__path*/,
        const CHAR* const /*__value*/)
    {
        return false;
    }

    virtual bool GetInfo(
        const CHAR* const           /*__path*/,
        PList<ParameterParserInfo>& /*__info*/)
    {
        return false;
    }

    CHAR*        Name;
    CHAR*        Type;
    VersionUnion Version;
    ModeUnion    Mode;
    ModuleData*  Data;
    bool         Loaded;   // Loaded flag
    UINT32       Modified; // Total number of times this module has been modified (loaded from file or changed via Live Tuning SetValue)
};

#endif
