/*---------------------------------------------------------------------------*
* ESR_Session.c *
* *
* Copyright 2007, 2008 Nuance Communciations, Inc. *
* *
* Licensed under the Apache License, Version 2.0 (the 'License'); *
* you may not use this file except in compliance with the License. *
* *
* You may obtain a copy of the License at *
* http://www.apache.org/licenses/LICENSE-2.0 *
* *
* Unless required by applicable law or agreed to in writing, software *
* distributed under the License is distributed on an 'AS IS' BASIS, *
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. *
* See the License for the specific language governing permissions and *
* limitations under the License. *
* *
*---------------------------------------------------------------------------*/
#include "ESR_Session.h"
#include "ESR_SessionType.h"
#include "ESR_SessionTypeImpl.h"
#include <string.h>
#include "HashMap.h"
#include "IntArrayList.h"
#include "LCHAR.h"
#include "lstring.h"
#include "passert.h"
#include "plog.h"
#include "ptrd.h"
#include "pstdio.h"
static ESR_SessionType* ESR_Session = NULL;
#define CHECK_SESSION_OR_RETURN if(!ESR_Session) return ESR_INVALID_ARGUMENT
ESR_ReturnCode ESR_SessionCreate(const LCHAR* filename)
{
ESR_ReturnCode rc;
CHKLOG(rc, ESR_SessionTypeCreate(&ESR_Session));
/* Initialize default values here */
CHKLOG(rc, ESR_Session->setLCHAR(ESR_Session, L("cmdline.nametagPath"), L("")));
#ifdef USE_THREAD
CHKLOG(rc, ESR_Session->setUint16_t(ESR_Session, L("thread.priority"), PtrdThreadNormalPriority));
#endif
/* End of default values */
CHKLOG(rc, ESR_Session->importParFile(ESR_Session, filename));
return ESR_SUCCESS;
CLEANUP:
ESR_SessionDestroy();
return rc;
}
ESR_ReturnCode ESR_SessionGetProperty(const LCHAR* name, void** value, VariableTypes type)
{
CHECK_SESSION_OR_RETURN;
return ESR_Session->getProperty(ESR_Session, name, value, type);
}
ESR_SHARED_API ESR_ReturnCode ESR_SessionGetInt(const LCHAR* name, int* value)
{
CHECK_SESSION_OR_RETURN;
return ESR_Session->getInt(ESR_Session, name, value);
}
ESR_SHARED_API ESR_ReturnCode ESR_SessionGetUint16_t(const LCHAR* name, asr_uint16_t* value)
{
CHECK_SESSION_OR_RETURN;
return ESR_Session->getUint16_t(ESR_Session, name, value);
}
ESR_SHARED_API ESR_ReturnCode ESR_SessionGetSize_t(const LCHAR* name,
size_t* value)
{
CHECK_SESSION_OR_RETURN;
return ESR_Session->getSize_t(ESR_Session, name, value);
}
ESR_SHARED_API ESR_ReturnCode ESR_SessionGetFloat(const LCHAR* name, float* value)
{
CHECK_SESSION_OR_RETURN;
return ESR_Session->getFloat(ESR_Session, name, value);
}
ESR_SHARED_API ESR_ReturnCode ESR_SessionGetBool(const LCHAR* name, ESR_BOOL* value)
{
CHECK_SESSION_OR_RETURN;
return ESR_Session->getBool(ESR_Session, name, value);
}
ESR_SHARED_API ESR_ReturnCode ESR_SessionGetLCHAR(const LCHAR* name, LCHAR* value, size_t* len)
{
CHECK_SESSION_OR_RETURN;
return ESR_Session->getLCHAR(ESR_Session, name, value, len);
}
ESR_ReturnCode ESR_SessionContains(const LCHAR* name, ESR_BOOL* exists)
{
CHECK_SESSION_OR_RETURN;
return ESR_Session->contains(ESR_Session, name, exists);
}
ESR_ReturnCode ESR_SessionSetProperty(const LCHAR* name, void* value, VariableTypes type)
{
CHECK_SESSION_OR_RETURN;
return ESR_Session->setProperty(ESR_Session, name, value, type);
}
ESR_ReturnCode ESR_SessionSetInt(const LCHAR* name, int value)
{
CHECK_SESSION_OR_RETURN;
return ESR_Session->setInt(ESR_Session, name, value);
}
ESR_ReturnCode ESR_SessionSetUint16_t(const LCHAR* name, asr_uint16_t value)
{
CHECK_SESSION_OR_RETURN;
return ESR_Session->setUint16_t(ESR_Session, name, value);
}
ESR_ReturnCode ESR_SessionSetSize_t(const LCHAR* name, size_t value)
{
CHECK_SESSION_OR_RETURN;
return ESR_Session->setSize_t(ESR_Session, name, value);
}
ESR_ReturnCode ESR_SessionSetFloat(const LCHAR* name, float value)
{
CHECK_SESSION_OR_RETURN;
return ESR_Session->setFloat(ESR_Session, name, value);
}
ESR_ReturnCode ESR_SessionSetBool(const LCHAR* name, ESR_BOOL value)
{
CHECK_SESSION_OR_RETURN;
return ESR_Session->setBool(ESR_Session, name, value);
}
ESR_ReturnCode ESR_SessionSetLCHAR(const LCHAR* name, LCHAR* value)
{
CHECK_SESSION_OR_RETURN;
return ESR_Session->setLCHAR(ESR_Session, name, value);
}
ESR_ReturnCode ESR_SessionSetIntIfEmpty(const LCHAR* name, int value)
{
CHECK_SESSION_OR_RETURN;
return ESR_Session->setIntIfEmpty(ESR_Session, name, value);
}
ESR_ReturnCode ESR_SessionSetUint16_tIfEmpty(const LCHAR* name, asr_uint16_t value)
{
CHECK_SESSION_OR_RETURN;
return ESR_Session->setUint16_tIfEmpty(ESR_Session, name, value);
}
ESR_ReturnCode ESR_SessionSetSize_tIfEmpty(const LCHAR* name, size_t value)
{
CHECK_SESSION_OR_RETURN;
return ESR_Session->setSize_tIfEmpty(ESR_Session, name, value);
}
ESR_ReturnCode ESR_SessionSetFloatIfEmpty(const LCHAR* name, float value)
{
CHECK_SESSION_OR_RETURN;
return ESR_Session->setFloatIfEmpty(ESR_Session, name, value);
}
ESR_ReturnCode ESR_SessionSetBoolIfEmpty(const LCHAR* name, ESR_BOOL value)
{
CHECK_SESSION_OR_RETURN;
return ESR_Session->setBoolIfEmpty(ESR_Session, name, value);
}
ESR_ReturnCode ESR_SessionSetLCHARIfEmpty(const LCHAR* name, LCHAR* value)
{
CHECK_SESSION_OR_RETURN;
return ESR_Session->setLCHARIfEmpty(ESR_Session, name, value);
}
ESR_ReturnCode ESR_SessionRemoveProperty(const LCHAR* name)
{
CHECK_SESSION_OR_RETURN;
return ESR_Session->removeProperty(ESR_Session, name);
}
ESR_ReturnCode ESR_SessionRemoveAndFreeProperty(const LCHAR* name)
{
CHECK_SESSION_OR_RETURN;
return ESR_Session->removeAndFreeProperty(ESR_Session, name);
}
ESR_ReturnCode ESR_SessionImportCommandLine(int argc, LCHAR* argv[])
{
CHECK_SESSION_OR_RETURN;
return ESR_Session->importCommandLine(ESR_Session, argc, argv);
}
ESR_ReturnCode ESR_SessionGetSize(size_t* size)
{
CHECK_SESSION_OR_RETURN;
return ESR_Session->getSize(ESR_Session, size);
}
ESR_ReturnCode ESR_SessionGetKeyAtIndex(size_t index, LCHAR** key)
{
CHECK_SESSION_OR_RETURN;
return ESR_Session->getKeyAtIndex(ESR_Session, index, key);
}
ESR_ReturnCode ESR_SessionConvertToInt(const LCHAR* key)
{
CHECK_SESSION_OR_RETURN;
return ESR_Session->convertToInt(ESR_Session, key);
}
ESR_ReturnCode ESR_SessionConvertToUint16_t(const LCHAR* key)
{
CHECK_SESSION_OR_RETURN;
return ESR_Session->convertToUint16_t(ESR_Session, key);
}
ESR_ReturnCode ESR_SessionConvertToSize_t(const LCHAR* key)
{
CHECK_SESSION_OR_RETURN;
return ESR_Session->convertToSize_t(ESR_Session, key);
}
ESR_ReturnCode ESR_SessionConvertToFloat(const LCHAR* key)
{
CHECK_SESSION_OR_RETURN;
return ESR_Session->convertToFloat(ESR_Session, key);
}
ESR_ReturnCode ESR_SessionConvertToBool(const LCHAR* key)
{
CHECK_SESSION_OR_RETURN;
return ESR_Session->convertToBool(ESR_Session, key);
}
ESR_ReturnCode ESR_SessionGetPropertyType(const LCHAR* name, VariableTypes* type)
{
CHECK_SESSION_OR_RETURN;
return ESR_Session->getPropertyType(ESR_Session, name, type);
}
ESR_ReturnCode ESR_SessionImportParFile(const LCHAR* filename)
{
CHECK_SESSION_OR_RETURN;
return ESR_Session->importParFile(ESR_Session, filename);
}
ESR_ReturnCode ESR_SessionDestroy()
{
ESR_ReturnCode rc;
if (ESR_Session != NULL)
{
CHKLOG(rc, ESR_Session->destroy(ESR_Session));
ESR_Session = NULL;
}
return ESR_SUCCESS;
CLEANUP:
return rc;
}
ESR_ReturnCode ESR_SessionExists(ESR_BOOL* val)
{
*val = (ESR_Session != NULL);
return ESR_SUCCESS;
}
ESR_ReturnCode ESR_SessionPrefixWithBaseDirectory(LCHAR* path, size_t* len)
{
ESR_ReturnCode rc;
LCHAR baseDirectory[P_PATH_MAX];
ESR_BOOL isAbsolute;
size_t len2 = P_PATH_MAX;
/* Skip absolute paths. */
CHKLOG(rc, pf_convert_backslashes_to_forwardslashes (path));
CHKLOG(rc, pf_is_path_absolute (path, &isAbsolute));
if (isAbsolute)
return ESR_SUCCESS;
CHKLOG(rc, ESR_SessionGetLCHAR(L("parFile.baseDirectory"), baseDirectory, &len2));
CHKLOG(rc, lstrinsert(baseDirectory, path, 0, len));
return ESR_SUCCESS;
CLEANUP:
return rc;
}
ESR_SHARED_API ESR_ReturnCode ESR_SessionAddListener(ESR_SessionType* self, ESR_SessionTypeListenerPair* listener)
{
CHECK_SESSION_OR_RETURN;
return ESR_Session->addListener(ESR_Session, listener);
}
ESR_SHARED_API ESR_ReturnCode ESR_SessionRemoveListener(ESR_SessionType* self, ESR_SessionTypeListenerPair* listener)
{
CHECK_SESSION_OR_RETURN;
return ESR_Session->removeListener(ESR_Session, listener);
}