// // Copyright (c) 2010-2011 Linaro Limited // // All rights reserved. This program and the accompanying materials // are made available under the terms of the MIT License which accompanies // this distribution, and is available at // http://www.opensource.org/licenses/mit-license.php // // Contributors: // Alexandros Frantzis // Jesse Barker // #ifndef UTIL_H_ #define UTIL_H_ #include #include #include #include #include #ifdef ANDROID #include #endif struct Util { /** * How to perform the split() operation */ enum SplitMode { /** Normal split operation */ SplitModeNormal, /** Allow for spaces and multiple consecutive occurences of the delimiter */ SplitModeFuzzy, /** Take into account bash-like quoting and escaping rules */ SplitModeQuoted }; /** * split() - Splits a string into elements using a provided delimiter * * @s: the string to split * @delim: the delimiter to use * @elems: the string vector to populate * @mode: the SplitMode to use * * Using @delim to determine field boundaries, splits @s into separate * string elements. These elements are returned in the string vector * @elems. As long as @s is non-empty, there will be at least one * element in @elems. */ static void split(const std::string& src, char delim, std::vector& elems, Util::SplitMode mode); /** * get_timestamp_us() - Returns the current time in microseconds */ static uint64_t get_timestamp_us(); /** * get_resource() - Gets an input filestream for a given file. * * @path: the path to the file * * Returns a pointer to an input stream, which must be deleted when no * longer in use. */ static std::istream *get_resource(const std::string &path); /** * list_files() - Get a list of the files in a given directory. * * @dirName: the directory path to be listed. * @fileVec: the string vector to populate. * * Obtains a list of the files in @dirName, and returns them in the string * vector @fileVec. */ static void list_files(const std::string& dirName, std::vector& fileVec); /** * dispose_pointer_vector() - cleans up a vector of pointers * * @vec: vector of pointers to objects or plain-old-data * * Iterates across @vec and deletes the data pointed to by each of the * elements. Clears the vector, resetting it for reuse. */ template static void dispose_pointer_vector(std::vector &vec) { for (typename std::vector::const_iterator iter = vec.begin(); iter != vec.end(); iter++) { delete *iter; } vec.clear(); } /** * toString() - Converts a string to a plain-old-data type. * * @asString: a string representation of plain-old-data. */ template static T fromString(const std::string& asString) { std::stringstream ss(asString); T retVal = T(); ss >> retVal; return retVal; } /** * toString() - Converts a plain-old-data type to a string. * * @t: a simple value to be converted to a string */ template static std::string toString(const T t) { std::stringstream ss; ss << t; return ss.str(); } /** * appname_from_path() - get the name of an executable from an absolute path * * @path: absolute path of the running application (argv[0]) * * Returns the last portion of @path (everything after the final '/'). */ static std::string appname_from_path(const std::string& path); #ifdef ANDROID static void android_set_asset_manager(AAssetManager *asset_manager); static AAssetManager *android_get_asset_manager(void); private: static AAssetManager *android_asset_manager; #endif }; #endif /* UTIL_H */