Back to index

wims  3.65+svn20090927
Symbol.java
Go to the documentation of this file.
00001 /*
00002  * Copyright (C) 2008 Mihai Preda.
00003  *
00004  * Licensed under the Apache License, Version 2.0 (the "License");
00005  * you may not use this file except in compliance with the License.
00006  * You may obtain a copy of the License at
00007  *
00008  *      http://www.apache.org/licenses/LICENSE-2.0
00009  *
00010  * Unless required by applicable law or agreed to in writing, software
00011  * distributed under the License is distributed on an "AS IS" BASIS,
00012  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
00013  * See the License for the specific language governing permissions and
00014  * limitations under the License.
00015  */
00016 
00017 package org.javia.arity;
00018 
00019 class Symbol {
00020     static final int CONST_ARITY = -3;
00021 
00022     private String name;
00023     private int arity;
00024 
00025     byte op;
00026     Function fun;
00027     double value = 0;
00028 
00029     Symbol(String name, int arity, byte op) {
00030         setKey(name, arity);
00031         this.op = op;        
00032     }
00033 
00034     Symbol(String name, Function fun) {
00035         setKey(name, fun.arity());
00036         this.fun = fun;
00037     }
00038 
00039     Symbol(String name, double value) {
00040         setKey(name, CONST_ARITY);
00041         this.value = value;
00042     }
00043 
00044     static Symbol newEmpty(Symbol s) {
00045         return new Symbol(s.name, s.arity, (byte)0);
00046     }
00047 
00048     boolean isEmpty() {
00049         return op == 0 && fun == null && value == 0;
00050     }
00051 
00052     Symbol setKey(String name, int arity) {
00053         this.name = name;
00054         this.arity = arity;
00055         return this;
00056     }
00057 
00058     public boolean equals(Object other) {
00059         Symbol symbol = (Symbol) other;
00060         return name.equals(symbol.name) && arity == symbol.arity;
00061     }
00062 
00063     public int hashCode() {
00064         return name.hashCode() + arity;
00065     }
00066 }