Page MenuHomePhabricator (Chris)

No OneTemporary

Authored By
Unknown
Size
5 KB
Referenced Files
None
Subscribers
None
diff --git a/util/funcs.cpp b/util/funcs.cpp
index 0a5df9b7..873293f0 100644
--- a/util/funcs.cpp
+++ b/util/funcs.cpp
@@ -1,187 +1,199 @@
#include "funcs.h"
#include <allegro.h>
#include <vector>
#include <string>
#ifndef WINDOWS
#include <unistd.h>
#endif
using namespace std;
/* remove this once cmake and scons properly set DATA_PATH */
#ifndef DATA_PATH
#define DATA_PATH "data"
#endif
/* the build system should define DATA_PATH */
static string dataPath = DATA_PATH;
const double Util::pi = 3.14159265;
double Util::radians(double degree){
return degree * pi / 180.0;
}
/*
inline int rnd( int q ){
if ( q <= 0 ) return 0;
return (int)( rand() % q );
}
*/
int Util::max(int a, int b){
if (a>b){
return a;
}
return b;
}
int Util::min(int a, int b){
if (a<b){
return a;
}
return b;
}
int Util::rnd( int q, int min, int range ){
return q - min + rnd( range );
}
int Util::rnd( int min, int max ){
return rnd( max - min ) + min;
}
void Util::rest( int x ){
::rest( x );
}
void Util::setDataPath( const string & str ){
dataPath = str;
}
string Util::getDataPath(){
return dataPath + "/";
}
bool Util::exists( const string & file ){
return ::exists( file.c_str() ) != 0;
}
vector< string > Util::getFiles( string dataPath, string find ){
struct al_ffblk info;
vector< string > files;
if ( al_findfirst( (dataPath + find).c_str(), &info, FA_ALL ) != 0 ){
return files;
}
files.push_back( dataPath + string( info.name ) );
while ( al_findnext( &info ) == 0 ){
files.push_back( dataPath + string( info.name ) );
}
al_findclose( &info );
return files;
}
void Util::blend_palette( int * pal, int mp, int sc, int ec ) {
ASSERT( pal );
ASSERT( mp != 0 );
int sc_r = getr( sc );
int sc_g = getg( sc );
int sc_b = getb( sc );
int ec_r = getr( ec );
int ec_g = getg( ec );
int ec_b = getb( ec );
for ( int q = 0; q < mp; q++ ) {
float j = (float)( q ) / (float)( mp );
int f_r = (int)( 0.5 + (float)( sc_r ) + (float)( ec_r-sc_r ) * j );
int f_g = (int)( 0.5 + (float)( sc_g ) + (float)( ec_g-sc_g ) * j );
int f_b = (int)( 0.5 + (float)( sc_b ) + (float)( ec_b-sc_b ) * j );
pal[q] = makecol( f_r, f_g, f_b );
}
}
string Util::trim(const std::string & str){
string s;
size_t startpos = str.find_first_not_of(" \t");
size_t endpos = str.find_last_not_of(" \t");
// if all spaces or empty return an empty string
if ((string::npos == startpos ) ||
(string::npos == endpos)){
return "";
} else {
return str.substr(startpos, endpos-startpos+1);
}
}
/* makes the first letter of a string upper case */
string Util::upcase(std::string str){
if ( str.length() > 0 && (str[0] >= 'a' && str[0] <= 'z') ){
str[0] = str[0] - 'a' + 'A';
}
return str;
}
/*Gets the minimum of three values*/
static int minimum(int a,int b,int c){
int min=a;
if(b<min)
min=b;
if(c<min)
min=c;
return min;
}
/* Compute levenshtein distance between s and t
* from: http://www.merriampark.com/ldc.htm
*/
static int levenshtein_distance(const char *s, const char *t){
//Step 1
int k,i,j,n,m,cost,distance;
int * d;
n=strlen(s);
m=strlen(t);
if(n!=0&&m!=0){
d = (int*) malloc((sizeof(int))*(m+1)*(n+1));
m++;
n++;
//Step 2
for(k=0;k<n;k++)
d[k]=k;
for(k=0;k<m;k++)
d[k*n]=k;
//Step 3 and 4
for(i=1;i<n;i++)
for(j=1;j<m;j++)
{
//Step 5
if(s[i-1]==t[j-1])
cost=0;
else
cost=1;
//Step 6
d[j*n+i]=minimum(d[(j-1)*n+i]+1,d[j*n+i-1]+1,d[(j-1)*n+i-1]+cost);
}
distance=d[n*m-1];
free(d);
return distance;
} else {
return -1; //a negative return value means that one or both strings are empty.
}
}
int Util::levenshtein(const std::string & str1, const std::string & str2){
return levenshtein_distance(str1.c_str(), str2.c_str());
}
#ifndef ALLEGRO_WINDOWS
int Util::getPipe(int files[2]){
return pipe(files);
}
+
+int Util::closePipe(int files[2]){
+ int s = close(files[0]);
+ if (s != 0){
+ return s;
+ }
+ s = close(files[1]);
+ if (s != 0){
+ return s;
+ }
+ return 0;
+}
#endif
diff --git a/util/funcs.h b/util/funcs.h
index c0b14b43..f35a2936 100644
--- a/util/funcs.h
+++ b/util/funcs.h
@@ -1,49 +1,50 @@
#ifndef _funcs_h
#define _funcs_h
#include <stdlib.h>
#include <vector>
#include <string>
namespace Util{
extern const double pi;
// int rnd( int q );
inline int rnd( int q ){
if ( q <= 0 ) return 0;
return (int)( rand() % q );
}
std::vector< std::string > getFiles( std::string dataPath, std::string find );
double radians(double degree);
std::string getDataPath();
void setDataPath( const std::string & str );
bool exists( const std::string & file );
/* return a random number + some range between min/max */
int rnd( int q, int min, int max );
int max(int a, int b);
int min(int a, int b);
/* return a number between min/max */
int rnd( int min, int max );
void blend_palette( int * pal, int mp, int sc, int ec );
void rest( int x );
std::string trim(const std::string & str);
std::string upcase(std::string str);
int levenshtein(const std::string & str1, const std::string & str2);
int getPipe(int files[2]);
+int closePipe(int files[2]);
}
#endif

File Metadata

Mime Type
text/x-diff
Expires
Thu, Jun 11, 1:42 PM (3 w, 4 d ago)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
69297
Default Alt Text
(5 KB)

Event Timeline