00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026 #include "ArExport.h"
00027 #include "ariaOSDef.h"
00028 #include "ArStringInfoGroup.h"
00029
00030
00031
00032
00033
00034 AREXPORT ArStringInfoGroup::ArStringInfoGroup()
00035 {
00036
00037 }
00038
00039 AREXPORT ArStringInfoGroup::~ArStringInfoGroup()
00040 {
00041
00042 }
00043
00044 AREXPORT bool ArStringInfoGroup::addString(
00045 const char *name, ArTypes::UByte2 maxLength,
00046 ArFunctor2<char *, ArTypes::UByte2> *functor)
00047 {
00048 myDataMutex.lock();
00049 if (myAddedStrings.find(name) != myAddedStrings.end())
00050 {
00051 ArLog::log(ArLog::Normal, "ArStringInfoGroups: Cannot add info '%s', duplicate", name);
00052 myDataMutex.unlock();
00053 return false;
00054 }
00055
00056 std::list<ArFunctor3<const char *, ArTypes::UByte2,
00057 ArFunctor2<char *, ArTypes::UByte2> *> *>::iterator it;
00058 ArLog::log(ArLog::Verbose, "ArStringInfoGroups: Adding info '%s'", name);
00059 myAddedStrings.insert(name);
00060 for (it = myAddStringCBList.begin(); it != myAddStringCBList.end(); it++)
00061 {
00062 (*it)->invoke(name, maxLength, functor);
00063 }
00064 ArLog::log(ArLog::Verbose, "ArStringInfoGroups: Added info '%s'", name);
00065 myDataMutex.unlock();
00066 return true;
00067 }
00068
00069 AREXPORT bool ArStringInfoGroup::addStringInt(
00070 const char *name, ArTypes::UByte2 maxLength,
00071 ArRetFunctor<int> *functor, const char *format)
00072 {
00073 return addString(name, maxLength,
00074 (new ArGlobalFunctor4<char *, ArTypes::UByte2,
00075 ArRetFunctor<int> *,
00076 const char *>(&ArStringInfoHolderFunctions::intWrapper,
00077 (char *)NULL, (ArTypes::UByte2) 0,
00078 functor, format)));
00079 }
00080
00081 AREXPORT bool ArStringInfoGroup::addStringDouble(
00082 const char *name, ArTypes::UByte2 maxLength,
00083 ArRetFunctor<double> *functor, const char *format)
00084 {
00085 return addString(name, maxLength,
00086 (new ArGlobalFunctor4<char *, ArTypes::UByte2,
00087 ArRetFunctor<double> *,
00088 const char *>(&ArStringInfoHolderFunctions::doubleWrapper,
00089 (char *)NULL, (ArTypes::UByte2) 0,
00090 functor, format)));
00091 }
00092
00093
00094 AREXPORT bool ArStringInfoGroup::addStringBool(
00095 const char *name, ArTypes::UByte2 maxLength,
00096 ArRetFunctor<bool> *functor, const char *format)
00097 {
00098 return addString(name, maxLength,
00099 (new ArGlobalFunctor4<char *, ArTypes::UByte2,
00100 ArRetFunctor<bool> *,
00101 const char *>(&ArStringInfoHolderFunctions::boolWrapper,
00102 (char *)NULL, (ArTypes::UByte2) 0,
00103 functor, format)));
00104 }
00105
00106 AREXPORT bool ArStringInfoGroup::addStringString(
00107 const char *name, ArTypes::UByte2 maxLength,
00108 ArRetFunctor<const char *> *functor, const char *format)
00109 {
00110 return addString(name, maxLength,
00111 (new ArGlobalFunctor4<char *, ArTypes::UByte2,
00112 ArRetFunctor<const char *> *,
00113 const char *>(&ArStringInfoHolderFunctions::stringWrapper,
00114 (char *)NULL, (ArTypes::UByte2) 0,
00115 functor, format)));
00116 }
00117
00118
00119 AREXPORT void ArStringInfoGroup::addAddStringCallback(
00120 ArFunctor3<const char *, ArTypes::UByte2,
00121 ArFunctor2<char *, ArTypes::UByte2> *> *functor,
00122 ArListPos::Pos position)
00123 {
00124 if (position == ArListPos::FIRST)
00125 myAddStringCBList.push_front(functor);
00126 else if (position == ArListPos::LAST)
00127 myAddStringCBList.push_back(functor);
00128 else
00129 ArLog::log(ArLog::Terse,
00130 "ArStringInfoGroup::addAddStringCallback: Invalid position.");
00131 }