2
// Copyright (c) 2010-2011 Linaro Limited
4
// All rights reserved. This program and the accompanying materials
5
// are made available under the terms of the MIT License which accompanies
6
// this distribution, and is available at
7
// http://www.opensource.org/licenses/mit-license.php
10
// Alexandros Frantzis <alexandros.frantzis@linaro.org>
11
// Jesse Barker <jesse.barker@linaro.org>
17
#include <android/asset_manager.h>
26
* Splits a string using a delimiter
28
* @param s the string to split
29
* @param delim the delimitir to use
30
* @param elems the string vector to populate
33
Util::split(const std::string &s, char delim, std::vector<std::string> &elems)
35
std::stringstream ss(s);
38
while(std::getline(ss, item, delim))
39
elems.push_back(item);
43
Util::get_timestamp_us()
46
gettimeofday(&tv, NULL);
47
uint64_t now = static_cast<uint64_t>(tv.tv_sec) * 1000000 +
48
static_cast<double>(tv.tv_usec);
53
Util::appname_from_path(const std::string& path)
55
std::string::size_type slashPos = path.rfind("/");
56
std::string::size_type startPos(0);
57
if (slashPos != std::string::npos)
59
startPos = slashPos + 1;
61
return std::string(path, startPos, std::string::npos);
67
Util::get_resource(const std::string &path)
69
std::ifstream *ifs = new std::ifstream(path.c_str());
71
return static_cast<std::istream *>(ifs);
75
Util::list_files(const std::string& dirName, std::vector<std::string>& fileVec)
77
DIR* dir = opendir(dirName.c_str());
80
Log::error("Failed to open models directory '%s'\n", dirName.c_str());
84
struct dirent* entry = readdir(dir);
87
std::string pathname(dirName + "/");
88
pathname += std::string(entry->d_name);
90
if (entry->d_name[0] != '.')
92
fileVec.push_back(pathname);
101
AAssetManager *Util::android_asset_manager = 0;
104
Util::android_set_asset_manager(AAssetManager *asset_manager)
106
Util::android_asset_manager = asset_manager;
110
Util::android_get_asset_manager()
112
return Util::android_asset_manager;
116
Util::get_resource(const std::string &path)
118
std::string path2(path);
119
/* Remove leading '/' from path name, it confuses the AssetManager */
120
if (path2.size() > 0 && path2[0] == '/')
123
std::stringstream *ss = new std::stringstream;
124
AAsset *asset = AAssetManager_open(Util::android_asset_manager,
125
path2.c_str(), AASSET_MODE_RANDOM);
127
ss->write(reinterpret_cast<const char *>(AAsset_getBuffer(asset)),
128
AAsset_getLength(asset));
129
Log::debug("Load asset %s\n", path2.c_str());
133
Log::error("Couldn't load asset %s\n", path2.c_str());
136
return static_cast<std::istream *>(ss);
140
Util::list_files(const std::string& dirName, std::vector<std::string>& fileVec)
142
AAssetManager *mgr(Util::android_get_asset_manager());
143
std::string dir_name(dirName);
145
/* Remove leading '/' from path, it confuses the AssetManager */
146
if (dir_name.size() > 0 && dir_name[0] == '/')
147
dir_name.erase(0, 1);
149
AAssetDir* dir = AAssetManager_openDir(mgr, dir_name.c_str());
152
Log::error("Failed to open models directory '%s'\n", dir_name.c_str());
156
const char *filename(0);
157
while ((filename = AAssetDir_getNextFileName(dir)) != 0)
159
std::string pathname(dir_name + "/");
160
pathname += std::string(filename);
161
fileVec.push_back(pathname);
163
AAssetDir_close(dir);