Wiselib
wiselib.testing/algorithms/routing/lazy/lazy_message.h
Go to the documentation of this file.
00001 /***************************************************************************
00002 ** This file is part of the generic algorithm library Wiselib.           **
00003 ** Copyright (C) 2008,2009 by the Wisebed (www.wisebed.eu) project.      **
00004 **                                                                       **
00005 ** The Wiselib is free software: you can redistribute it and/or modify   **
00006 ** it under the terms of the GNU Lesser General Public License as        **
00007 ** published by the Free Software Foundation, either version 3 of the    **
00008 ** License, or (at your option) any later version.                       **
00009 **                                                                       **
00010 ** The Wiselib is distributed in the hope that it will be useful,        **
00011 ** but WITHOUT ANY WARRANTY; without even the implied warranty of        **
00012 ** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the         **
00013 ** GNU Lesser General Public License for more details.                   **
00014 **                                                                       **
00015 ** You should have received a copy of the GNU Lesser General Public      **
00016 ** License along with the Wiselib.                                       **
00017 ** If not, see <http://www.gnu.org/licenses/>.                           **
00018 ***************************************************************************/
00019 #ifndef __LAZY_MSG_H__
00020 #define __LAZY_MSG_H__
00021 
00022 namespace wiselib
00023 {
00024    template<typename Os_P,
00025       typename Radio_P>
00026    class LazyMessageType
00027    {
00028    public:
00029       typedef Os_P Os;
00030       typedef Radio_P Radio;
00031       typedef typename Radio::block_data_t block_data_t;
00032       typedef typename Radio::size_t size_t;
00033       typedef typename Radio::message_id_t message_id_t;
00034       // --------------------------------------------------------------------
00035       inline LazyMessageType();
00036       // --------------------------------------------------------------------
00037       inline message_id_t msg_id()
00038       {
00039          return read<Os, block_data_t, message_id_t>( buffer );
00040       };
00041       // --------------------------------------------------------------------
00042       inline void set_msg_id( message_id_t id )
00043       {
00044          write<Os, block_data_t, message_id_t>( buffer, id ); 
00045       }
00046       // --------------------------------------------------------------------
00047       inline size_t payload_size()
00048       {
00049          return read<Os, block_data_t, size_t>(buffer + PAYLOAD_POS); 
00050       }
00051       // --------------------------------------------------------------------
00052       inline block_data_t* payload()
00053       { 
00054          return buffer + PAYLOAD_POS + sizeof(size_t); 
00055       }
00056       // --------------------------------------------------------------------
00057       inline void set_payload( size_t len, block_data_t *buf )
00058       {
00059          write<Os, block_data_t, size_t>(buffer + PAYLOAD_POS, len);
00060          memcpy( buffer + PAYLOAD_POS + sizeof(size_t), buf, len);
00061       }
00062       // --------------------------------------------------------------------
00063       inline size_t buffer_size()
00064       { return PAYLOAD_POS + sizeof(size_t) + payload_size(); }
00065    
00066       enum data_positions
00067       {
00068          PAYLOAD_POS = sizeof(message_id_t)
00069       };
00070                 private:
00071       block_data_t buffer[Radio::MAX_MESSAGE_LENGTH];
00072    };
00073    // -----------------------------------------------------------------------
00074    template<typename Os_P,
00075       typename Radio_P>
00076    LazyMessageType<Os_P, Radio_P>::
00077 	LazyMessageType()
00078    {
00079       set_msg_id( 0 );
00080       size_t len = 0;
00081       write<Os, block_data_t, size_t>(buffer + PAYLOAD_POS, len);
00082    }
00083 }
00084 #endif
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Defines