Beispiel #1
0
void LetterDist(int target)
{
    int letter, set_symbols=0, max_letter;
    double n[26];

    //calculate real number of occurances for each letter
    for(letter=0; letter<26; letter++)
    {
        n[letter]=(message.cur_map.GetUnigraph(letter)/100)*target;
        set_symbols+=int(n[letter]);
    }

    while(set_symbols<target)
    {
        //find the letter with the highest decimal
        max_letter=0;

        for(letter=0; letter<26; letter++)
            if(DECIMAL(n[letter])>DECIMAL(n[max_letter]))
                max_letter=letter;

        //set that letter to the next whole number
        n[max_letter]=int(n[max_letter])+1;
        set_symbols++;
    }

    for(letter=0; letter<26; letter++)
        initCount[letter] = int(n[letter]);
}
Beispiel #2
0
decimal operator/(const decimal& a, const decimal& b)
{
	int64_t va = a.value() > 0 ? a.value() : -a.value();
	int64_t vb = b.value() > 0 ? b.value() : -b.value();

	if(va == 0) {
		return a;
	}

	int64_t orders_of_magnitude_shift = 0;
	const int64_t target_value = DECIMAL(10000000000000);

	while(va < target_value) {
		va *= DECIMAL(10);
		++orders_of_magnitude_shift;
	}

	const int64_t target_value_b = DECIMAL(1000000);

	while(vb > target_value_b) {
		vb /= DECIMAL(10);
		++orders_of_magnitude_shift;
	}

	int64_t value = (va/vb);

	while(orders_of_magnitude_shift > 6) {
		value /= DECIMAL(10);
		--orders_of_magnitude_shift;
	}

	while(orders_of_magnitude_shift < 6) {
		value *= DECIMAL(10);
		++orders_of_magnitude_shift;
	}

	const decimal result(decimal::from_raw_value(value));
	if(a.value() < 0 && b.value() > 0 || b.value() < 0 && a.value() > 0) {
		return -result;
	} else {
		return result;
	}
}
Beispiel #3
0
int test_mysql(int argc, char* argv[])
{
	if (argc < 2) 
	{
		printf ("Usage: \n\t./a.out filename [...]\n");
		return 1;
	}

	const char* host = "172.16.0.10"; // Mysql数据库服务器所在主机,使用默认端口3306,亦可指定端口,如"localhost:3000"或"10.10.168.128:3000"
	const char* user = "******";      // Mysql用户
	std::string pass;               // Mysql用户密码
	const char* db   = "test";      // Mysql数据库名

	printf ("输入本地MySQL数据库的root密码: ");
	std::getline(std::cin, pass);

	MySQL::Connection conn;
	if (!conn.connect (host, user, pass.c_str(), db))
	{
		return 1;
	}

	// 创建一个具有BLOG字段的数据库表
	char drop_table_sql[]   = "DROP TABLE IF EXISTS T_TEST";
	char create_table_sql[] = "CREATE TABLE T_TEST\
		(\
			ID			SERIAL,\
			NAME		VARCHAR(100),\
			DATA_LEN	DECIMAL(10,0),\
			DATA		MEDIUMBLOB,\
			PRIMARY KEY  (ID)\
		)";
	
	if (!conn.execute (drop_table_sql))
		return 1;

	if (!conn.execute (create_table_sql))
		return 1;

	// [1] 写文件到数据库表 T_TEST
	printf ("[1] 写文件到数据库表 T_TEST\n");
	for (int i=1; i<argc; ++i)
	{
		// 读取将要写入数据库的文件
		char filename[256] = "\0";
		strcpy (filename, argv[i]);
		FILE* fp = fopen (filename, "rb");
		if (fp == NULL)
		{
			fprintf (stderr, "打开文件失败:%s", strerror (errno));
			return 1;
		}

		struct mysql_iovec v;
		fseek(fp, 0, SEEK_SET);
		fseek(fp, 0, SEEK_END);
		v.iov_len = ftell (fp);
		unsigned char* pBuf = new unsigned char [v.iov_len];
		memset (pBuf, 0, v.iov_len);

		fseek(fp, 0, SEEK_SET);
		fread (pBuf, 1, v.iov_len, fp);
		fclose (fp);

		// 获取文件名(basename)
		const char delim[] = "/\\"; // 文件分隔符
		char* basename = strrchr (filename, delim[0]);
		if (!basename)
		{
			basename = strrchr (filename, delim[1]);
		}
		if (basename){
			basename++;
		}
		else {
			basename = filename;
		}

		// 写BLOG
		char sql[1024] = "\0";
		sprintf (sql, "INSERT INTO T_TEST (NAME,DATA_LEN,DATA) VALUES ('%s',%d,?)", 
			basename, v.iov_len);

		v.iov_base = pBuf;
		if (conn.query()->blob_write (sql, &v, 1))
		{
			printf ("写入文件\"%s\"到数据表T_TEST成功,共%d字节.\n", basename, v.iov_len);
		}
		else 
		{
			printf ("写入文件失败:%s\n", conn.error().c_str());
		}

		delete [] pBuf;
	}

	// [2] 读取T_TEST表,并将BOLG字段中的数据写到文件
	printf ("\n[2] 读取T_TEST表,并将BOLG字段中的数据写到文件\n");
	char sql[] = "SELECT ID,NAME,DATA_LEN,DATA FROM T_TEST";
	if (!conn.query()->execute (sql)){
		printf ("执行数据库语句\"%s\"失败:%s.", sql, conn.error().c_str());	
		return 1;
	}

	MySQL::Row *r;
	while (r = conn.query()->fetch())
	{
		int i = 0;
		int id = (*r)[i++];
		char* name = (*r)[i++];
		int datalen = (*r)[i++];
		char* pBuf = (*r)[i++];
		
		char TmpFile[256] = "\0";
#ifdef WIN32
		GetTempPath(MAX_PATH, TmpFile);
#else
		strcpy (TmpFile, "/tmp/");
#endif
		strcat (TmpFile, name);
		FILE* fp = fopen (TmpFile, "wb");
		if (fp)
		{
			if (fwrite (pBuf, 1, datalen, fp) == datalen){
				printf ("读出BLOG写入文件\"%s\"(%d字节).\n", TmpFile, datalen);
			}
			fclose (fp);
		}
	}

	return 0;
}
Beispiel #4
0
int test_mysql1(int argc, char* argv[])
{
	const char* host = "172.27.237.60"; // Mysql数据库服务器所在主机,使用默认端口3306,亦可指定端口,如"localhost:3000"或"10.10.168.128:3000"
	const char* user = "******";      // Mysql用户
	std::string pass = "******";               // Mysql用户密码
	const char* db   = "repl";      // Mysql数据库名

	std::getline(std::cin, pass);

	MySQL::Connection conn;
	if (!conn.connect (host, user, pass.c_str(), db))
	{
		return 1;
	}

	// 创建一个具有BLOG字段的数据库表
	char drop_table_sql[]   = "DROP TABLE IF EXISTS T_TEST";
	char create_table_sql[] = "CREATE TABLE T_TEST\
		(\
			ID			SERIAL,\
			NAME		VARCHAR(100),\
			DATA_LEN	DECIMAL(10,0),\
			DATA		MEDIUMBLOB,\
			PRIMARY KEY  (ID)\
		)";
	
	if (!conn.execute (drop_table_sql))
		return 1;

	if (!conn.execute (create_table_sql))
		return 1;
	
	if (!conn.execute("insert into T_TEST(NAME, DATA_LEN) values('cc', 0)")) {
		printf ("error:%s\n", conn.error().c_str());
		return 1;
	}
	if (!conn.execute("set autocommit=0")) { // conn.query()->autocommit(false)
		printf ("error:%s\n", conn.error().c_str());
		return 1;
	}
	if (!conn.execute("insert into T_TEST(NAME, DATA_LEN) values('12', 0)")) {
		printf ("error:%s\n", conn.error().c_str());
		return 1;
	}
	if (!conn.query()->rollback()) {// ROLLBACK
		printf ("error:%s\n", conn.error().c_str());
		return 1;
	}
	if (!conn.execute("insert into T_TEST(NAME, DATA_LEN) values('34', 0)")) {
		printf ("error:%s\n", conn.error().c_str());
		return 1;
	}
	if (!conn.query()->commit()) { // COMMIT
		printf ("error:%s\n", conn.error().c_str());
		return 1;
	}
	if (!conn.query()->autocommit()) { // set autocommit=1
		printf ("error:%s\n", conn.error().c_str());
		return 1;
	}
	if (!conn.execute("begin")) {
		printf ("error:%s\n", conn.error().c_str());
		return 1;
	}
	if (!conn.execute("insert into T_TEST(NAME, DATA_LEN) values('56', 2)")) {
		printf ("error:%s\n", conn.error().c_str());
		return 1;
	}
	if (!conn.execute("insert into T_TEST(NAME, DATA_LEN) values('78', 2)")) {
		printf ("error:%s\n", conn.error().c_str());
		return 1;
	}
	if (!conn.query()->commit()) {
		printf ("error:%s\n", conn.error().c_str());
		return 1;
	}
	if (!conn.execute("start transaction")) {
		printf ("error:%s\n", conn.error().c_str());
		return 1;
	}
	if (!conn.execute("insert into T_TEST(NAME, DATA_LEN) values('55', 9)")) {
		printf ("error:%s\n", conn.error().c_str());
		return 1;
	}
	if (!conn.execute("insert into T_TEST(NAME, DATA_LEN) values('66', 9)")) {
		printf ("error:%s\n", conn.error().c_str());
		return 1;
	}
	if (!conn.query()->rollback()) {
		printf ("error:%s\n", conn.error().c_str());
		return 1;
	}
	if (!conn.execute("insert into T_TEST(NAME, DATA_LEN) values('77', 9)")) {
		printf ("error:%s\n", conn.error().c_str());
		return 1;
	}
	return 0;
}
#include "geometry.h"

//#include <math.h>
#include "math_papabench.h"

const  struct ellipsoid ellipsoids[ELLIPSOID_NB] = {
   {-168.,  -60.,   320., 6378249.2, 0.0034075495234250643, 0.08248325676},  /* NTF   */
   {   0.,    0.,     0., 6378137.0, 0.0033528106647474805, 0.08181919106},  /* WGS84 */
   {-87.0,  -98., -121.0, 6378388.0, 0.003367003367003367,  0.08199188998},  /* ED50  */
   {  0.0, 125.0,  194.0, 6378067.6, 0.0033155460257,       0.08181919106}   /* NAD27 */
};
/* From http://www.tandt.be/wis/WiS/eqntf.html and http://www.ign.fr/MP/GEOD/geodesie/coordonnees.html */ 
const struct lambert lamberts[LAMBERT_NB] = {
  {                                           /* LAMBERTI   */
    &ellipsoids[NTF],
    RAD_OF_DEG(DECIMAL(49., 30., 0.)),    /* phi0    */
    0.991996665,                          /* lphi0   */
    5457616.674,                          /* r0      */
    RAD_OF_DEG(DECIMAL(2., 20., 14.025)), /* lambda0 */
    600000,                               /* x0      */
    200000,                               /* y0      */
    5657617,                              /* ys      */
    0.99987734                            /* k0      */
  },
  {                                           /* LAMBERTII  */
    &ellipsoids[NTF], 
    RAD_OF_DEG(DECIMAL(46., 48., 0.)),    /* phi0    */
    0.921557361,                          /* lphi0   */
    5999695.77,                           /* r0      */
    RAD_OF_DEG(DECIMAL(2., 20., 14.025)), /* lambda0 */
    600000,                               /* x0      */