예제 #1
0
파일: Model.c 프로젝트: bort-four/Logic
void initModel(_md)
{
	/* initialize vectors */
	initVect(preds_m,		Pred);
	initVect(funcs_m,		Func);
	initVect(axioms_m,		Axiom);
	initVect(taskPtrs_m,	Task*);
	initVect(tmpFacts_m,	Fact);
	initVect(restrs_m,		Restriction);
	initVect(types_m,		DataType);

	/* create standart datatypes */
	addDataType("Boolean",	modelPtr);
	addDataType("Integer",	modelPtr);
	addDataType("Real",		modelPtr);
	
	/* CONST_TRUE, CONST_FALSE */
	//~ DataType* boolPtr = ptr(DataType, types_m) + DT_BOOL;
	DataType* boolPtr = getTypePtr(DT_BOOL);
	addBack(boolPtr->constNames, char*, getDynamicStr("True"));
	addBack(boolPtr->constNames, char*, getDynamicStr("False"));
	
	/* create arithmetic fuctions */
	size_t funcNum;
	DataTypeId paramTypes[] = {DT_INT, DT_INT};
	
	for (funcNum = 0; funcNum < ARITHMETIC_FUNCTION_COUNT; ++funcNum)
	{	
		Func func = createFunc(	(char*)ARITH_FUNCTION_NAMES[funcNum],
								ARITH_FUNCTION_PAR_COUNTS[funcNum],
								paramTypes, DT_REAL);
		addFunc(func, modelPtr);
	}
	
	/* create arithmetic relations */
	size_t predNum;
	
	for (predNum = 0; predNum < ARITHMETIC_RELATIONS_COUNT; ++predNum)
	{	
		Pred pred = createFunc(	(char*)ARITH_RELATION_NAMES[predNum],
								ARITH_RELATION_PAR_COUNTS[predNum],
								paramTypes, DT_BOOL);
		addPred(pred, modelPtr);
	}
	
	/* other initialization */
	initVect(modelPtr->errors, Error);
	initVect(modelPtr->sources, Source);
	modelPtr->currSrcPtr = NULL;
	modelPtr->totalFactCt = 0;
	modelPtr->debugStream = modelPtr->errorStream = NULL;
}
예제 #2
0
ServletConfigImpl* AppContext::addServlet(const std::string& path, const std::string& name, const std::string& dso, bool hidden, size_t maxRequestSize, size_t maxFileSize)
{
	std::string fullpath("/");
	if(!getServletContextName().empty()) { // avoid starting with "//"
		fullpath.append(getServletContextName());
		fullpath+='/';
	}
	fullpath.append(path);
	ServletDesc* desc = getDesc(fullpath);
	if(desc) { // Another servlet is already configured for the path in this app...
		std::cerr<<"Path "<<fullpath<<" is already used"<<std::endl;
		return 0;
	}
	void* dsoHandle=dlopen(dso.c_str(),RTLD_LAZY);
	if(!dsoHandle) {
		std::cerr<<"Error loading library \""<<dso<<"\": "<<dlerror()<<std::endl;
		return 0;
	}
	servletcreatefunc_t createFunc=(servletcreatefunc_t)dlsym(dsoHandle,(name + "_createServlet").c_str());
	if(!createFunc) {
		std::cerr<<"Could not locate servlet "<<name<<" in the library "<<dso<<": "<<dlerror()<<std::endl;
		return 0;
	}
	ServletConfigImpl* config=new ServletConfigImpl(this, name);
	desc=new ServletDesc(createFunc(), config, dsoHandle, fullpath, maxRequestSize, maxFileSize, m_mime, m_enc, m_cache);
	m_maptop[fullpath]=desc;
	if(!hidden) {
		if(!RequestHandler::addServlet(fullpath,getServletContainer(fullpath))) { // Another such URL exists globally
			unloadServlet(fullpath);
			delServlet(fullpath);
			return 0;
		}
	}
	return config;
}
예제 #3
0
		bool parse(uint16_t &pointer,char* text){

			if (!Controller::parse_uint8(interpFuncID,pointer,text)){
				controller->getErrorLogger()->println("Could not parse interp id");
				return false;
			}

			if (text[pointer]!='['){
				controller->getErrorLogger()->println("Missing opening bracket for interp");
				return false;
			}

			pointer++;

			eval = createFunc(pointer,text,controller);

			if (eval == 0 ){
				controller->getErrorLogger()->println("Failed to parse function to pass to interp");
				return false;
			}

			if (text[pointer]!=']'){
				controller->getErrorLogger()->print("Found '");
				controller->getErrorLogger()->print(text[pointer]);
				controller->getErrorLogger()->println("' expect closing bracket ']' for interp");
				delete eval;
				eval = 0;
				return false;
			}

			pointer++;

			return true;
		}
예제 #4
0
	bool parse(uint16_t &pointer,char* text){

	val = createFunc(pointer,text,controller);
		if (val == 0 )
			return false;

		return true;
	}
예제 #5
0
	bool parse(uint16_t &pointer,char* text){
		eval = createFunc(pointer,text,controller);
		if (eval == 0 )
			return false;
		if (text[pointer] != '[')
			return false;
		pointer++;
		tVal = createFunc(pointer,text,controller);
		if (tVal == 0 )
			return false;
		if (text[pointer] != ',')
			return false;
		pointer++;
		fVal = createFunc(pointer,text,controller);
		if (fVal == 0 )
			return false;
		if (text[pointer] != ']')
			return false;
		pointer++;
		return true;
	}
예제 #6
0
파일: parser.c 프로젝트: shenchi/mycc
void mainfunc(symbol_t t){
    func_t f;
    ident_t id;
    if(t->type!=VOID){
        msg(ERR, "wrong type for main()", line);
		t->type = VOID;
    }
    if(sym->type!=LPAREN){
        msg(ERR, "missing \'(\'", line);
    }else
		nextSym();

    if(sym->type!=RPAREN){
        msg(ERR, "missing \')\'", line);
		ERROR_STATUS = 1;
		do
			nextSym();
		while(sym->type != RPAREN && sym->type != LBRACE && sym->type != SEOF);
		if(sym->type == SEOF)return;
    }
    f = createFunc();
    f->local = createTable();
    id = createid(FUNC, TVOID, "main", 0);
    if(!id){
        msg(DEBUG, "failed defining main()", line);
		exit(0);
    }
    id->extra = (void*)f;
    context = f;
    if(sym->type == RPAREN)nextSym();
    if(sym->type!=LBRACE){
        msg(ERR, "missing \'{\'", line);
		ERROR_STATUS = 1;
    }else
		nextSym();

    body();

    gen(RET, 0, 0, 0);

    if(sym->type!=RBRACE){
        msg(ERR, "missing \'}\'", line);
		ERROR_STATUS = 1;
    }else
		nextSym();

    context = 0;
    
}
예제 #7
0
	bool parse(uint16_t &pointer,char* input){
		if (input[pointer]!='[')
			return false;
		pointer++;
		if (input[pointer]!='$')
			return false;
		pointer++;

		target = new ADDR1(pointer,input);

		pointer++;
		if (input[pointer]=='"'){
				pointer++;
				int i;
				for (i = 0; i < 255; i++){
					char x = input[pointer+i];
					if (x=='"' ){
						text = new char[i+1];
						text[i]='\0';
						i--;
						for (;i>=0;i--){
							text[i] = input[pointer+i];
						}
						pointer++;
						return true;
					}
					if (x=='\0'){
						controller->getErrorLogger()->println("Write text operator missing closing \"");
						return false;
					}
				}
				controller->getErrorLogger()->println("Write text too long");
				return false;
		}else{
			valFunc = createFunc(pointer,input,controller);
			pointer++;
			if (valFunc == 0){
				controller->getErrorLogger()->println("Couldn't parse function to assign for write");
				return false;
			}
			return true;
		}
	}
예제 #8
0
//----------------------------------------------------------------------------//
void System::setXMLParser(const String& parserName)
{
#ifndef CEGUI_STATIC
    cleanupXMLParser();
    // load dynamic module
    d_parserModule = new DynamicModule(String("CEGUI") + parserName);
    // get pointer to parser creation function
    XMLParser* (*createFunc)(void) =
        (XMLParser* (*)(void))d_parserModule->getSymbolAddress("createParser");
    // create the parser object
    d_xmlParser = createFunc();
    // make sure we know to cleanup afterwards.
    d_ourXmlParser = true;
    // perform initialisation of XML parser.
    d_xmlParser->initialise();
#else
    Logger::getSingleton().logEvent(
        "System::setXMLParser(const String& parserName) called from statically "
        "linked CEGUI library - unable to load dynamic module!", Errors);
#endif
}
예제 #9
0
void
IndexServer::RegisterAddOn(entry_ref ref)
{
	STRACE("RegisterAddOn %s\n", ref.name);

	BPath path(&ref);
	image_id image = load_add_on(path.Path());
	if (image < 0)
		return;

	create_index_server_addon* createFunc;

	// Get the instantiation function
	status_t status = get_image_symbol(image, "instantiate_index_server_addon",
		B_SYMBOL_TYPE_TEXT, (void**)&createFunc);
	if (status != B_OK) {
		unload_add_on(image);
		return;
	}

	IndexServerAddOn* addon = createFunc(image, ref.name);
	if (!addon) {
		unload_add_on(image);
		return;
	}
	if (!fAddOnList.AddItem(addon)) {
		unload_add_on(image);
		return;
	}

	for (int i = 0; i < fVolumeWatcherList.CountItems(); i++) {
		VolumeWatcher* watcher = fVolumeWatcherList.ItemAt(i);
		FileAnalyser* analyser = _SetupFileAnalyser(addon, watcher->Volume());
		if (!analyser)
			continue;
		if (!watcher->AddAnalyser(analyser))
			delete analyser;
	}

}
예제 #10
0
DecorAddOn*
DecorManager::_LoadDecor(BString _path, status_t& error )
{
	if (_path == "Default") {
		error = B_OK;
		return &fDefaultDecor;
	}

	BEntry entry(_path.String(), true);
	if (!entry.Exists()) {
		error = B_ENTRY_NOT_FOUND;
		return NULL;
	}

	BPath path(&entry);
	image_id image = load_add_on(path.Path());
	if (image < 0) {
		error = B_BAD_IMAGE_ID;
		return NULL;
	}

	create_decor_addon*	createFunc;
	if (get_image_symbol(image, "instantiate_decor_addon", B_SYMBOL_TYPE_TEXT,
			(void**)&createFunc) != B_OK) {
		unload_add_on(image);
		error = B_MISSING_SYMBOL;
		return NULL;
	}

	char name[B_FILE_NAME_LENGTH];
	entry.GetName(name);
	DecorAddOn* newDecor = createFunc(image, name);
	if (newDecor == NULL || newDecor->InitCheck() != B_OK) {
		unload_add_on(image);
		error = B_ERROR;
		return NULL;
	}

	return newDecor;
}
예제 #11
0
파일: parser.c 프로젝트: shenchi/mycc
void funcdef(symbol_t t, symbol_t id){
    symbol_t pt, pid;
    ident_t np;
    func_t f;

    if(findTable(global, (char*)(id->value))){
        msg(ERR, "identifier redefinition", line);
		ERROR_STATUS = 1;
		do
			id->value = (int)ccstrcat((char*)(id->value), '@');
		while(findTable(global, (char*)(id->value)));
    }

    f = createFunc();
    f->local = createTable();
    np = createid(FUNC, translate(t->type), (char*)(id->value), 0);
    if(!np){
        msg(ERR, "identifier redefinition", line);
		ERROR_STATUS = 1;
		exit(0);
    }
    np->extra = (void*)f;
    context = f;

    if(sym->type!=RPAREN){
        while(1){
            if(!isType(sym)){
                msg(ERR, "missing a type name for param", line);
            }
            pt = copySym(sym);
            nextSym();
            if(sym->type!=ID){
                msg(ERR, "missing a identifier after a type name", line);
            }
            pid = copySym(sym);
            if((np=createvar(pt, pid))==0){
                msg(ERR, "identifier redefinition", line);
            }
            addparam(f, np);
			np->loc = LOC_PARAM;
            mfree(pt);mfree(pid);
            nextSym();
            if(sym->type!=COMMA)break;
            nextSym();
        }
    }
    if(sym->type!=RPAREN){
        msg(ERR, "missing \')\'", line);
    }
    nextSym();
    if(sym->type!=LBRACE){
        msg(ERR, "missing \'{\'", line);
    }
    nextSym();
    body();
	if(t->type==VOID)
		gen(RET, 0, 0, 0);
    if(sym->type!=RBRACE){
        msg(ERR, "missing \'}\'", line);
    }
    context = 0;
    nextSym();
}
예제 #12
0
	bool parse(uint16_t &pointer,char* text){
		lVal = createFunc(pointer,text,controller);
		if (lVal == 0 )
			return false;
		switch(text[pointer]){
			case '&':
				pointer++;
				if (text[pointer]!='&')
					return false;
				compType = AND;
				break;
			case '|':
				pointer++;
				if (text[pointer]!='|')
					return false;
				compType = OR;
				break;
			case '=':
				compType = EQ;
				pointer++;
				if (text[pointer]!='=')
					return false;
				break;
			case '!':
				compType = EQ;
				pointer++;
				if (text[pointer]!='=')
					return false;
				break;
			case '<':
				if (text[pointer+1]=='='){
					compType = LTE;
					pointer++;
				} else {
					compType = LT;
				}
				break;
			case '>':
				if (text[pointer+1]=='='){
					compType = GTE;
					pointer++;
				} else {
					compType = GT;
				}
				break;
			case '+':
				compType = ADD;
				break;
			case '-':
				compType = SUB;
				break;
			case '/':
				compType = DIV;
				break;
			case '*':
				compType = MULT;
				break;
			case '^':
				compType = POW;
				break;
			case '%':
				compType = MOD;
				break;
			default:
				return false;
		}
		pointer++;
		rVal = createFunc(pointer,text,controller);
		if (rVal == 0 )
			return false;
		if (text[pointer] != '}')
			return false;
		pointer++;
		ADDRTYPE lType = lVal->getType();
		ADDRTYPE rType = rVal->getType();
		if (rType>lType)
			type = rType;
		else
			type = lType;
		return true;
	}