Skip to content

File NodeMap.h

File List > include > SpinGenApi > NodeMap.h

Go to the documentation of this file

//=============================================================================
// Copyright (c) 2026 FLIR Integrated Imaging Solutions, Inc. All Rights Reserved.
//
// This software is the confidential and proprietary information of FLIR
// Integrated Imaging Solutions, Inc. ("Confidential Information"). You
// shall not disclose such Confidential Information and shall use it only in
// accordance with the terms of the license agreement you entered into
// with FLIR Integrated Imaging Solutions, Inc. (FLIR).
//
// FLIR MAKES NO REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE
// SOFTWARE, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE
// IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR
// PURPOSE, OR NON-INFRINGEMENT. FLIR SHALL NOT BE LIABLE FOR ANY DAMAGES
// SUFFERED BY LICENSEE AS A RESULT OF USING, MODIFYING OR DISTRIBUTING
// THIS SOFTWARE OR ITS DERIVATIVES.
//=============================================================================

#ifndef SPINNAKER_GENAPI_NODEMAP_H
#define SPINNAKER_GENAPI_NODEMAP_H

#include "GCString.h"
#include "GCStringVector.h"

#include "Types.h"
#include "INodeMap.h"
#include "IDeviceInfo.h"
#include "Node.h"
#include "Container.h"
#include "Synch.h"
#include "ValueNode.h"
#include "EnumNodeT.h"
#include "EnumNode.h"
#include "EnumEntryNode.h"
#include "PortNode.h"
#include "IntegerNode.h"
#include "FloatNode.h"
#include "StringNode.h"
#include "BooleanNode.h"
#include "Pointer.h"

#include <map>
#include <memory>
#include <atomic>
#include <cstdint>

#ifdef _WIN32
#pragma warning(push)
#pragma warning(disable : 4251) // XXX needs to have dll-interface to be used by clients of class YYY
#endif

namespace Spinnaker
{
    namespace GenApi
    {
        class AutoPollController;
        class PortAdapter;

        class SPINNAKER_API NodeMap : public virtual INodeMap, public virtual IDeviceInfo
        {
          public:
            NodeMap(GenICam::gcstring DeviceName = "Device");

            virtual ~NodeMap();

            void Destroy();

            void LoadXMLFromFile(GenICam::gcstring FileName);

            void LoadXMLFromZIPFile(GenICam::gcstring ZipFileName);

            void LoadXMLFromZIPData(const void* zipData, size_t zipSize);

            void LoadXMLFromFileInject(GenICam::gcstring TargetFileName, GenICam::gcstring InjectFileName);

            void LoadXMLFromString(const GenICam::gcstring& XMLData);

            void LoadXMLFromStringInject(
                const GenICam::gcstring& TargetXMLDataconst,
                const GenICam::gcstring& InjectXMLData);

            virtual void GetSupportedSchemaVersions(GenICam::gcstring_vector& SchemaVersions);

            virtual GenICam::gcstring GetDeviceName();

            virtual void Poll(int64_t ElapsedTime);

            virtual void EnableAutoPoll(int64_t ElapsedTime);

            virtual void DisableAutoPoll();

            static bool ClearXMLCache();

            //----------------------------------------------------------------
            // INodeMap
            //----------------------------------------------------------------

            virtual void GetNodes(NodeList_t& Nodes) const;

            virtual INode* GetNode(const GenICam::gcstring& key) const;

            virtual void InvalidateNodes() const;

            virtual bool Connect(IPort* pPort, const GenICam::gcstring& PortName) const;

            virtual bool Connect(IPort* pPort) const;

            virtual CLock& GetLock() const;

            virtual uint64_t GetNumNodes() const;

            // static std::shared_ptr<INode> CreateINode(::GenApi::INode* pNode);

            INodeMap* _Ptr;

            void* GetNodeMapHandle() const;

            // implementation of IDeviceInfo
            virtual GenICam::gcstring GetModelName();

            virtual GenICam::gcstring GetVendorName();

            virtual GenICam::gcstring GetToolTip();

            virtual GenICam::gcstring GetStandardNameSpace();

            virtual void GetGenApiVersion(GenICam::Version_t& Version, uint16_t& Build);

            virtual void GetSchemaVersion(GenICam::Version_t& Version);

            virtual void GetDeviceVersion(GenICam::Version_t& Version);

            virtual GenICam::gcstring GetProductGuid();

            virtual GenICam::gcstring GetVersionGuid();

          private:
            NodeMap(const NodeMap&);
            NodeMap& operator=(const NodeMap&) = delete;

            void PopulateNodeMap(void* pNodeMap, std::map<GenICam::gcstring, std::shared_ptr<INode>>& outMap);

            void* m_nodeMapRef;

            mutable CLock* m_pLock;

            mutable std::map<GenICam::gcstring, std::shared_ptr<PortAdapter>> m_portAdapters;

            mutable std::map<GenICam::gcstring, std::shared_ptr<INode>> m_nodeMap;

            std::unique_ptr<AutoPollController> m_autoPoll;
            int64_t m_elapsedTime = 0;
        };

        typedef NodeMap CNodeMapRef;

    } // namespace GenApi
} // namespace Spinnaker

#ifdef _WIN32
#pragma warning(pop)
#endif

#endif // ifndef SPINNAKER_GENAPI_NODEMAP_H