annotate external/oscpack/osc/MessageMappingOscPacketListener.h @ 648:1c2a5868f23a

Fix memory leak in CARFAC. Also get rid of most uses of auto, which tend to hurt readability unless the type name is particularly long, especially when it masks pointers.
author ronw@google.com
date Tue, 11 Jun 2013 21:41:53 +0000
parents 0284d2152e17
children
rev   line source
tomwalters@509 1 /*
tomwalters@509 2 oscpack -- Open Sound Control packet manipulation library
tomwalters@509 3 http://www.audiomulch.com/~rossb/oscpack
tomwalters@509 4
tomwalters@509 5 Copyright (c) 2004-2005 Ross Bencina <rossb@audiomulch.com>
tomwalters@509 6
tomwalters@509 7 Permission is hereby granted, free of charge, to any person obtaining
tomwalters@509 8 a copy of this software and associated documentation files
tomwalters@509 9 (the "Software"), to deal in the Software without restriction,
tomwalters@509 10 including without limitation the rights to use, copy, modify, merge,
tomwalters@509 11 publish, distribute, sublicense, and/or sell copies of the Software,
tomwalters@509 12 and to permit persons to whom the Software is furnished to do so,
tomwalters@509 13 subject to the following conditions:
tomwalters@509 14
tomwalters@509 15 The above copyright notice and this permission notice shall be
tomwalters@509 16 included in all copies or substantial portions of the Software.
tomwalters@509 17
tomwalters@509 18 Any person wishing to distribute modifications to the Software is
tomwalters@509 19 requested to send the modifications to the original developer so that
tomwalters@509 20 they can be incorporated into the canonical version.
tomwalters@509 21
tomwalters@509 22 THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
tomwalters@509 23 EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
tomwalters@509 24 MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
tomwalters@509 25 IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR
tomwalters@509 26 ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF
tomwalters@509 27 CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
tomwalters@509 28 WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
tomwalters@509 29 */
tomwalters@509 30 #ifndef INCLUDED_MESSAGEMAPPINGOSCPACKETLISTENER_H
tomwalters@509 31 #define INCLUDED_MESSAGEMAPPINGOSCPACKETLISTENER_H
tomwalters@509 32
tomwalters@509 33 #include <string.h>
tomwalters@509 34 #include <map>
tomwalters@509 35
tomwalters@509 36 #include "OscPacketListener.h"
tomwalters@509 37
tomwalters@509 38
tomwalters@509 39
tomwalters@509 40 namespace osc{
tomwalters@509 41
tomwalters@509 42 template< class T >
tomwalters@509 43 class MessageMappingOscPacketListener : public OscPacketListener{
tomwalters@509 44 public:
tomwalters@509 45 typedef void (T::*function_type)(const osc::ReceivedMessage&, const IpEndpointName&);
tomwalters@509 46
tomwalters@509 47 protected:
tomwalters@509 48 void RegisterMessageFunction( const char *addressPattern, function_type f )
tomwalters@509 49 {
tomwalters@509 50 functions_.insert( std::make_pair( addressPattern, f ) );
tomwalters@509 51 }
tomwalters@509 52
tomwalters@509 53 virtual void ProcessMessage( const osc::ReceivedMessage& m,
tomwalters@509 54 const IpEndpointName& remoteEndpoint )
tomwalters@509 55 {
tomwalters@509 56 typename function_map_type::iterator i = functions_.find( m.AddressPattern() );
tomwalters@509 57 if( i != functions_.end() )
tomwalters@509 58 (dynamic_cast<T*>(this)->*(i->second))( m, remoteEndpoint );
tomwalters@509 59 }
tomwalters@509 60
tomwalters@509 61 private:
tomwalters@509 62 struct cstr_compare{
tomwalters@509 63 bool operator()( const char *lhs, const char *rhs ) const
tomwalters@509 64 { return strcmp( lhs, rhs ) < 0; }
tomwalters@509 65 };
tomwalters@509 66
tomwalters@509 67 typedef std::map<const char*, function_type, cstr_compare> function_map_type;
tomwalters@509 68 function_map_type functions_;
tomwalters@509 69 };
tomwalters@509 70
tomwalters@509 71 } // namespace osc
tomwalters@509 72
tomwalters@509 73 #endif /* INCLUDED_MESSAGEMAPPINGOSCPACKETLISTENER_H */