Skip to content

Commit b697209

Browse files
committed
Cleaned up
1 parent 88b5983 commit b697209

File tree

6 files changed

+233
-182
lines changed

6 files changed

+233
-182
lines changed

CMakeLists.txt

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -23,14 +23,15 @@ project(mapcode_cpp)
2323
#
2424
# Compiler directives:
2525
#
26-
# NO_POSIX_THREADS - No multi-threaded unit testing.
27-
# NO_FAST_ENCODE - Drop fast encoding support.
2826
# NO_SUPPORT_ALPHABETS - Drop alphabet support.
29-
# LIMIT_TO_MICRODEGREES - Limit mapcode utility using microdegrees.
27+
# NO_POSIX_THREADS - No multi-threaded unit testing - only effective for unit test.
28+
# NO_FAST_ENCODE - Drop fast encoding support - only for internal use.
3029

31-
set(CMAKE_C_FLAGS_DEBUG "-O0 -g -DDEBUG -Wall -fsanitize=address -fno-common -fno-optimize-sibling-calls -fno-omit-frame-pointer")
32-
set(CMAKE_C_FLAGS_RELWITHDEBINFO "-O2 -g -DDEBUG")
33-
set(CMAKE_C_FLAGS_RELEASE "-O3 -DNDEBUG")
30+
set(MAPCODE_OPTIONS "")
31+
32+
set(CMAKE_C_FLAGS_DEBUG "${MAPCODE_OPTIONS} -O0 -g -DDEBUG -Wall -Werror -fsanitize=address -fno-common -fno-optimize-sibling-calls -fno-omit-frame-pointer")
33+
set(CMAKE_C_FLAGS_RELWITHDEBINFO "${MAPCODE_OPTIONS} -O2 -g -DDEBUG")
34+
set(CMAKE_C_FLAGS_RELEASE "${MAPCODE_OPTIONS} -O3 -DNDEBUG")
3435

3536
set(CMAKE_CXX_FLAGS_DEBUG "-O0 -g -DDEBUG -std=c++11")
3637
set(CMAKE_CXX_FLAGS_RELWITHDEBINFO "-O2 -g -DDEBUG -std=c++11")

mapcodelib/mapcode_legacy.h

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@ extern "C" {
2828
#include "mapcode_alphabets.h"
2929
#endif
3030

31+
3132
/**
3233
* List of #defines to support legacy systems.
3334
*/
@@ -118,17 +119,21 @@ const char *convertTerritoryCodeToIsoName_Deprecated(
118119
enum Territory territory,
119120
int useShortName);
120121

121-
/**
122+
123+
124+
/* ----------------------------------------------------------------------------
122125
* ALPHABET SUPPORT
123-
* ----------------
126+
* ----------------------------------------------------------------------------
124127
*
125128
* Use -DNO_SUPPORT_ALPHABETS as a compiler option to switch off alphabet support for
126129
* more alphabets. If NO_SUPPORT_ALPHABETS is not defined, alphabets other than ROMAN
127130
* are supported.
131+
* ----------------------------------------------------------------------------
128132
*/
129133

130134
#ifndef NO_SUPPORT_ALPHABETS
131135

136+
132137
/**
133138
* DEPRECATED OLD VARIANT, NOT THREAD-SAFE:
134139
*
@@ -151,6 +156,7 @@ const char *decodeToRoman_Deprecated(const UWORD *utf16String);
151156
*/
152157
const UWORD *encodeToAlphabet_Deprecated(const char *asciiString, enum Alphabet alphabet);
153158

159+
154160
#endif // NO_SUPPORT_ALPHABETS
155161

156162
#ifdef __cplusplus

mapcodelib/mapcoder.c

Lines changed: 61 additions & 63 deletions
Original file line numberDiff line numberDiff line change
@@ -22,10 +22,13 @@
2222
#include "mapcoder.h"
2323
#include "internal_data.h"
2424
#include "internal_iso3166_data.h"
25+
#include "internal_territory_names_english.h"
2526

2627
#ifndef NO_SUPPORT_ALPHABETS
2728

29+
#include "internal_territory_alphabets.h"
2830
#include "internal_territory_names_local.h"
31+
#include "internal_alphabet_recognizer.h"
2932

3033
#endif
3134

@@ -1915,7 +1918,6 @@ static UWORD asc2lan[_ALPHABET_MAX][36] = { // A-Z equivalents for ascii charact
19151918
//
19161919
///////////////////////////////////////////////////////////////////////////////////////////////
19171920

1918-
#include "internal_alphabet_recognizer.h"
19191921

19201922
// Returns romanised version of character, or question mark in not recognized
19211923
static char getRomanVersionOf(UWORD w) {
@@ -2391,25 +2393,27 @@ static int fullmc_statemachine[24][6] = {
23912393
// 7 prefix.L === get 2nd postfix! det: prefix.LL | vowel: prefix.LA
23922394
{ERR_INVALID_MAPCODE_FORMAT, ERR_UNEXPECTED_DOT, 8, 9, ERR_MAPCODE_INCOMPLETE, ERR_UNEXPECTED_HYPHEN},
23932395
// 8 prefix.LL === get 3d postfix! white:trail | det: prefix.LLL | vowel: prefix.LLA | zero:done | hyphen: mc-
2394-
{22 | 128, ERR_UNEXPECTED_DOT, 9, 9, STATE_GO |
2395-
128,
2396-
11 |
2397-
256},
2396+
{22 | 128, ERR_UNEXPECTED_DOT, 9, 9, STATE_GO |
2397+
128,
2398+
11 |
2399+
256},
23982400
// 9 prefix.LLL or prefix.[L[L]]A === white:trail | det/vow:full mc | zero:done | hyphen:mc-
23992401
{22 |
2400-
128, ERR_UNEXPECTED_DOT, 10, 10, STATE_GO |
2401-
128, 11 |
2402-
256},
2402+
128, ERR_UNEXPECTED_DOT, 10, 10, STATE_GO |
2403+
128, 11 |
2404+
256},
24032405
//10 prefix.LLLL or prefix.AL or prefix.LAL === white:trail | zero:done | hyphen:mc-
24042406
{22 |
2405-
128, ERR_UNEXPECTED_DOT, ERR_INVALID_MAPCODE_FORMAT, ERR_INVALID_VOWEL, STATE_GO |
2406-
128, 11 |
2407-
256},
2407+
128, ERR_UNEXPECTED_DOT, ERR_INVALID_MAPCODE_FORMAT, ERR_INVALID_VOWEL, STATE_GO |
2408+
128, 11 |
2409+
256},
24082410

24092411
//11 mc- === MUST get first precision detter
24102412
{ERR_EXTENSION_INVALID_LENGTH, ERR_UNEXPECTED_DOT, 12, ERR_EXTENSION_INVALID_CHARACTER, ERR_MAPCODE_INCOMPLETE, ERR_UNEXPECTED_HYPHEN},
24112413
//12 mc-L* === Keep reading precision detters | white=trail | zero=done
2412-
{22 | 512, ERR_UNEXPECTED_DOT, 12 | 32, ERR_EXTENSION_INVALID_CHARACTER, STATE_GO | 512, ERR_UNEXPECTED_HYPHEN},
2414+
{22 | 512, ERR_UNEXPECTED_DOT, 12 | 32, ERR_EXTENSION_INVALID_CHARACTER,
2415+
STATE_GO |
2416+
512, ERR_UNEXPECTED_HYPHEN},
24132417

24142418
//13 TA === white:waitprefix | det: TAT | vowel:TAA | hyphen:TC-
24152419
{18 |
@@ -2436,7 +2440,7 @@ static int fullmc_statemachine[24][6] = {
24362440
{ERR_DOT_MISSING, 6, 4, ERR_INVALID_VOWEL, ERR_DOT_MISSING, ERR_UNEXPECTED_HYPHEN},
24372441

24382442
//22 trailing === skip whitespace until end of string
2439-
{22, ERR_UNEXPECTED_DOT, ERR_TRAILING_CHARACTERS, ERR_TRAILING_CHARACTERS, STATE_GO, ERR_UNEXPECTED_HYPHEN},
2443+
{22, ERR_UNEXPECTED_DOT, ERR_TRAILING_CHARACTERS, ERR_TRAILING_CHARACTERS, STATE_GO, ERR_UNEXPECTED_HYPHEN},
24402444

24412445
//23 TTA/TAT/TAA === space:TC waitprefix | hyphen:TC-
24422446
{18 |
@@ -2450,7 +2454,7 @@ enum MapcodeError parseMapcodeString(MapcodeElements *mapcodeElements, const cha
24502454
enum Territory territory) {
24512455
const char *a = asciiString;
24522456
int extensionLength = 0;
2453-
char *cleanPtr = 0;
2457+
char *cleanPtr = NULL;
24542458
int nondigits = 0, vowels = 0;
24552459
int state = (containsTerritory ? 0 : 18); // initial state
24562460
ASSERT(asciiString);
@@ -2726,11 +2730,10 @@ enum Territory getTerritoryCode(const char *territoryISO, enum Territory optiona
27262730
}
27272731

27282732
// PUBLIC - decode string into lat,lon; returns negative in case of error
2729-
enum MapcodeError decodeMapcodeToLatLon(
2730-
double *latDeg,
2731-
double *lonDeg,
2732-
const char *mapcode,
2733-
enum Territory territory) {
2733+
enum MapcodeError decodeMapcodeToLatLon(double *latDeg,
2734+
double *lonDeg,
2735+
const char *mapcode,
2736+
enum Territory territory) {
27342737
if ((latDeg == NULL) || (lonDeg == NULL) || (mapcode == NULL)) {
27352738
return ERR_BAD_ARGUMENTS;
27362739
} else {
@@ -2805,7 +2808,6 @@ encodeLatLonToMapcodes(Mapcodes *mapcodes, double latDeg, double lonDeg, enum Te
28052808
//
28062809
///////////////////////////////////////////////////////////////////////////////////////////////
28072810

2808-
#include "internal_territory_alphabets.h"
28092811

28102812
// PUBLIC - returns most common alphabets for territory, NULL if error
28112813
const TerritoryAlphabets *getAlphabetsForTerritory(enum Territory territory) {
@@ -2945,60 +2947,57 @@ enum Alphabet recognizeAlphabetUtf8(const char *utf8) {
29452947
//
29462948
///////////////////////////////////////////////////////////////////////////////////////////////
29472949

2948-
#include "internal_territory_names_english.h"
29492950

2950-
static int getFullTerritoryName_internal(char *territoryName, enum Territory territory, int alternative, int alphabet, const char *namelist[]) {
2951-
int nrNames = 0;
2952-
if (territoryName && namelist && alternative >= 0 && _TERRITORY_MIN < territory && territory < _TERRITORY_MAX) {
2953-
const char *s = namelist[INDEX_OF_TERRITORY(territory)];
2954-
const char *pipePtr;
2955-
int i;
2951+
static int getFullTerritoryName_internal(
2952+
char *territoryName,
2953+
enum Territory territory,
2954+
int alternative, int alphabet,
2955+
const char *namelist[]) {
29562956

2957-
// Count number of alternatives to return.
2958-
for (i = (int) strlen(s) - 1; i >= 0; --i) {
2959-
if (s[i] == '|') {
2960-
++nrNames;
2961-
}
2962-
}
2963-
for (;;) {
2964-
pipePtr = strstr(s, "|");
2957+
if (!territoryName || !namelist || alternative < 0 ||
2958+
territory <= _TERRITORY_MIN || territory >= _TERRITORY_MAX) {
2959+
return 0;
2960+
}
2961+
const char *s = namelist[INDEX_OF_TERRITORY(territory)];
2962+
const char *pipePtr;
2963+
for (;;) {
2964+
pipePtr = strstr(s, "|");
29652965

29662966
#ifndef NO_SUPPORT_ALPHABETS
2967-
if (alphabet > _ALPHABET_MIN) {
2968-
if (pipePtr) {
2969-
lengthCopy(territoryName, s, (int) (pipePtr - s), MAX_TERRITORY_FULLNAME_LENGTH);
2970-
} else {
2971-
ASSERT(strlen(s) <= MAX_TERRITORY_FULLNAME_LENGTH);
2972-
strcpy(territoryName, s);
2973-
}
2974-
if ((enum Alphabet) alphabet != recognizeAlphabetUtf8(territoryName)) { // filter out
2975-
if (!pipePtr) { // this is the last string!
2976-
break;
2977-
}
2978-
s = pipePtr + 1;
2979-
continue;
2967+
if (alphabet >= 0) {
2968+
if (pipePtr) {
2969+
lengthCopy(territoryName, s, (int) (pipePtr - s), MAX_TERRITORY_FULLNAME_LEN);
2970+
} else {
2971+
ASSERT(strlen(s) <= MAX_TERRITORY_FULLNAME_LEN);
2972+
strcpy(territoryName, s);
2973+
}
2974+
if ((enum Alphabet) alphabet != recognizeAlphabetUtf8(territoryName)) { // filter out
2975+
if (!pipePtr) { // this is the last string!
2976+
return 0;
29802977
}
2978+
s = pipePtr + 1;
2979+
continue;
29812980
}
2981+
}
29822982
#endif
29832983

2984-
if (!pipePtr) { // this is the last string!
2985-
if (alternative) { // not what we want?
2986-
break;
2987-
}
2988-
ASSERT(strlen(s) <= MAX_TERRITORY_FULLNAME_LENGTH);
2989-
strcpy(territoryName, s); // no bracket, return it all
2984+
if (!pipePtr) { // this is the last string!
2985+
if (alternative) { // not what we want?
2986+
return 0;
2987+
}
2988+
ASSERT(strlen(s) <= MAX_TERRITORY_FULLNAME_LEN);
2989+
strcpy(territoryName, s); // no bracket, return it all
2990+
return 1;
2991+
} else {
2992+
if (!alternative) { // what we want?
29902993
break;
2991-
} else {
2992-
if (!alternative) { // what we want?
2993-
break;
2994-
}
2995-
alternative--;
2996-
s = pipePtr + 2;
29972994
}
2995+
alternative--;
2996+
s = pipePtr + 2;
29982997
}
2999-
lengthCopy(territoryName, s, (int) (pipePtr - s), MAX_TERRITORY_FULLNAME_LENGTH);
30002998
}
3001-
return nrNames;
2999+
lengthCopy(territoryName, s, (int) (pipePtr - s), MAX_TERRITORY_FULLNAME_LEN);
3000+
return 1;
30023001
}
30033002

30043003
int getFullTerritoryNameEnglish(char *territoryName, enum Territory territory, int alternative) {
@@ -3007,7 +3006,6 @@ int getFullTerritoryNameEnglish(char *territoryName, enum Territory territory, i
30073006

30083007
#ifndef NO_SUPPORT_ALPHABETS
30093008

3010-
30113009
int getFullTerritoryNameLocal(char *territoryName, enum Territory territory, int alternative, enum Alphabet alphabet) {
30123010
return getFullTerritoryName_internal(territoryName, territory, alternative, (int) alphabet, localname_utf8);
30133011
}

0 commit comments

Comments
 (0)