/*
 * Copyright 2013 Google Inc.
 *
 * Use of this source code is governed by a BSD-style license that can be
 * found in the LICENSE file.
 */

#ifndef skpdiff_util_DEFINED
#define skpdiff_util_DEFINED

#include "SkString.h"
#include "SkTArray.h"

#if SK_SUPPORT_OPENCL
#if SK_BUILD_FOR_MAC
#   include <OpenCL/cl.h>
#else
#   include <CL/cl.h>
#endif

/**
 * Converts an OpenCL error number into the string of its enumeration name.
 * @param  err The OpenCL error number
 * @return The string of the name of the error; "UNKOWN" if the error number is invalid
 */
const char* cl_error_to_string(cl_int err);
#endif

/**
 * Get a positive monotonic real-time measure of the amount of seconds since some undefined epoch.
 * Maximum precision is the goal of this routine.
 * @return Amount of time in seconds since some epoch
 */
double get_seconds();

/**
 * Get file entries of the given directory.
 * @param  path    A path to a directory to enumerate
 * @param  entries A vector to return the results into
 * @return         True on success, false otherwise
 */
bool get_directory(const char path[], SkTArray<SkString>* entries);

/**
 * Gets the files that match the specified pattern in sorted order.
 * @param  globPattern The pattern to use. Patterns must be valid paths, optionally with wildcards (*)
 * @param  entries     An array to return the results into
 * @return             True on success, false otherwise
 */
bool glob_files(const char globPattern[], SkTArray<SkString>* entries);

/**
 * Gets the absolute version of the given path.
 * @param  path The absolute or relative path to expand
 * @return      The absolute path of the given path on success, or an empty string on failure.
 */
SkString get_absolute_path(const SkString& path);


#endif
