--- parser3/src/classes/image.C 2024/10/20 13:38:31 1.188 +++ parser3/src/classes/image.C 2024/12/06 22:03:58 1.193 @@ -1,7 +1,7 @@ /** @file Parser: @b image parser class. - Copyright (c) 2001-2023 Art. Lebedev Studio (http://www.artlebedev.com) + Copyright (c) 2001-2024 Art. Lebedev Studio (http://www.artlebedev.com) Authors: Konstantin Morshnev , Alexandr Petrosian */ @@ -26,7 +26,7 @@ #include "pa_table.h" #include "pa_charsets.h" -volatile const char * IDENT_IMAGE_C="$Id: image.C,v 1.188 2024/10/20 13:38:31 moko Exp $"; +volatile const char * IDENT_IMAGE_C="$Id: image.C,v 1.193 2024/12/06 22:03:58 moko Exp $"; // defines @@ -189,7 +189,14 @@ public: EXIF_TAG(0xa434, LensModel); EXIF_TAG(0xa435, LensSerialNumber); } -} exif_tag_value2name; + + static EXIF_tag_value2name &instance(){ + static EXIF_tag_value2name *singleton=NULL; + if(!singleton) + singleton=new EXIF_tag_value2name; + return *singleton; + } +}; class EXIF_gps_tag_value2name: public Hash { public: @@ -226,7 +233,15 @@ public: EXIF_TAG(0x1D, GPSDateStamp); EXIF_TAG(0x1E, GPSDifferential); } -} exif_gps_tag_value2name; + + static EXIF_gps_tag_value2name &instance(){ + static EXIF_gps_tag_value2name *singleton=NULL; + if(!singleton) + singleton=new EXIF_gps_tag_value2name; + return *singleton; + } + +}; ///*********************************************** support functions @@ -512,7 +527,7 @@ static void parse_IFD_entry(HashStringVa } if(Value* value=parse_IFD_entry_value(is_big, reader, tiff_base, entry)) { - if(const char* name=(gps)?exif_gps_tag_value2name.get(tag):exif_tag_value2name.get(tag)) + if(const char* name=(gps ? EXIF_gps_tag_value2name::instance().get(tag) : EXIF_tag_value2name::instance().get(tag))) hash.put(name, value); else hash.put(pa_uitoa((int)tag), value); @@ -1081,7 +1096,7 @@ static gdImage* load(Request& r, const S static void _load(Request& r, MethodParams& params) { - const String& file_name=params.as_string(0, FILE_NAME_MUST_NOT_BE_CODE); + const String& file_name=params.as_string(0, FILE_NAME_MUST_BE_STRING); gdImage* image=load(r, file_name); GET_SELF(r, VImage).set(&file_name, image->SX(), image->SY(), image); @@ -1337,7 +1352,7 @@ static void _font(Request& r, MethodPara if(!alphabet_length) throw Exception(PARSER_RUNTIME, 0, "alphabet must not be empty"); - gdImage* image=load(r, params.as_string(1, FILE_NAME_MUST_NOT_BE_CODE)); + gdImage* image=load(r, params.as_string(1, FILE_NAME_MUST_BE_STRING)); int spacebar_width=image->SX(); int monospace_width=0; // proportional