Skip to content

File NodeMap.h

File List > GenApiNet > NodeMap.h

Go to the documentation of this file

//-----------------------------------------------------------------------------
//  (c) 2007 by STEMMER IMAGING
//  Author:  Sascha Dorenbeck
//  $Header:
//
//  License: This file is published under the license of the EMVA GenICam  Standard Group.
//  A text file describing the legal terms is included in  your installation as 'GenICam_license.pdf'.
//  If for some reason you are missing  this file please contact the EMVA or visit the website
//  (http://www.genicam.org) for a full copy.
//
//  THIS SOFTWARE IS PROVIDED BY THE EMVA GENICAM STANDARD GROUP "AS IS"
//  AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
//  THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
//  PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE EMVA GENICAM STANDARD  GROUP
//  OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,  SPECIAL,
//  EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT  LIMITED TO,
//  PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,  DATA, OR PROFITS;
//  OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY  THEORY OF LIABILITY,
//  WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT  (INCLUDING NEGLIGENCE OR OTHERWISE)
//  ARISING IN ANY WAY OUT OF THE USE  OF THIS SOFTWARE, EVEN IF ADVISED OF THE
//  POSSIBILITY OF SUCH DAMAGE.
//-----------------------------------------------------------------------------

#pragma once

#include "Node.h"
#include "DeviceInformation.h"
#include "../ManagedLogger.h"

namespace Spinnaker
{
    namespace GenApi
    {
        interface IDeviceInfo;
        interface INodeMap;
    }
}

namespace SpinnakerNET
{
    namespace GenApi
    {
        using namespace ::System;
        using namespace ::System::Collections::Generic;
        using namespace ::System::Runtime::InteropServices;

        ref class Port;

        public interface class INodeMap
            : public IDictionary<System::String^, INode^>
        {
            void __clrcall Connect(Port ^port);

            void __clrcall Connect(Port ^port, System::String ^name);

            generic <typename NodeType> where NodeType : SpinnakerNET::GenApi::INode
                NodeType __clrcall GetNode(System::String ^name);

            void __clrcall InvalidateNodes(void);

            void __clrcall Poll(__int64 elapsedTime);
        };

        namespace Helper
        {
            public ref class EnumerableFactory abstract
                : public System::Collections::IEnumerable
            {
                protected:
                    virtual System::Collections::Generic::IEnumerator<KeyValuePair<System::String^,SpinnakerNET::GenApi::INode^>> ^DoGetEnumerator() abstract;

                public:
                    virtual System::Collections::IEnumerator ^GetEnumerator() { return DoGetEnumerator(); }
            };

            public ref class NodeEnumerableFactory abstract
                : public EnumerableFactory
                  , public System::Collections::Generic::IEnumerable<KeyValuePair<System::String^,SpinnakerNET::GenApi::INode^>>
            {
                public:
                    virtual System::Collections::Generic::IEnumerator<KeyValuePair<System::String^,SpinnakerNET::GenApi::INode^>> ^GetEnumerator() new = System::Collections::Generic::IEnumerable<KeyValuePair<System::String^,SpinnakerNET::GenApi::INode^>>::GetEnumerator { return DoGetEnumerator(); }
            };
        }

        public ref class NodeMap
            : public Helper::NodeEnumerableFactory
              , public SpinnakerNET::GenApi::INodeMap
              , public SpinnakerNET::GenApi::IDeviceInfo
        {
#pragma region Ctor/Dtor
            public:
                __clrcall NodeMap(void);

                __clrcall !NodeMap(void);

                virtual __clrcall ~NodeMap(void);
#pragma endregion

#pragma region General Properties
            public:
                property bool Disposed
                {
                    bool __clrcall get(void) { return disposed; }
                    protected:
                    void __clrcall set(bool disposed) { this->disposed = disposed; }
                }
            public:

                property IntPtr Handle
                {
                    IntPtr __clrcall get(void);
                    void __clrcall set(IntPtr handle);
                }
#pragma endregion

#pragma region NodeMap Creation
            public:
                virtual void __clrcall LoadXMLFromFile(System::String ^filename);

                virtual void __clrcall LoadXMLFromString(System::String ^xml);
#pragma endregion

#pragma region INodeMap Interface
            public:
                virtual void __clrcall Connect(Port ^port);

                virtual void __clrcall Connect(Port ^port, System::String ^name);

                generic <typename NodeType> where NodeType : SpinnakerNET::GenApi::INode
                    virtual NodeType __clrcall GetNode(System::String ^name);

                virtual void __clrcall InvalidateNodes(void);

                virtual void __clrcall Poll(__int64 elapsedTime);
#pragma endregion

#pragma region IDictionary Interface
            public:
                virtual property SpinnakerNET::GenApi::INode ^ default [System::String^]
                {
                    INode ^ get(System::String ^key) sealed;
                    void set(System::String ^key, SpinnakerNET::GenApi::INode ^value) sealed;
                }

                virtual property ICollection<System::String^> ^ Keys
                {
                    ICollection<System::String^> ^ get(void) sealed;
                }

                virtual property ICollection<SpinnakerNET::GenApi::INode^> ^ Values
                {
                    ICollection<SpinnakerNET::GenApi::INode^> ^ get(void) sealed;
                }

                virtual void Add(System::String ^key, SpinnakerNET::GenApi::INode ^value) sealed;

                virtual bool ContainsKey(System::String ^key) sealed;

                virtual bool Remove(System::String ^key) sealed;

                virtual bool TryGetValue(System::String ^key, [OutAttribute] SpinnakerNET::GenApi::INode ^%value);

#pragma endregion

#pragma region ICollection Interface
            public:
                virtual property int Count
                {
                    int get() sealed;
                }

                virtual property bool IsReadOnly
                {
                    bool get() sealed;
                }

                virtual void Add(KeyValuePair<System::String^,SpinnakerNET::GenApi::INode^> item) sealed;

                virtual void Clear(void) sealed;

                virtual bool Contains(KeyValuePair<System::String^,SpinnakerNET::GenApi::INode^> item) sealed;

                virtual void CopyTo(array<KeyValuePair<System::String^,SpinnakerNET::GenApi::INode^>> ^target, int arrayIndex) sealed;

                virtual bool Remove(KeyValuePair<System::String^,SpinnakerNET::GenApi::INode^> item) sealed;

#pragma endregion

#pragma region EnumerableFactory Interface
            protected:
                virtual System::Collections::Generic::IEnumerator<KeyValuePair<System::String^,SpinnakerNET::GenApi::INode^>> ^DoGetEnumerator() override;
#pragma endregion

#pragma region IDeviceInfo Interface
            public:
                virtual property System::String ^ ModelName
                {
                    System::String ^ __clrcall get(void);
                }

                virtual property System::String ^ VendorName
                {
                    System::String ^ __clrcall get(void);
                }

                virtual property System::String ^ ToolTip
                {
                    System::String ^ __clrcall get(void);
                }

                virtual property System::String ^ StandardNameSpace
                {
                    System::String ^ __clrcall get(void);
                }

                virtual property SpinnakerNET::GenApi::Version ^ GenApiVersion
                {
                    SpinnakerNET::GenApi::Version ^ __clrcall get(void);
                }

                virtual property __int16 GenApiBuild
                {
                    __int16 __clrcall get(void);
                }

                virtual property SpinnakerNET::GenApi::Version ^ SchemaVersion
                {
                    SpinnakerNET::GenApi::Version ^ __clrcall get(void);
                }

                virtual property SpinnakerNET::GenApi::Version ^ DeviceVersion
                {
                    SpinnakerNET::GenApi::Version ^ __clrcall get(void);
                }

                virtual property System::String ^ ProductGuid
                {
                    System::String ^ get(void);
                }

                virtual property System::String ^ VersionGuid
                {
                    System::String ^ get(void);
                }
#pragma endregion

#pragma region Internal Methods
            private:
                void CheckStatus(void);

                void FillDictionary(void);
#pragma endregion

#pragma region Member Fields
            private:
                ::Spinnaker::GenApi::INodeMap * nodeMapHandle;

                ::Spinnaker::GenApi::IDeviceInfo *deviceInfo;

                ::Spinnaker::GenApi::CNodeMapRef * nodeMapPtr;

                bool disposed;

                Dictionary<System::String^,SpinnakerNET::GenApi::INode^> ^nodeDict;

                Dictionary<System::String^,Port^> ^ portDict;
#pragma endregion
        };
    }
}