--- parser3/src/main/pa_charsets.C 2001/12/15 21:28:21 1.1 +++ parser3/src/main/pa_charsets.C 2003/09/25 09:15:03 1.13 @@ -1,29 +1,43 @@ /** @file Parser: sql driver manager implementation. - Copyright (c) 2001 ArtLebedev Group (http://www.artlebedev.com) - Author: Alexander Petrosyan (http://paf.design.ru) - - $Id: pa_charsets.C,v 1.1 2001/12/15 21:28:21 paf Exp $ + Copyright (c) 2001-2003 ArtLebedev Group (http://www.artlebedev.com) + Author: Alexandr Petrosian (http://paf.design.ru) */ +static const char* IDENT_CHARSETS_C="$Date: 2003/09/25 09:15:03 $"; + #include "pa_charsets.h" -#include "pa_charset.h" + +// defines for globals + +#define CHARSET_UTF8_NAME "UTF-8" // globals -Charsets *charsets; +Charset UTF8_charset(0, *new String(CHARSET_UTF8_NAME), 0/*no file=system*/); -// +Charsets charsets; -Charsets::Charsets(Pool& apool) : Hash(apool) { -} +// methods -static void destroy_charset(const Hash::Key& key, Hash::Val *& value, void *) { - static_cast(value)->~Charset(); +Charsets::Charsets() { + put(UTF8_charset.NAME(), &UTF8_charset); } -Charsets::~Charsets() { - for_each(destroy_charset); +Charset& Charsets::get(const String::Body ANAME) { + if(Charset* result=Hash::get(ANAME)) + return *result; + else + throw Exception("parser.runtime", + new String(ANAME, String::L_TAINTED), + "unknown charset"); } +void Charsets::load_charset(Request_charsets& charsets, const String::Body ANAME, const String& afile_spec) { + //we know that charset? + if(Hash::get(ANAME)) + return; // don't load it then + + put(ANAME, new Charset(&charsets, ANAME, &afile_spec)); +}