修订版 | b110f544a7c6bcb4163b3bf55be79a2937bc89ef (tree) |
---|---|
时间 | 2019-03-14 18:40:23 |
作者 | dhrname <dhrname@user...> |
Commiter | dhrname |
Modify the callback interface
@@ -1,4 +1,4 @@ | ||
1 | -CC = gcc | |
1 | +CC = clang | |
2 | 2 | DEBUGMODE = -Wall -std=c11 -O0 -g -pg |
3 | 3 | NODEBUGMODE = -Wall -std=c11 -O2 |
4 | 4 | SHELL = /bin/sh |
@@ -11,13 +11,12 @@ | ||
11 | 11 | * 以下のサンプルコードでは、名前と乙が添数集合の元 |
12 | 12 | * すなわち、以下のような添数集合Λがあるとき、 |
13 | 13 | * Λ = {名前, 乙} |
14 | - * 写像集合を元とするようなある集合族Aについて、 | |
15 | - * Λから集合族Aへの写像aを、クラスと考える | |
16 | - * インスタンス化は、この集合族Aから、Aの元である写像集合B(A∍B)の元を集めた集合への写像bと考える | |
17 | - * いわば、Bの選出である | |
18 | - * メソッドの呼び出しは、写像aと写像bの関数合成、すなわち、 | |
19 | - * c = a ∘ b | |
20 | - * を満たす写像cと考える(メソッドの名前集合はΛであることに注意せよ) | |
14 | + * Λによって添数づけられた写像集合系Aの元の族Cを、クラスと考える | |
15 | + * インスタンス化は、この集合系Aから、Aの元である写像集合B(A∍B)の元を集めた集合への写像bと考える | |
16 | + * このとき、インスタンス化を選出と呼ぶ | |
17 | + * メソッドの呼び出しは、集合族Cと写像bの関数合成、すなわち、 | |
18 | + * a = C ∘ b | |
19 | + * を満たす写像aと考える(このとき、メソッドの名前集合はΛであることに注意せよ) | |
21 | 20 | * |
22 | 21 | * |
23 | 22 | * 継承は遺伝継承である(クラスの単一継承と多重継承の両方のメリットを生かす) |
@@ -1320,29 +1320,34 @@ uint_fast64_t ST_readFile(ST_Char *name, ST_File_Call callback) | ||
1320 | 1320 | if (NULL == fp) |
1321 | 1321 | { |
1322 | 1322 | /*ファイルを開くことを失敗した場合*/ |
1323 | - eprint_log("Fail to open that file\n"); | |
1323 | + eprint_log("Fail To Open That File\n"); | |
1324 | 1324 | return ST_FILE_FAIL; |
1325 | 1325 | } |
1326 | 1326 | |
1327 | 1327 | /*ファイルの長さ*/ |
1328 | 1328 | size_t filelength = fread(s, sizeof(ST_Char), ST_TEXT_LENGTH, fp); |
1329 | - | |
1329 | + if ( (sizeof(ST_Char) == 0) || (0 == ST_TEXT_LENGTH) ) | |
1330 | + { | |
1331 | + errno = EINVAL; | |
1332 | + eprint_log("ST_Char or ST_TEXT_LENGTH is Zero Error on the fread:"); | |
1333 | + return ST_FILE_FAIL; | |
1334 | + } | |
1330 | 1335 | if ( ferror(fp) ) |
1331 | 1336 | { |
1332 | 1337 | /*ファイルの読み込みに失敗した場合*/ |
1333 | - eprint_log("Fail to read that file\n"); | |
1338 | + eprint_log("Fail To Read That File\n"); | |
1334 | 1339 | fclose(fp); |
1335 | 1340 | return ST_FILE_FAIL; |
1336 | 1341 | } |
1337 | 1342 | else |
1338 | 1343 | { |
1339 | - callback(s, (uint_fast64_t)filelength); | |
1344 | + callback(name, s, (uint_fast64_t)filelength); | |
1340 | 1345 | } |
1341 | 1346 | |
1342 | 1347 | if ( EOF == fclose(fp) ) |
1343 | 1348 | { |
1344 | 1349 | /*ファイルを閉じることに失敗した場合*/ |
1345 | - eprint_log("Fail to close that file\n"); | |
1350 | + eprint_log("Fail To Close That File\n"); | |
1346 | 1351 | return ST_FILE_FAIL; |
1347 | 1352 | } |
1348 | 1353 |
@@ -1357,7 +1362,7 @@ uint_fast64_t ST_readFile(ST_Char *name, ST_File_Call callback) | ||
1357 | 1362 | if ( ST_FILE_FAIL == fd ) |
1358 | 1363 | { |
1359 | 1364 | /*ファイルを開くことを失敗した場合*/ |
1360 | - eprint_log("Fail to open that file\n"); | |
1365 | + eprint_log("Fail To Open That File" name "\n"); | |
1361 | 1366 | return ST_FILE_FAIL; |
1362 | 1367 | } |
1363 | 1368 |
@@ -1367,19 +1372,19 @@ uint_fast64_t ST_readFile(ST_Char *name, ST_File_Call callback) | ||
1367 | 1372 | if (ST_FILE_FAIL == filelength) |
1368 | 1373 | { |
1369 | 1374 | /*ファイルの読み込みを失敗した場合*/ |
1370 | - eprint_log("Fail to read that file\n"); | |
1375 | + eprint_log("Fail To Read That File\n"); | |
1371 | 1376 | close(fd); |
1372 | 1377 | return ST_FILE_FAIL; |
1373 | 1378 | } |
1374 | 1379 | else |
1375 | 1380 | { |
1376 | - callback(s, (uint_fast64_t)filelength); | |
1381 | + callback(name, s, (uint_fast64_t)filelength); | |
1377 | 1382 | } |
1378 | 1383 | |
1379 | 1384 | if ( ST_FILE_FAIL == close(fd) ) |
1380 | 1385 | { |
1381 | 1386 | /*ファイルを閉じることを失敗した場合*/ |
1382 | - eprint_log("Fail to close that file\n"); | |
1387 | + eprint_log("Fail To Close That File" name "\n"); | |
1383 | 1388 | return ST_FILE_FAIL; |
1384 | 1389 | } |
1385 | 1390 |
@@ -1396,6 +1401,7 @@ static inline ST_Token_Mode* alloca_tokens(uint_fast64_t filelength) | ||
1396 | 1401 | return s; |
1397 | 1402 | } |
1398 | 1403 | |
1404 | +/*ゲーデル数の一種である自然数のペアのコード化関数*/ | |
1399 | 1405 | static inline uint64_t pair (uint64_t x, uint64_t y) |
1400 | 1406 | { |
1401 | 1407 | return (((x+y) * (x+y+1) / 2 ) + x + 1); |
@@ -1405,7 +1411,7 @@ static inline uint64_t pair (uint64_t x, uint64_t y) | ||
1405 | 1411 | * 引数sはソースコードの文字列。 |
1406 | 1412 | * 引数filelengthはsの長さ |
1407 | 1413 | * 上記のST_readFile関数のコールバック関数として使用*/ |
1408 | -void ST_main(ST_Char* s, uint_fast64_t filelength) | |
1414 | +void ST_main(ST_Char* name, ST_Char* s, uint_fast64_t filelength) | |
1409 | 1415 | { |
1410 | 1416 | if (filelength > STAR_TOKEN_LENGTH_MAX) |
1411 | 1417 | { |
@@ -69,7 +69,7 @@ typedef struct ST_Text_Code { | ||
69 | 69 | |
70 | 70 | /*callback用の関数型 |
71 | 71 | * ST_readFile 関数で使う*/ |
72 | -typedef void (*ST_File_Call)(ST_Char*, uint_fast64_t); | |
72 | +typedef void (*ST_File_Call)(ST_Char*, ST_Char*, uint_fast64_t); | |
73 | 73 | |
74 | 74 | /*ST_readFile 関数 |
75 | 75 | * 引数nameで指定された名前のファイルの読み込みを行う*/ |
@@ -79,4 +79,4 @@ uint_fast64_t ST_readFile(ST_Char*, ST_File_Call); | ||
79 | 79 | * 引数sはソースコードの文字列。 |
80 | 80 | * 引数filelengthはsの長さ |
81 | 81 | * 上記のST_readFile関数のコールバック関数として使用*/ |
82 | -void ST_main(ST_Char*, uint_fast64_t); | |
82 | +void ST_main(ST_Char*, ST_Char*, uint_fast64_t); |
@@ -33,9 +33,10 @@ int tests_invalid(void); | ||
33 | 33 | static uint_fast64_t tests_file_length = 0; |
34 | 34 | |
35 | 35 | /*ST_readFile 関数のテストに使うコールバック用の関数*/ |
36 | -void tests_callback_file(ST_Char *s, uint_fast64_t n) | |
36 | +void tests_callback_file(ST_Char* name, ST_Char *s, uint_fast64_t n) | |
37 | 37 | { |
38 | 38 | tests_file_length = n; |
39 | + printf("FileName: %s\n", name); | |
39 | 40 | printf("%d\n", n); |
40 | 41 | printf("%s\n", s); |
41 | 42 | } |
@@ -926,8 +927,8 @@ int tests_invalid() { | ||
926 | 927 | |
927 | 928 | assert(ST_FILE_FAIL == ST_readFile(NULL, tests_callback_file)); |
928 | 929 | |
929 | - ST_main(u8"w\np\n", 1048577); | |
930 | - ST_main(u8"w\np\n", 0); | |
930 | + ST_main(u8"error", u8"w\np\n", 1048577); | |
931 | + ST_main(u8"error", u8"w\np\n", 0); | |
931 | 932 | |
932 | 933 | printf("ended error test...\n"); |
933 | 934 |