fix crash when copy'ing latent plugins
[ardour.git] / libs / midi++2 / midi++ / port.h
index a915320fa366bc3c6ea199cb9a465e23e95bb949..02cc340194b89f3a81be9dff8a85013b595c9816 100644 (file)
@@ -1,5 +1,5 @@
 /*
-    Copyright (C) 1998-2010 Paul Barton-Davis 
+    Copyright (C) 1998-2010 Paul Barton-Davis
     This program is free software; you can redistribute it and/or modify
     it under the terms of the GNU General Public License as published by
     the Free Software Foundation; either version 2 of the License, or
@@ -22,8 +22,6 @@
 #include <string>
 #include <iostream>
 
-#include <jack/types.h>
-
 #include <pthread.h>
 
 #include "pbd/xml++.h"
@@ -33,6 +31,7 @@
 #include "pbd/signals.h"
 #include "pbd/ringbuffer.h"
 
+#include "midi++/libmidi_visibility.h"
 #include "midi++/types.h"
 #include "midi++/parser.h"
 
@@ -41,13 +40,13 @@ namespace MIDI {
 class Channel;
 class PortRequest;
 
-class Port {
+class LIBMIDIPP_API Port {
   public:
        enum Flags {
-               IsInput = JackPortIsInput,
-               IsOutput = JackPortIsOutput,
+               IsInput = 0x1,  /* MUST MATCH JACK's JackPortIsInput */
+               IsOutput = 0x2, /* MUST MATCH JACK's JackPortIsOutput */
        };
-       
+
        Port (std::string const &, Flags);
        Port (const XMLNode&);
        virtual ~Port ();
@@ -73,10 +72,10 @@ class Port {
        /** block until the output FIFO used by non-process threads
         * is empty, checking every @a check_interval_usecs usecs
         * for current status. Not to be called by a thread that
-        * executes any part of a JACK process callback (will 
+        * executes any part of a JACK process callback (will
         * simply return immediately in that situation).
         */
-       virtual void drain (int /* check_interval_usecs */) {}
+       virtual void drain (int /* check_interval_usecs */, int /* total_usecs_to_wait */) {}
 
        /** Write a message to port.
         * @return true on success.
@@ -84,7 +83,7 @@ class Port {
         */
        int midimsg (byte *msg, size_t len, timestamp_t timestamp) {
                return !(write (msg, len, timestamp) == (int) len);
-       } 
+       }
 
        virtual void parse (framecnt_t timestamp) = 0;
 
@@ -93,18 +92,18 @@ class Port {
        /* select(2)/poll(2)-based I/O */
 
        /** Get the file descriptor for port.
-        * @return File descriptor, or -1 if not selectable. 
+        * @return File descriptor, or -1 if not selectable.
         */
        virtual int selectable () const = 0;
 
-       Channel *channel (channel_t chn) { 
+       Channel *channel (channel_t chn) {
                return _channel[chn&0x7F];
        }
-       
+
        Parser* parser () {
                return _parser;
        }
-       
+
        const char *name () const   { return _tagname.c_str(); }
        bool   ok ()   const        { return _ok; }
 
@@ -140,9 +139,9 @@ class Port {
        void init (std::string const &, Flags);
 };
 
-struct PortSet {
+struct LIBMIDIPP_API PortSet {
     PortSet (std::string str) : owner (str) { }
-    
+
     std::string owner;
     std::list<XMLNode> ports;
 };