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]); }
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; } }
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; }
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 */