00001 #include <stdafx.h> 00002 #include "Guardian.h" 00003 00004 ScriptDescriptor::ScriptDescriptor(CString& name, CString* params, CString* types, int numParams) 00005 { 00006 scriptName = name; 00007 paramNames = params; 00008 paramTypes = types; 00009 numParameters = numParams; 00010 } 00011 00012 ScriptDescriptor::ScriptDescriptor(CString model, CString& name, int numParams) 00013 { 00014 modelName = model; 00015 scriptName = name; 00016 paramNames = new CString[numParams]; 00017 paramTypes = new CString[numParams]; 00018 paramSizes = new int [numParams]; 00019 paramDatas = new int [numParams]; 00020 numParameters = -1; 00021 } 00022 00023 void ScriptDescriptor::AddParamLine(CString paramName, CString paramType, int paramSize, int paramData) 00024 { 00025 ++numParameters; 00026 paramNames[numParameters] = paramName; 00027 paramTypes[numParameters] = paramType; 00028 paramSizes[numParameters] = paramSize; 00029 paramDatas[numParameters] = paramData; 00030 } 00031 00032 CString ScriptDescriptor::GetModelName (void) 00033 { return modelName; } 00034 00035 CString ScriptDescriptor::GetScriptName (void) 00036 { return scriptName; } 00037 00038 int ScriptDescriptor::GetNumParameters (void) 00039 { return numParameters; } 00040 00041 00042 CString* ScriptDescriptor::GetParameters (void) 00043 { return paramNames; } 00044 00045 CString* ScriptDescriptor::GetDataTypes (void) 00046 { return paramTypes; } 00047 00048 int* ScriptDescriptor::GetSizes (void) 00049 { return paramSizes; } 00050 00051 int* ScriptDescriptor::GetDatas (void) 00052 { return paramDatas;} 00053 00054 00055 ScriptCollection::ScriptCollection (void) 00056 { 00057 numScripts = 0; 00058 } 00059 00060 int ScriptCollection::EnforceList (ScriptDescriptor* adrsDescriptor) 00061 { 00062 if (numScripts == 0) { return 1; } 00063 00064 00065 for (int i = 0; i < numScripts; ++i) 00066 { 00067 if (scriptList[i]->GetScriptName() == adrsDescriptor->GetScriptName()) 00068 { 00069 if ( scriptList[i]->GetNumParameters() == adrsDescriptor->GetNumParameters()) 00070 { 00071 bool syntaxCorrect; 00072 00073 CString* goodNames = scriptList[i]->GetParameters(); 00074 CString* goodTypes = scriptList[i]->GetDataTypes(); 00075 00076 CString* checkNames = adrsDescriptor->GetParameters(); 00077 CString* checkTypes = adrsDescriptor->GetDataTypes(); 00078 00079 int* goodSizes = scriptList[i]->GetSizes(); 00080 int* goodDatas = scriptList[i]->GetDatas(); 00081 00082 int* checkSizes = adrsDescriptor->GetSizes(); 00083 int* checkDatas = adrsDescriptor->GetDatas(); 00084 00085 for (int j =0; j <= scriptList[i]->GetNumParameters(); ++j) 00086 { 00087 syntaxCorrect = false; 00088 for (int k = 0; k <= adrsDescriptor->GetNumParameters(); ++k) 00089 { 00090 if ((goodNames[j] == checkNames[k]) && ( goodTypes[j] == checkTypes[k]) && (goodSizes[j] == checkSizes[k]) && (goodDatas[j] == checkDatas[k])) 00091 { syntaxCorrect = true;} 00092 00093 } 00094 00095 if (syntaxCorrect == false) { return -1 - j; } 00096 00097 } 00098 return 0; 00099 } 00100 else { return -1; } 00101 00102 } 00103 } 00104 return 1; 00105 } 00106 00107 int ScriptCollection::AddDescriptor (ScriptDescriptor* adrsDescriptor) 00108 { 00109 00110 int ret=0; 00111 ret = EnforceList(adrsDescriptor); 00112 if (ret == 1) 00113 { scriptList[numScripts] = adrsDescriptor; 00114 ++numScripts; 00115 return 0; 00116 } 00117 else if (ret == 0) 00118 { 00119 return 0; 00120 } 00121 else { 00122 return (-(ret+1))+1; 00123 } 00124 } 00125 00126 CString ScriptCollection::GetModelName (int modelIndex) 00127 { return scriptList[modelIndex]->GetModelName(); }