/**
 * @file
 * $Id$
 * $Revision$
 * $Author$
 * $Date$
 *
 * This file is part of The iWear Framework.
 *
 * The iWear Framework 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 as in version 2 of the License.

 * 
 * The iWear Framework is distributed in the hope that it will be useful, but
 * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
 * or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License for
 * more details.
 * 
 * You should have received a copy of the GNU General Public License along with
 * The iWear Framework; if not, write to the Free Software Foundation, Inc., 59
 * Temple Place, Suite 330, Boston, MA  02111-1307  USA
 */

#ifndef __IWREMOTE_IDL_H
#define __IWREMOTE_IDL_H

#include <iwremote/translationunit.h>

namespace iwear
{
    namespace net
    {
class Type;
	namespace idl
	{

extern TranslationUnit tu;

extern const char* expected_token;

void change_protection( char* const& );
void create_parameter( char* const& pd, char* const& type );
void create_parameter( char* const& pd, char* const& type, char* const& id );
void create_parameter( void );
void declare_variable( char* const&, char* const& );
void end_class( void );
void end_derivation( void );
void end_function( char* const& );
void end_function( char* const&, char* const& );
void end_namespace( void );
void add_container_type( char* const& );
void add_container_type_x( char* const& );
void start_class( char* const& );

/**
 * @param container type name
 * @param expected number of parameters
 */
void start_container( char* const&, uint32_t );

void start_container_list( void );
void start_container_set( void );
void start_container_vector( void );
void start_container_map( void );
void start_container_pair( void );

void start_derivation( char* const&, char* const& );
void start_function( char* const& );
void start_function( char* const&, char* const& );
void start_namespace( char* const& );
void start_return( void );

void finish_container( );

void finish_parsing( void );
void enum_identifier( char* const& );
void enum_identifier( char* const&, uint32_t );
void enum_identifier( char* const&, char* const&);
void add_enum( char* const& );

void adapt( char* const&, bool priv = false );
void adapt_private( char* const& );
void include( char* const& );

void version_specifier( int );
void version_specifier( int, int );
void version_specifier( int, int, int );

void add_typedef( char* const&, char* const& );

Type* get_type( const string& );
}
}
}
#endif
