All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.jogamp.opencl.CLVersion Maven / Gradle / Ivy

The newest version!
/*
 * Copyright 2009 - 2010 JogAmp Community. All rights reserved.
 *
 * Redistribution and use in source and binary forms, with or without modification, are
 * permitted provided that the following conditions are met:
 *
 *    1. Redistributions of source code must retain the above copyright notice, this list of
 *       conditions and the following disclaimer.
 *
 *    2. Redistributions in binary form must reproduce the above copyright notice, this list
 *       of conditions and the following disclaimer in the documentation and/or other materials
 *       provided with the distribution.
 *
 * THIS SOFTWARE IS PROVIDED BY JogAmp Community ``AS IS'' AND ANY EXPRESS OR IMPLIED
 * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
 * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL JogAmp Community OR
 * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
 * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
 * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
 * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
 * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 *
 * The views and conclusions contained in the software and documentation are those of the
 * authors and should not be interpreted as representing official policies, either expressed
 * or implied, of JogAmp Community.
 */

/*
 * Created on Thursday, June 24 2010 05:38
 */
package com.jogamp.opencl;

import java.util.regex.Matcher;
import java.util.regex.Pattern;

/**
 * Version of an OpenCL Implementation.
 * All comparison operations use the {@link #getSpecVersion()} for comparison.
 * @author Michael Bien
 */
public class CLVersion implements Comparable {

    private final static Pattern pattern = Pattern.compile("OpenCL (?:C )?(\\d+)\\.(\\d+)(.*)");

    public final static CLVersion CL_1_0 = new CLVersion("OpenCL 1.0");
    public final static CLVersion CL_1_1 = new CLVersion("OpenCL 1.1");

    /**
     * The full version String is defined as:
     * OpenCL[space][major_version].[minor_version][space][platform-specific information]
     */
    public final String fullversion;
    /**
     * The platform specific part of the version string.
     * @see #fullversion
     */
    public final String implversion;
    /**
     * Minor version number.
     * @see #fullversion
     */
    public final short minor;
    /**
     * Mayor version number.
     * @see #fullversion
     */
    public final short major;

    protected CLVersion(final String version) {
        this.fullversion = version;
        final Matcher matcher = pattern.matcher(version);
        matcher.matches();
        major = Short.parseShort(matcher.group(1));
        minor = Short.parseShort(matcher.group(2));

        if(matcher.groupCount() == 4) {//first group == whole string
            implversion = matcher.group(3).substring(1);
        }else{
            implversion = "";
        }
    }

    public int compareTo(final CLVersion other) {
        return compareTo(other.major, other.minor);
    }

    private int compareTo(final int otherMajor, final int otherMinor)  {
        if(otherMajor == major && otherMinor == minor) {
            return 0;
        }else if(this.major > otherMajor || (this.major == otherMajor && this.minor > otherMinor)) {
            return 1;
        }else{
            return -1;
        }
    }

    public boolean isAtLeast(final CLVersion other) {
        return this.compareTo(other) >= 0;
    }

    public boolean isAtLeast(final int major, final int minor) {
        return this.compareTo(major, minor) >= 0;
    }

    public boolean isEqual(final CLVersion other) {
        return this.isEqual(other.major, other.minor);
    }

    public boolean isEqual(final int major, final int minor) {
        return this.major == major && this.minor == minor;
    }

    /**
     * Returns '"OpenCL " + major + "." + minor'.
     */
    public String getSpecVersion() {
        return "OpenCL " + major + '.' + minor;
    }

    /**
     * Returns the full, unfiltered version string.
     * @see #fullversion
     */
    public String getFullVersion() {
        return fullversion;
    }

    /**
     * @see #implversion
     */
    public String getImplVersion() {
        return implversion;
    }

    /**
     * @see #major
     */
    public short getMajor() {
        return major;
    }

    /**
     * @see #minor
     */
    public short getMinor() {
        return minor;
    }

    @Override
    public String toString() {
        return getFullVersion();
    }

    @Override
    public int hashCode() {
        return fullversion.hashCode();
    }

    /**
     * Returns true if both {@link #fullversion} Strings match.
     */
    @Override
    public boolean equals(final Object obj) {
        return obj != null && obj.getClass() == getClass() && fullversion.equals(((CLVersion)obj).fullversion);
    }


}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy