c++ to java question

I have a problem about translate c++ code to java code.

someone says use the JNI,someone just trans it directly and someone use jobject or jint..etc...

I have no ideal about choicing which way.

and tihs code is what i want

#ifndef SC_BIT_H

#define SC_BIT_H

#include "systemc/datatypes/int/sc_nbdefs.h"

#include "systemc/utils/sc_iostream.h"

namespace sc_dt

{

// classes defined in this module

class sc_bit;

// forward class declarations

class sc_logic;

// -

// CLASS : sc_bit

//

// Bit class.

// Note: VSIA compatibility indicated.

// -

class sc_bit

{

// support methods

static void invalid_value( char );

static void invalid_value( int );

static bool to_value( char c )

{

if( c != '0' && c != '1' ) {

invalid_value( c );

}

return ( c == '0' ? false : true );

}

static bool to_value( int i )

{

if( i != 0 && i != 1 ) {

invalid_value( i );

}

return ( i == 0 ? false : true );

}

public:

// constructors

// MANDATORY

sc_bit()

: m_val( false )

{}

explicit sc_bit( uint64 a )

: m_val( a )

{}

explicit sc_bit( bool a )

: m_val( a )

{}

explicit sc_bit( int a )

: m_val( to_value( a ) )

{}

explicit sc_bit( char a )

: m_val( to_value( a ) )

{}

explicit sc_bit( const sc_logic& a ); // non-VSIA

// copy constructor

// MANDATORY

sc_bit( const sc_bit& a )

: m_val( a.m_val )

{}

// destructor

// MANDATORY

~sc_bit()

{}

// assignment operators

// MANDATORY

sc_bit& operator = ( const sc_bit& b )

{ m_val = b.m_val; return *this; }

sc_bit& operator = ( int64 b )

{ return ( *this = sc_bit( (int)b ) ); }

sc_bit& operator = ( uint64 b )

{ return ( *this = sc_bit( (int)b ) ); }

sc_bit& operator = ( long b )

{ return ( *this = sc_bit( (int)b ) ); }

sc_bit& operator = ( unsigned long b )

{ return ( *this = sc_bit( (int)b ) ); }

sc_bit& operator = ( int b )

{ return ( *this = sc_bit( b ) ); }

sc_bit& operator = ( bool b )

{ return ( *this = sc_bit( b ) ); }

sc_bit& operator = ( char b )

{ return ( *this = sc_bit( b ) ); }

sc_bit& operator = ( const sc_logic& b ); // non-VSIA

// bitwise assignment operators

sc_bit& operator &= ( const sc_bit& b )

{ m_val = ( m_val && b.m_val ); return *this; }

sc_bit& operator &= ( int b )

{ return ( *this &= sc_bit( b ) ); }

sc_bit& operator &= ( bool b )

{ return ( *this &= sc_bit( b ) ); }

sc_bit& operator &= ( char b )

{ return ( *this &= sc_bit( b ) ); }

sc_bit& operator |= ( const sc_bit& b )

{ m_val = ( m_val || b.m_val ); return *this; }

sc_bit& operator |= ( int b )

{ return ( *this |= sc_bit( b ) ); }

sc_bit& operator |= ( bool b )

{ return ( *this |= sc_bit( b ) ); }

sc_bit& operator |= ( char b )

{ return ( *this |= sc_bit( b ) ); }

sc_bit& operator ^= ( const sc_bit& b )

{ m_val = ( m_val != b.m_val ); return *this; }

sc_bit& operator ^= ( int b )

{ return ( *this ^= sc_bit( b ) ); }

sc_bit& operator ^= ( bool b )

{ return ( *this ^= sc_bit( b ) ); }

sc_bit& operator ^= ( char b )

{ return ( *this ^= sc_bit( b ) ); }

// conversions

// MANDATORY

// implicit conversion to bool

operator bool () const

{ return m_val; }

bool operator ! () const // non-VSIA

{ return ! m_val; }

// explicit conversions

bool to_bool() const // non-VSIA

{ return m_val; }

char to_char() const

{ return ( m_val ? '1' : '0' ); }

// relational operators and functions

// MANDATORY

friend bool operator == ( const sc_bit& a, const sc_bit& b )

{ return ( a.m_val == b.m_val ); }

friend bool operator == ( const sc_bit& a, int b )

{ return ( a == sc_bit( b ) ); }

friend bool operator == ( const sc_bit& a, bool b )

{ return ( a == sc_bit( b ) ); }

friend bool operator == ( const sc_bit& a, char b )

{ return ( a == sc_bit( b ) ); }

friend bool operator == ( int a, const sc_bit& b )

{ return ( sc_bit( a ) == b ); }

friend bool operator == ( bool a, const sc_bit& b )

{ return ( sc_bit( a ) == b ); }

friend bool operator == ( char a, const sc_bit& b )

{ return ( sc_bit( a ) == b ); }

// OPTIONAL

friend bool equal( const sc_bit& a, const sc_bit& b )

{ return ( a == b ); }

friend bool equal( const sc_bit& a, int b )

{ return ( a == b ); }

friend bool equal( const sc_bit& a, bool b )

{ return ( a == b ); }

friend bool equal( const sc_bit& a, char b )

{ return ( a == b ); }

friend bool equal( int a, const sc_bit& b )

{ return ( a == b ); }

friend bool equal( bool a, const sc_bit& b )

{ return ( a == b ); }

friend bool equal( char a, const sc_bit& b )

{ return ( a == b ); }

// MANDATORY

friend bool operator != ( const sc_bit& a, const sc_bit& b )

{ return ( a.m_val != b.m_val ); }

friend bool operator != ( const sc_bit& a, int b )

{ return ( a != sc_bit( b ) ); }

friend bool operator != ( const sc_bit& a, bool b )

{ return ( a != sc_bit( b ) ); }

friend bool operator != ( const sc_bit& a, char b )

{ return ( a != sc_bit( b ) ); }

friend bool operator != ( int a, const sc_bit& b )

{ return ( sc_bit( a ) != b ); }

friend bool operator != ( bool a, const sc_bit& b )

{ return ( sc_bit( a ) != b ); }

friend bool operator != ( char a, const sc_bit& b )

{ return ( sc_bit( a ) != b ); }

// OPTIONAL

friend bool not_equal( const sc_bit& a, const sc_bit& b )

{ return ( a != b ); }

friend bool not_equal( const sc_bit& a, int b )

{ return ( a != b ); }

friend bool not_equal( const sc_bit& a, bool b )

{ return ( a != b ); }

friend bool not_equal( const sc_bit& a, char b )

{ return ( a != b ); }

friend bool not_equal( int a, const sc_bit& b )

{ return ( a != b ); }

friend bool not_equal( bool a, const sc_bit& b )

{ return ( a != b ); }

friend bool not_equal( char a, const sc_bit& b )

{ return ( a != b ); }

// bitwise operators and functions

// bitwise complement

// MANDATORY

friend const sc_bit operator ~ ( const sc_bit& a )

{ return sc_bit( ! a.m_val ); }

// RECOMMENDED

sc_bit& b_not()

{ m_val = ( ! m_val ); return *this; }

// OPTIONAL

friend const sc_bit b_not( const sc_bit& a )

{ return ( ~ a ); }

// RECOMMENDED

friend void b_not( sc_bit& r, const sc_bit& a )

{ r = ( ~ a ); }

// bitwise or

// MANDATORY

friend const sc_bit operator | ( const sc_bit& a, const sc_bit& b )

{ return sc_bit( a.m_val || b.m_val ); }

friend const sc_bit operator | ( const sc_bit& a, int b )

{ return ( a | sc_bit( b ) ); }

friend const sc_bit operator | ( const sc_bit& a, bool b )

{ return ( a | sc_bit( b ) ); }

friend const sc_bit operator | ( const sc_bit& a, char b )

{ return ( a | sc_bit( b ) ); }

friend const sc_bit operator | ( int a, const sc_bit& b )

{ return ( sc_bit( a ) | b ); }

friend const sc_bit operator | ( bool a, const sc_bit& b )

{ return ( sc_bit( a ) | b ); }

friend const sc_bit operator | ( char a, const sc_bit& b )

{ return ( sc_bit( a ) | b ); }

// OPTIONAL

friend const sc_bit b_or( const sc_bit& a, const sc_bit& b )

{ return ( a | b ); }

friend const sc_bit b_or( const sc_bit& a, int b )

{ return ( a | b ); }

friend const sc_bit b_or( const sc_bit& a, bool b )

{ return ( a | b ); }

friend const sc_bit b_or( const sc_bit& a, char b )

{ return ( a | b ); }

friend const sc_bit b_or( int a, const sc_bit& b )

{ return ( a | b ); }

friend const sc_bit b_or( bool a, const sc_bit& b )

{ return ( a | b ); }

friend const sc_bit b_or( char a, const sc_bit& b )

{ return ( a | b ); }

// RECOMMENDED

friend void b_or( sc_bit& r, const sc_bit& a, const sc_bit& b )

{ r = ( a | b ); }

friend void b_or( sc_bit& r, const sc_bit& a, int b )

{ r = ( a | b ); }

friend void b_or( sc_bit& r, const sc_bit& a, bool b )

{ r = ( a | b ); }

friend void b_or( sc_bit& r, const sc_bit& a, char b )

{ r = ( a | b ); }

friend void b_or( sc_bit& r, int a, const sc_bit& b )

{ r = ( a | b ); }

friend void b_or( sc_bit& r, bool a, const sc_bit& b )

{ r = ( a | b ); }

friend void b_or( sc_bit& r, char a, const sc_bit& b )

{ r = ( a | b ); }

// bitwise and

// MANDATORY

friend const sc_bit operator & ( const sc_bit& a, const sc_bit& b )

{ return sc_bit( a.m_val && b.m_val ); }

friend const sc_bit operator & ( const sc_bit& a, int b )

{ return ( a & sc_bit( b ) ); }

friend const sc_bit operator & ( const sc_bit& a, bool b )

{ return ( a & sc_bit( b ) ); }

friend const sc_bit operator & ( const sc_bit& a, char b )

{ return ( a & sc_bit( b ) ); }

friend const sc_bit operator & ( int a, const sc_bit& b )

{ return ( sc_bit( a ) & b ); }

friend const sc_bit operator & ( bool a, const sc_bit& b )

{ return ( sc_bit( a ) & b ); }

friend const sc_bit operator & ( char a, const sc_bit& b )

{ return ( sc_bit( a ) & b ); }

// OPTIONAL

friend const sc_bit b_and( const sc_bit& a, const sc_bit& b )

{ return ( a & b ); }

friend const sc_bit b_and( const sc_bit& a, int b )

{ return ( a & b ); }

friend const sc_bit b_and( const sc_bit& a, bool b )

{ return ( a & b ); }

friend const sc_bit b_and( const sc_bit& a, char b )

{ return ( a & b ); }

friend const sc_bit b_and( int a, const sc_bit& b )

{ return ( a & b ); }

friend const sc_bit b_and( bool a, const sc_bit& b )

{ return ( a & b ); }

friend const sc_bit b_and( char a, const sc_bit& b )

{ return ( a & b ); }

// RECOMMENDED

friend void b_and( sc_bit& r, const sc_bit& a, const sc_bit& b )

{ r = ( a & b ); }

friend void b_and( sc_bit& r, const sc_bit& a, int b )

{ r = ( a & b ); }

friend void b_and( sc_bit& r, const sc_bit& a, bool b )

{ r = ( a & b ); }

friend void b_and( sc_bit& r, const sc_bit& a, char b )

{ r = ( a & b ); }

friend void b_and( sc_bit& r, int a, const sc_bit& b )

{ r = ( a & b ); }

friend void b_and( sc_bit& r, bool a, const sc_bit& b )

{ r = ( a & b ); }

friend void b_and( sc_bit& r, char a, const sc_bit& b )

{ r = ( a & b ); }

// bitwise exor

// MANDATORY

friend const sc_bit operator ^ ( const sc_bit& a, const sc_bit& b )

{ return sc_bit( a.m_val != b.m_val ); }

friend const sc_bit operator ^ ( const sc_bit& a, int b )

{ return ( a ^ sc_bit( b ) ); }

friend const sc_bit operator ^ ( const sc_bit& a, bool b )

{ return ( a ^ sc_bit( b ) ); }

friend const sc_bit operator ^ ( const sc_bit& a, char b )

{ return ( a ^ sc_bit( b ) ); }

friend const sc_bit operator ^ ( int a, const sc_bit& b )

{ return ( sc_bit( a ) ^ b ); }

friend const sc_bit operator ^ ( bool a, const sc_bit& b )

{ return ( sc_bit( a ) ^ b ); }

friend const sc_bit operator ^ ( char a, const sc_bit& b )

{ return ( sc_bit( a ) ^ b ); }

// OPTIONAL

friend const sc_bit b_xor( const sc_bit& a, const sc_bit& b )

{ return ( a ^ b ); }

friend const sc_bit b_xor( const sc_bit& a, int b )

{ return ( a ^ b ); }

friend const sc_bit b_xor( const sc_bit& a, bool b )

{ return ( a ^ b ); }

friend const sc_bit b_xor( const sc_bit& a, char b )

{ return ( a ^ b ); }

friend const sc_bit b_xor( int a, const sc_bit& b )

{ return ( a ^ b ); }

friend const sc_bit b_xor( bool a, const sc_bit& b )

{ return ( a ^ b ); }

friend const sc_bit b_xor( char a, const sc_bit& b )

{ return ( a ^ b ); }

// RECOMMENDED

friend void b_xor( sc_bit& r, const sc_bit& a, const sc_bit& b )

{ r = ( a ^ b ); }

friend void b_xor( sc_bit& r, const sc_bit& a, int b )

{ r = ( a ^ b ); }

friend void b_xor( sc_bit& r, const sc_bit& a, bool b )

{ r = ( a ^ b ); }

friend void b_xor( sc_bit& r, const sc_bit& a, char b )

{ r = ( a ^ b ); }

friend void b_xor( sc_bit& r, int a, const sc_bit& b )

{ r = ( a ^ b ); }

friend void b_xor( sc_bit& r, bool a, const sc_bit& b )

{ r = ( a ^ b ); }

friend void b_xor( sc_bit& r, char a, const sc_bit& b )

{ r = ( a ^ b ); }

// other methods

void print( ostream& os = cout ) const

{ os << to_bool(); }

void scan( istream& = cin );

private:

bool m_val;

};

// -

inline

ostream&

operator << ( ostream& os, const sc_bit& a )

{

a.print( os );

return os;

}

inline

istream&

operator >> ( istream& is, sc_bit& a )

{

a.scan( is );

return is;

}

} // namespace sc_dt

#endif

// Taf!

[14501 byte] By [tailianga] at [2007-10-2 14:32:02]
# 1
please let your code in
kingxiaobaoa at 2007-7-13 12:54:42 > top of Java-index,Java Essentials,Java Programming...
# 2

You want to translate that C++ code to Java? Note that Java doesn't support operator overloading. You can make methods that do each of the things that that C++ code does. Note that the format and the usage of those methods might not work the same as the C++ operators. And, Java doesn't have a destructor (the one in the C++ code that you posted doesn't do anything, anyway, so that's definitely no loss).

MLRona at 2007-7-13 12:54:42 > top of Java-index,Java Essentials,Java Programming...
# 3

> I have a problem about translate c++ code to java

> code.

>

> someone says use the JNI,someone just trans it

> directly and someone use jobject or jint..etc...

>

> I have no ideal about choicing which way.

The problem seems to be that you don't know Java. I suggest you spend your time studying Java instead of JNI. So my recommendation is that you translate the C++ code to Java.

MLRona at 2007-7-13 12:54:42 > top of Java-index,Java Essentials,Java Programming...
# 4
Or maybe you don't know C++. -:) Well, that's more of a problem but I still don't think using JNI for the few classes is worthwhile or will reduce the work. Borrow a C++ textbook and start dechiphering the code.
MLRona at 2007-7-13 12:54:42 > top of Java-index,Java Essentials,Java Programming...
# 5
See my answer in your crosspost: http://forum.java.sun.com/thread.jspa?threadID=716323kind regards,Jos
JosAHa at 2007-7-13 12:54:42 > top of Java-index,Java Essentials,Java Programming...