/*
* TclInteger.java
*
* Copyright (c) 1997 Sun Microsystems, Inc.
*
* See the file "license.terms" for information on usage and
* redistribution of this file, and for a DISCLAIMER OF ALL
* WARRANTIES.
*
* Included in SQLite3 port to C# for use in testharness only; 2008 Noah B Hart
*
* RCS @(#) $Id: TclInteger.java,v 1.5 2000/10/29 06:00:42 mdejong Exp $
*
*/
using System;
namespace tcl.lang
{
/// This class implements the integer object type in Tcl.
public class TclInteger : InternalRep
{
/// Internal representation of a integer value.
private int value;
/// Construct a TclInteger representation with the given integer value.
private TclInteger( int i )
{
value = i;
}
/// Construct a TclInteger representation with the initial value taken
/// from the given string.
///
///
/// current interpreter.
///
/// string rep of the integer.
///
/// TclException if the string is not a well-formed Tcl integer
/// value.
///
private TclInteger( Interp interp, string str )
{
value = Util.getInt( interp, str );
}
/// Returns a dupilcate of the current object.
/// the TclObject that contains this internalRep.
///
public InternalRep duplicate()
{
return new TclInteger( value );
}
/// Implement this no-op for the InternalRep interface.
public void dispose()
{
}
/// Called to query the string representation of the Tcl object. This
/// method is called only by TclObject.toString() when
/// TclObject.stringRep is null.
///
///
/// the string representation of the Tcl object.
///
public override string ToString()
{
return value.ToString();
}
/// TCL.Tcl_NewIntObj -> TclInteger.newInstance
///
/// Creates a new instance of a TclObject with a TclInteger internal
/// representation.
///
///
/// initial value of the integer object.
///
/// the TclObject with the given integer value.
///
public static TclObject newInstance( int i )
{
return new TclObject( new TclInteger( i ) );
}
/// SetIntFromAny -> TclInteger.setIntegerFromAny
///
/// Called to convert the other object's internal rep to this type.
///
///
/// current interpreter.
///
/// true if this methid is called by getForIndex.
///
/// the TclObject to convert to use the
/// representation provided by this class.
///
private static void setIntegerFromAny( Interp interp, TclObject tobj )
{
InternalRep rep = tobj.InternalRep;
if ( rep is TclInteger )
{
// Do nothing.
}
else if ( rep is TclBoolean )
{
bool b = TclBoolean.get( interp, tobj );
if ( b )
{
tobj.InternalRep = new TclInteger( 1 );
}
else
{
tobj.InternalRep = new TclInteger( 0 );
}
}
else
{
// (ToDo) other short-cuts
tobj.InternalRep = new TclInteger( interp, tobj.ToString() );
}
}
/// TCL.Tcl_GetIntFromObj -> TclInteger.get
///
/// Returns the integer value of the object.
///
///
/// current interpreter.
///
/// the object to operate on.
///
/// the integer value of the object.
///
public static int get( Interp interp, TclObject tobj )
{
setIntegerFromAny( interp, tobj );
TclInteger tint = (TclInteger)tobj.InternalRep;
return tint.value;
}
/// Changes the integer value of the object.
///
///
/// current interpreter.
///
/// the object to operate on.
/// @paran i the new integer value.
///
public static void set( TclObject tobj, int i )
{
tobj.invalidateStringRep();
InternalRep rep = tobj.InternalRep;
TclInteger tint;
if ( rep is TclInteger )
{
tint = (TclInteger)rep;
tint.value = i;
}
else
{
tobj.InternalRep = new TclInteger( i );
}
}
}
}