/* Copyright (c) 2009-2011 Olivier Chafik, All Rights Reserved This file is part of JNAerator (http://jnaerator.googlecode.com/). JNAerator is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. JNAerator 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 Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with JNAerator. If not, see <http://www.gnu.org/licenses/>. */ package com.ochafik.lang.jnaerator.parser; import com.ochafik.lang.jnaerator.parser.Expression.Constant; import java.util.Collection; public class ValuedModifier implements Modifier { Modifier modifier; Constant value; public ValuedModifier() {} public ValuedModifier(Modifier modifier, Constant value) { this.modifier = modifier; this.value = value; } public Collection<ModifierKind> getKinds() { return modifier.getKinds(); } public Modifier getModifier() { return modifier; } public void setModifier(Modifier modifier) { this.modifier = modifier; } public Constant getValue() { return value; } public void setValue(Constant value) { this.value = value; } public Modifier resolveAlias() { Modifier modifier = getModifier(); if (modifier == null) return this; return new ValuedModifier(modifier.resolveAlias(), getValue()); } public boolean isA(ModifierKind kind) { Modifier modifier = getModifier(); return modifier != null && modifier.isA(kind); } public boolean isAnyOf(ModifierKind... kinds) { Modifier modifier = getModifier(); return modifier != null && modifier.isAnyOf(kinds); } public boolean isAllOf(ModifierKind... kinds) { Modifier modifier = getModifier(); return modifier != null && modifier.isAllOf(kinds); } @Override public boolean equals(Object o) { if (!(o instanceof ValuedModifier)) return false; ValuedModifier m = (ValuedModifier)o; if ((getModifier() == null) != (m.getModifier() == null)) return false; if (getModifier() != null && !getModifier().equals(m.getModifier())) return false; if ((getValue() == null) != (m.getValue() == null)) return false; if (getValue() != null && !getValue().equals(m.getValue())) return false; return true; } @Override public int hashCode() { int hc = 0; if (getModifier() != null) hc = getModifier().hashCode(); if (getValue() != null) hc ^= getValue().hashCode(); return hc; } @Override public String toString() { String s = getModifier() + "(" + getValue() + ")"; Collection<ModifierKind> kinds = modifier.getKinds(); if (modifier.getKinds().contains(ModifierKind.Declspec)) return "__declspec(" + s + ")"; if (kinds.contains(ModifierKind.Attribute)) return "__attribute__((" + s + "))"; return s; } }