From 34fa4116c982bb18c94da833ab209b5f3cce92b8 Mon Sep 17 00:00:00 2001 From: bdemsky Date: Wed, 21 Jun 2017 15:09:34 -0700 Subject: [PATCH] edits --- src/AST/boolean.c | 56 +++++++++++++++------------------------ src/AST/boolean.h | 14 +++++----- src/AST/element.c | 10 +++---- src/AST/element.h | 10 +++---- src/AST/ops.h | 10 ++----- src/AST/structtype.h | 35 ------------------------ src/Backend/satencoder.c | 5 ++-- src/Collections/structs.c | 2 +- src/Collections/structs.h | 2 +- src/classlist.h | 3 +++ src/csolver.c | 2 -- 11 files changed, 50 insertions(+), 99 deletions(-) delete mode 100644 src/AST/structtype.h diff --git a/src/AST/boolean.c b/src/AST/boolean.c index d0cfddd..39d7e10 100644 --- a/src/AST/boolean.c +++ b/src/AST/boolean.c @@ -1,62 +1,50 @@ #include "boolean.h" #include "structs.h" #include "csolver.h" +#include "element.h" Boolean* allocBoolean(VarType t) { BooleanVar* tmp=(BooleanVar *) ourmalloc(sizeof (BooleanVar)); GETBOOLEANTYPE(tmp)=BOOLEANVAR; - GETSTRUCTTYPE(tmp) = _BOOLEAN; - GETPARENTSVECTOR(tmp) = allocDefVectorVoid(); tmp->vtype=t; tmp->var=NULL; + allocInlineDefVectorBoolean(GETBOOLEANPARENTS(tmp)); return & tmp->base; } Boolean* allocBooleanOrder(Order* order, uint64_t first, uint64_t second) { BooleanOrder* tmp=(BooleanOrder *) ourmalloc(sizeof (BooleanOrder)); GETBOOLEANTYPE(tmp)=ORDERCONST; - GETSTRUCTTYPE(tmp) = _BOOLEAN; - GETPARENTSVECTOR(tmp) = allocDefVectorVoid(); tmp->order=order; tmp->first=first; tmp->second=second; + allocInlineDefVectorBoolean(GETBOOLEANPARENTS(tmp)); return & tmp -> base; } Boolean * allocBooleanPredicate(Predicate * predicate, Element ** inputs, uint numInputs){ - BooleanPredicate* tmp = (BooleanPredicate*) ourmalloc(sizeof(BooleanPredicate)); - GETBOOLEANTYPE(tmp)= PREDICATEOP; - GETSTRUCTTYPE(tmp) = _BOOLEAN; - GETPARENTSVECTOR(tmp) = allocDefVectorVoid(); - tmp->predicate=predicate; - tmp->inputs= allocVectorArrayElement (numInputs,inputs); - return & tmp->base; -} + BooleanPredicate* This = (BooleanPredicate*) ourmalloc(sizeof(BooleanPredicate)); + GETBOOLEANTYPE(This)= PREDICATEOP; + This->predicate=predicate; + This->inputs= allocVectorArrayElement (numInputs,inputs); + allocInlineDefVectorBoolean(GETBOOLEANPARENTS(This)); -Boolean * allocBooleanLogic(LogicOp op, Boolean * left, Boolean* right){ - BooleanLogic* tmp = (BooleanLogic*) ourmalloc(sizeof(BooleanLogic)); - GETBOOLEANTYPE(tmp) = LOGICOP; - GETSTRUCTTYPE(tmp) = _BOOLEAN; - GETPARENTSVECTOR(tmp) = allocDefVectorVoid(); - tmp->op=op; - tmp->left=left; - tmp->right=right; - return &tmp->base; + for(uint i=0;ibase; } + Boolean * allocBooleanLogicArray(CSolver *solver, LogicOp op, Boolean ** array, uint asize){ - ASSERT(asize>=2); - Boolean* boolean = allocBooleanLogic(op,array[0], array[1]); - ADDNEWPARENT(array[0], boolean); - ADDNEWPARENT(array[1], boolean); - pushVectorBoolean(solver->allBooleans,boolean); - for(uint i=2; iallBooleans,boolean); + BooleanLogic * This = ourmalloc(sizeof(BooleanLogic)); + allocInlineDefVectorBoolean(GETBOOLEANPARENTS(This)); + This->array = ourmalloc(sizeof(Boolean *)*asize); + memcpy(This->array, array, sizeof(Boolean *)*asize); + for(uint i=0;iallBooleans, (Boolean *) This); + return & This->base; } void deleteBoolean(Boolean * This) { @@ -67,6 +55,6 @@ void deleteBoolean(Boolean * This) { default: break; } - DELETEPARENTSVECTOR(This); + deleteVectorArrayBoolean(GETBOOLEANPARENTS(This)); ourfree(This); } diff --git a/src/AST/boolean.h b/src/AST/boolean.h index cd44c3c..69f5a59 100644 --- a/src/AST/boolean.h +++ b/src/AST/boolean.h @@ -4,16 +4,18 @@ #include "mymemory.h" #include "ops.h" #include "structs.h" -#include "structtype.h" +#include "astnode.h" + /** This is a little sketchy, but apparently legit. https://www.python.org/dev/peps/pep-3123/ */ -#define GETBOOLEANTYPE(o) (((Boolean *)(o))->btype) +#define GETBOOLEANTYPE(o) GETASTNODETYPE(o) +#define GETBOOLEANPARENTS(o) (&((Boolean *)(o))->parents) struct Boolean { - Struct stype; - BooleanType btype; + ASTNode base; + VectorBoolean parents; }; struct BooleanOrder { @@ -32,8 +34,8 @@ struct BooleanVar { struct BooleanLogic { Boolean base; LogicOp op; - Boolean * left; - Boolean * right; + Boolean ** array; + uint numArray; }; struct BooleanPredicate { diff --git a/src/AST/element.c b/src/AST/element.c index b4b5147..3cec477 100644 --- a/src/AST/element.c +++ b/src/AST/element.c @@ -4,25 +4,25 @@ Element *allocElementSet(Set * s) { ElementSet * tmp=(ElementSet *)ourmalloc(sizeof(ElementSet)); GETELEMENTTYPE(tmp)= ELEMSET; - GETPARENTSVECTOR(tmp) = allocDefVectorVoid(); - GETSTRUCTTYPE(tmp) = _ELEMENT; tmp->set=s; tmp->encoding=NULL; + allocInlineDefVectorASTNode(GETELEMENTPARENTS(tmp)); return &tmp->base; } Element* allocElementFunction(Function * function, Element ** array, uint numArrays, Boolean * overflowstatus){ ElementFunction* tmp = (ElementFunction*) ourmalloc(sizeof(ElementFunction)); GETELEMENTTYPE(tmp)= ELEMFUNCRETURN; - GETPARENTSVECTOR(tmp) = allocDefVectorVoid(); - GETSTRUCTTYPE(tmp) = _ELEMENT; tmp->function=function; tmp->overflowstatus = overflowstatus; tmp->Elements = allocVectorArrayElement(numArrays, array); + allocInlineDefVectorASTNode(GETELEMENTPARENTS(tmp)); + for(uint i=0;ibase; } void deleteElement(Element *This) { - DELETEPARENTSVECTOR(This); + deleteVectorArrayASTNode(GETELEMENTPARENTS(This)); ourfree(This); } diff --git a/src/AST/element.h b/src/AST/element.h index d1dabe0..56079e9 100644 --- a/src/AST/element.h +++ b/src/AST/element.h @@ -2,15 +2,15 @@ #define ELEMENT_H #include "classlist.h" #include "mymemory.h" -#include "ops.h" #include "structs.h" -#include "structtype.h" +#include "astnode.h" -#define GETELEMENTTYPE(o) (((Element*)o)->type) +#define GETELEMENTTYPE(o) GETASTNODETYPE(o) +#define GETELEMENTPARENTS(o) (&((Element*)o)->parents) struct Element { - Struct stype; - ElementType type; + ASTNode base; + VectorASTNode parents; }; struct ElementSet { diff --git a/src/AST/ops.h b/src/AST/ops.h index e5ccdeb..427b4f2 100644 --- a/src/AST/ops.h +++ b/src/AST/ops.h @@ -26,19 +26,13 @@ typedef enum OverFlowBehavior OverFlowBehavior; enum UndefinedBehavior {IGNOREBEHAVIOR, FLAGFORCEUNDEFINED, UNDEFINEDSETSFLAG, FLAGIFFUNDEFINED}; typedef enum UndefinedBehavior UndefinedBehavior; -enum BooleanType {ORDERCONST, BOOLEANVAR, LOGICOP, PREDICATEOP, TABLEPREDICATEOP}; -typedef enum BooleanType BooleanType; - enum FunctionType {TABLEFUNC, OPERATORFUNC}; typedef enum FunctionType FunctionType; enum PredicateType {TABLEPRED, OPERATORPRED}; typedef enum PredicateType PredicateType; -enum ElementType {ELEMSET, ELEMFUNCRETURN}; -typedef enum ElementType ElementType; - -enum StructType {_BOOLEAN, _ELEMENT}; -typedef enum StructType StructType; +enum ASTNodeType {ORDERCONST, BOOLEANVAR, LOGICOP, PREDICATEOP, TABLEPREDICATEOP, ELEMSET, ELEMFUNCRETURN}; +typedef enum ASTNodeType ASTNodeType; #endif diff --git a/src/AST/structtype.h b/src/AST/structtype.h deleted file mode 100644 index d58d844..0000000 --- a/src/AST/structtype.h +++ /dev/null @@ -1,35 +0,0 @@ -/* - * To change this license header, choose License Headers in Project Properties. - * To change this template file, choose Tools | Templates - * and open the template in the editor. - */ - -/* - * File: structtype.h - * Author: hamed - * - * Created on June 21, 2017, 10:37 AM - */ - -#ifndef STRUCTTYPE_H -#define STRUCTTYPE_H -#include "ops.h" -#include "structs.h" -#define GETSTRUCTTYPE(s) (((Struct*)s)->stype) -#define GETPARENTSVECTOR(s) (((Struct*)s)->parents) -#define ADDNEWPARENT(obj,par) pushVectorVoid(((Struct*)obj)->parents,(void*) par) -#define ADDNEWPARENTTOOBJECTARRAY(array,size,par) \ - do{ \ - for(int i=0; iparents) - -struct Struct { - StructType stype; - VectorVoid* parents; -}; - -#endif /* STRUCTTYPE_H */ - diff --git a/src/Backend/satencoder.c b/src/Backend/satencoder.c index 0eb2346..fafd6a3 100644 --- a/src/Backend/satencoder.c +++ b/src/Backend/satencoder.c @@ -24,7 +24,7 @@ void encodeAllSATEncoder(SATEncoder * This, CSolver *csolver) { } Constraint * encodeConstraintSATEncoder(SATEncoder *This, Boolean *constraint) { - switch(constraint->btype) { + switch(GETBOOLEANTYPE(constraint)) { case ORDERCONST: return encodeOrderSATEncoder(This, (BooleanOrder *) constraint); case BOOLEANVAR: @@ -54,6 +54,7 @@ Constraint * encodeVarSATEncoder(SATEncoder *This, BooleanVar * constraint) { } Constraint * encodeLogicSATEncoder(SATEncoder *This, BooleanLogic * constraint) { + /* Constraint *left=encodeConstraintSATEncoder(This, constraint->left); Constraint *right=NULL; if (constraint->right!=NULL) @@ -74,6 +75,6 @@ Constraint * encodeLogicSATEncoder(SATEncoder *This, BooleanLogic * constraint) } case L_IMPLIES: return allocConstraint(IMPLIES, left, right); - } + }*/ return NULL; } diff --git a/src/Collections/structs.c b/src/Collections/structs.c index 30bca42..4da4995 100644 --- a/src/Collections/structs.c +++ b/src/Collections/structs.c @@ -2,10 +2,10 @@ #include "mymemory.h" VectorImpl(Int, uint64_t, 4); -VectorImpl(Void, void *, 4); VectorImpl(Boolean, Boolean *, 4); VectorImpl(Constraint, Constraint *, 4); VectorImpl(Set, Set *, 4); VectorImpl(Element, Element *, 4); +VectorImpl(ASTNode, ASTNode *, 4); HashTableImpl(Void, void *, void *, Ptr_hash_function, Ptr_equals); HashSetImpl(Void, void *, Ptr_hash_function, Ptr_equals); diff --git a/src/Collections/structs.h b/src/Collections/structs.h index bd473d5..33e8669 100644 --- a/src/Collections/structs.h +++ b/src/Collections/structs.h @@ -6,7 +6,6 @@ #include "classlist.h" VectorDef(Int, uint64_t, 4); -VectorDef(Void, void *, 4); VectorDef(Boolean, Boolean *, 4); VectorDef(Constraint, Constraint *, 4); VectorDef(Set, Set *, 4); @@ -16,6 +15,7 @@ VectorDef(Predicate, Predicate *, 4); VectorDef(Table, Table *, 4); VectorDef(Order, Order *, 4); VectorDef(Function, Function *, 4); +VectorDef(ASTNode, ASTNode *, 4); inline unsigned int Ptr_hash_function(void * hash) { return (unsigned int)((uint64_t)hash >> 4); diff --git a/src/classlist.h b/src/classlist.h index c07a428..c5eca51 100644 --- a/src/classlist.h +++ b/src/classlist.h @@ -30,6 +30,9 @@ typedef struct BooleanVar BooleanVar; typedef struct BooleanLogic BooleanLogic; typedef struct BooleanPredicate BooleanPredicate; +struct ASTNode; +typedef struct ASTNode ASTNode; + struct Boolean; typedef struct Boolean Boolean; diff --git a/src/csolver.c b/src/csolver.c index eac2b05..5f330fd 100644 --- a/src/csolver.c +++ b/src/csolver.c @@ -140,14 +140,12 @@ Function * completeTable(CSolver *solver, Table * table) { Element * applyFunction(CSolver *solver, Function * function, Element ** array, uint numArrays, Boolean * overflowstatus) { Element* element= allocElementFunction(function,array,numArrays,overflowstatus); - ADDNEWPARENTTOOBJECTARRAY(array, numArrays, element); pushVectorElement(solver->allElements, element); return element; } Boolean * applyPredicate(CSolver *solver, Predicate * predicate, Element ** inputs, uint numInputs) { Boolean* boolean= allocBooleanPredicate(predicate, inputs, numInputs); - ADDNEWPARENTTOOBJECTARRAY(inputs, numInputs, boolean); pushVectorBoolean(solver->allBooleans, boolean); return boolean; } -- 2.34.1