Start line:  
End line:  

Snippet Preview

Snippet HTML Code

Stack Overflow Questions
  /*
   ***** BEGIN LICENSE BLOCK *****
   * Version: EPL 1.0/GPL 2.0/LGPL 2.1
   *
   * The contents of this file are subject to the Eclipse Public
   * License Version 1.0 (the "License"); you may not use this file
   * except in compliance with the License. You may obtain a copy of
   * the License at http://www.eclipse.org/legal/epl-v10.html
   *
  * Software distributed under the License is distributed on an "AS
  * IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
  * implied. See the License for the specific language governing
  * rights and limitations under the License.
  *
  * Copyright (C) 2001 Alan Moore <alan_moore@gmx.net>
  * Copyright (C) 2001-2004 Jan Arne Petersen <jpetersen@uni-bonn.de>
  * Copyright (C) 2002-2004 Anders Bengtsson <ndrsbngtssn@yahoo.se>
  * Copyright (C) 2004 Thomas E Enebo <enebo@acm.org>
  * Copyright (C) 2004 Stefan Matthias Aust <sma@3plus4.de>
  *
  * Alternatively, the contents of this file may be used under the terms of
  * either of the GNU General Public License Version 2 or later (the "GPL"),
  * or the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
  * in which case the provisions of the GPL or the LGPL are applicable instead
  * of those above. If you wish to allow use of your version of this file only
  * under the terms of either the GPL or the LGPL, and not to allow others to
  * use your version of this file under the terms of the EPL, indicate your
  * decision by deleting the provisions above and replace them with the notice
  * and other provisions required by the GPL or the LGPL. If you do not delete
  * the provisions above, a recipient may use your version of this file under
  * the terms of any one of the EPL, the GPL or the LGPL.
  ***** END LICENSE BLOCK *****/
 package org.jruby;
 

Author(s):
jpetersen
 
 @JRubyClass(name={"TrueClass""FalseClass"})
 public class RubyBoolean extends RubyObject {
 
     private final int hashCode;
 
     RubyBoolean(Ruby runtimeboolean value) {
         super(runtime,
                 (value ? runtime.getTrueClass() : runtime.getFalseClass()),
                 false); // Don't put in object space
 
         if (!value = ;
 
             // default to a fixed value
             this. = value ? 155 : -48;
         } else {
             // save the object id based hash code;
             this. = System.identityHashCode(this);
         }
     }
     
     @Override
     public int getNativeTypeIndex() {
         return ( & ) == 0 ? . : .;
     }
     
     @Override
     public boolean isImmediate() {
         return true;
     }
 
     @Override
     public RubyClass getSingletonClass() {
         return ;
     }
 
     @Override
     public Class<?> getJavaClass() {
         return boolean.class;
     }
 
     public static RubyClass createFalseClass(Ruby runtime) {
         RubyClass falseClass = runtime.defineClass("FalseClass"runtime.getObject(), .);
         runtime.setFalseClass(falseClass);
         falseClass.index = .;
         falseClass.setReifiedClass(RubyBoolean.class);
         
         falseClass.defineAnnotatedMethods(False.class);
         falseClass.defineAnnotatedMethods(RubyBoolean.class);
         
         falseClass.getMetaClass().undefineMethod("new");
         
         return falseClass;
    }
    
    public static RubyClass createTrueClass(Ruby runtime) {
        RubyClass trueClass = runtime.defineClass("TrueClass"runtime.getObject(), .);
        runtime.setTrueClass(trueClass);
        trueClass.index = .;
        trueClass.setReifiedClass(RubyBoolean.class);
        
        trueClass.defineAnnotatedMethods(True.class);
        trueClass.defineAnnotatedMethods(RubyBoolean.class);
        
        trueClass.getMetaClass().undefineMethod("new");
        
        return trueClass;
    }
    
    public static RubyBoolean newBoolean(Ruby runtimeboolean value) {
        return value ? runtime.getTrue() : runtime.getFalse();
    }
    
    public static class False extends RubyBoolean {
        False(Ruby runtime) {
            super(runtime,
                    false); // Don't put in object space
             = ;
        }
        
        @JRubyMethod(name = "&")
        public static IRubyObject false_and(IRubyObject fIRubyObject oth) {
            return f;
        }
        @JRubyMethod(name = "|")
        public static IRubyObject false_or(IRubyObject fIRubyObject oth) {
            return oth.isTrue() ? f.getRuntime().getTrue() : f;
        }
        @JRubyMethod(name = "^")
        public static IRubyObject false_xor(IRubyObject fIRubyObject oth) {
            return oth.isTrue() ? f.getRuntime().getTrue() : f;
        }
        @JRubyMethod(name = "to_s")
        public static IRubyObject false_to_s(IRubyObject f) {
            return RubyString.newUSASCIIString(f.getRuntime(), "false");
        }
    }
    
    public static class True extends RubyBoolean {
        True(Ruby runtime) {
            super(runtime,
                    true); // Don't put in object space
        }
        
        @JRubyMethod(name = "&")
        public static IRubyObject true_and(IRubyObject tIRubyObject oth) {
            return oth.isTrue() ? t : t.getRuntime().getFalse();
        }
        @JRubyMethod(name = "|")
        public static IRubyObject true_or(IRubyObject tIRubyObject oth) {
            return t;
        }
        @JRubyMethod(name = "^")
        public static IRubyObject true_xor(IRubyObject tIRubyObject oth) {
            return oth.isTrue() ? t.getRuntime().getFalse() : t;
        }
        @JRubyMethod(name = "to_s")
        public static IRubyObject true_to_s(IRubyObject t) {
            return RubyString.newUSASCIIString(t.getRuntime(), "true");
        }
    }
    
    @JRubyMethod(name = "hash")
    public RubyFixnum hash(ThreadContext context) {
        return context.runtime.newFixnum(hashCode());
    }
    @Override
    public int hashCode() {
        return ;
    }
    @Override
    public RubyFixnum id() {
        if (( & ) == 0) {
            return RubyFixnum.newFixnum(getRuntime(), 2);
        } else {
            return RubyFixnum.zero(getRuntime());
        }
    }
    @Override
    public IRubyObject taint(ThreadContext context) {
        return this;
    }
    public void marshalTo(MarshalStream outputthrows java.io.IOException {
        output.write(isTrue() ? 'T' : 'F');
    }
    @Override
    public Object toJava(Class target) {
        if (target.isAssignableFrom(Boolean.class) || target.equals(boolean.class)) {
            if (isFalse()) return .;
            return .;
        } else {
            return super.toJava(target);
        }
    }