DataMuseum.dkPresents historical artifacts from the history of: Rational R1000/400 Tapes |
This is an automatic "excavation" of a thematic subset of
See our Wiki for more about Rational R1000/400 Tapes Excavated with: AutoArchaeologist - Free & Open Source Software. |
top - downloadIndex: ┃ C T ┃
Length: 13990 (0x36a6) Types: TextFile Names: »COLLECTION_ADA«
└─⟦a7d1ea751⟧ Bits:30000550 8mm tape, Rational 1000, !users!projects 94_04_11 └─ ⟦129cab021⟧ »DATA« └─⟦this⟧ └─⟦f64eaa120⟧ Bits:30000752 8mm tape, Rational 1000, !projects 93 02 16 └─ ⟦6f12a12be⟧ »DATA« └─⟦this⟧ └─⟦2f6cfab89⟧ Bits:30000547 8mm tape, Rational 1000, !projects 94-01-04 └─ ⟦d65440be7⟧ »DATA« └─⟦this⟧
with instanceCounter; separate(expertSystem) package body collection is function defaultName(aRef : expertSystem.reference) return objectName is Limage : constant string := idO'IMAGE(aRef.idObject); Limage2 : objectName; begin Limage2(1..Limage'LENGTH):=Limage(1..Limage'LENGTH); for i in natural(Limage'LENGTH+1)..natural(className'LENGTH) loop Limage2(i):=' '; end loop; return(Limage2); end ; function restrict(theCollection : collection.object; quantity : natural := ANY) return collection.object is result : object(theCollection.size); begin if theCollection.count /= 0 then for i in 1..theCollection.count loop if predicate(theCollection.cells(i)) then add(result, theCollection.cells(i)); if (quantity /= ANY) and then (result.count>=quantity) then return result; end if; end if; end loop; end if; return result; end restrict; function findOne( theCollection : collection.object) return expertSystem.reference is begin if theCollection.count /= 0 then for i in 1..theCollection.count loop if predicate(theCollection.cells(i)) then return(theCollection.cells(i)); end if; end loop; end if; return nullReference; end findOne; function notExist( theCollection : collection.object) return boolean is begin if theCollection.count /= 0 then for i in 1..theCollection.count loop if predicate(theCollection.cells(i)) then return(FALSE); end if; end loop; end if; return (TRUE); end notExist; function exist( theCollection : collection.object) return boolean is begin if theCollection.count /= 0 then for i in 1..theCollection.count loop if predicate(theCollection.cells(i)) then return(TRUE); end if; end loop; end if; return (FALSE); end exist; function theMost(theCollection : collection.object) return expertSystem.reference is ref: expertSystem.reference; begin if theCollection.count = 0 then return nullReference; end if; ref := theCollection.cells(1); for i in 2..theCollection.count loop if not predicate(ref, theCollection.cells(i)) then ref := theCollection.cells(i); end if; end loop; return ref; end theMost; function cardinality(theCollection : collection.object) return natural is begin return theCollection.count; end cardinality; function isFull(theCollection : collection.object) return boolean is begin return theCollection.count = theCollection.size; end isFull; function isNull(theCollection : collection.object) return boolean is begin return theCollection.count = 0; end isNull; function isNotNull(theCollection : collection.object) return boolean is begin return theCollection.count /= 0; end isNotNull; function isNull(aRef: expertSystem.reference) return boolean is begin return aRef = nullReference; end isNull; function isNotNull(aRef: expertSystem.reference) return boolean is begin return aRef /= nullReference; end isNotNull; procedure add(theCollection : in out object; aRef : in expertSystem.reference) is alreadyExist: boolean :=FALSE; begin if (theCollection.count /= 0) and then (aRef.idClass /= theCollection.cells(1).idClass) then raise badClass; end if; if isFull(theCollection) then declare collection1: collection.object(theCollection.size + theCollection.size / 2 ); begin collection1.cells(1..theCollection.size) := theCollection.cells(1..theCollection.size); collection1.count := theCollection.count; collection1.unity := theCollection.unity; theCollection := collection1; end; end if; for i in 1..theCollection.count loop if aRef.idObject = theCollection.cells(i).idObject then alreadyExist := TRUE; end if; end loop; if not alreadyExist then theCollection.count := theCollection.count + 1; theCollection.cells(theCollection.count) := aRef; end if; end add; procedure remove(theCollection : in out collection.object; aRef : in expertSystem.reference) is begin if (theCollection.count /= 0) and then theCollection.cells(1).idClass = aRef.idClass then for i in 1..theCollection.count loop if theCollection.cells(i).idObject = aRef.idObject then for j in i..theCollection.count-1 loop theCollection.cells(j) := theCollection.cells(j+1); end loop; theCollection.count := theCollection.count - 1; exit; end if; end loop; end if; end remove; procedure upDate(theCollection : in out collection.object; aRef : in expertSystem.reference) is begin if (theCollection.count /= 0) and then theCollection.cells(1).idClass = aRef.idClass then for i in 1..theCollection.count loop if theCollection.cells(i).idObject = aRef.idObject then theCollection.cells(i).date := instanceCounter.newObject; exit; end if; end loop; end if; end upDate; procedure upDate(theCollection : in out collection.object; aRef : in expertSystem.reference; withDate : in long_integer) is begin if (theCollection.count /= 0) and then theCollection.cells(1).idClass = aRef.idClass then for i in 1..theCollection.count loop if theCollection.cells(i).idObject = aRef.idObject then theCollection.cells(i).date := withDate; exit; end if; end loop; end if; end upDate; procedure upDateAll(theCollection : in out collection.object) is aDate : long_integer; begin aDate := instanceCounter.newObject; for i in 1..theCollection.count loop theCollection.cells(i).date := aDate; end loop; end upDateAll; procedure clear(theCollection : in out collection.object) is begin theCollection.count := 0; theCollection.unity := 1; end clear; function union(collection1 : collection.object ; collection2 : collection.object) return collection.object is result : collection.object(collection1.size+collection2.size); tampon : collection.object(collection2.size); begin if collection1.count = 0 then result := collection2; elsif collection2.count = 0 then result := collection1; else if collection1.cells(1).idClass /= collection2.cells(1).idClass then raise badClass; else tampon := collection2; for i in 1..collection1.count loop for j in 1..tampon.count loop if collection1.cells(i).idObject = tampon.cells(j).idObject then remove(tampon, tampon.cells(j)); exit; end if; end loop; add(result, collection1.cells(i)); end loop; result.count := result.count + tampon.count; result.cells(1..result.count+tampon.count) := result.cells(1..result.count) & tampon.cells(1..tampon.count); end if; end if; return result; end union; function max(int1, int2 : integer) return integer is begin if int1 > int2 then return int1; else return int2; end if; end max; function intersection(collection1 : collection.object; collection2 : collection.object) return collection.object is result : collection.object(max(collection1.size,collection2.size)); tampon : collection.object(collection2.size); begin if (collection1.count /= 0) and (collection2.count /= 0) then if (collection1.cells(1).idClass /= collection2.cells(1).idClass) then raise badClass; else tampon := collection2; for i in 1..collection1.count loop for j in 1..tampon.count loop if collection1.cells(i).idObject = tampon.cells(j).idObject then remove(tampon, tampon.cells(j)); add(result, collection1.cells(i)); exit; end if; end loop; end loop; end if; end if; return result; end intersection; function difference(collection1 : collection.object ; collection2 : collection.object) return collection.object is result : collection.object(collection1.size); begin if collection2.count = 0 then result := collection1; elsif (collection1.count /= 0) then if (collection1.cells(1).idClass /= collection2.cells(1).idClass) then raise badClass; else result := collection1; for i in 1..collection1.count loop for j in 1..collection2.count loop if collection1.cells(i).idObject=collection2.cells(j).idObject then remove(result, collection1.cells(i)); exit; end if; end loop; end loop; end if; end if; return result; end difference; function member (theCollection : collection.object; aRef : expertSystem.reference) return boolean is found: boolean :=FALSE; begin if theCollection.count = 0 then found := FALSE; elsif (aRef.idClass /= theCollection.cells(1).idClass) then found := FALSE; else for i in 1..theCollection.count loop if aRef.idObject = theCollection.cells(i).idObject then found := TRUE; exit; end if; end loop; end if; return found; end member; function isInclude(collection1 : collection.object ; collection2 : collection.object) return boolean is include : boolean :=FALSE; checkColl : boolean :=FALSE; begin if collection1.count = 0 then include := TRUE; elsif (collection2.count /= 0) and (collection1.cells(1).idClass = collection2.cells(1).idClass) then include := TRUE; for i in 1..collection1.count loop for j in 1..collection2.count loop if collection1.cells(i).idObject = collection2.cells(j).idObject then checkColl := TRUE; exit; end if; end loop; if checkColl = FALSE then include := FALSE; exit; else checkColl := FALSE; end if; end loop; end if; return include; end isInclude; function ">"(collection1 : collection.object ; collection2 : collection.object) return boolean is begin return isInclude(collection2, collection1) ; end ">"; function asObject(aRef : expertSystem.reference) return collection.object is result : collection.object; begin add(result,aRef); return result; end asObject; function get(theCollection : collection.object; number : positive :=1) return expertSystem.reference is begin if number > theCollection.count then return nullReference; else return theCollection.cells(number); end if; end get; function first(theCollection : collection.object) return expertSystem.reference is begin return get(theCollection,1); end first; function rest (theCollection : collection.object) return collection.object is aCollection : collection.object; begin aCollection:=theCollection; collection.remove(aCollection,get(theCollection,1)); return(aCollection); end rest; function get(theCollection : collection.object; fromPos : positive:=1; toPos : positive) return collection.object is result : collection.object; borneFrom : natural; borneTo : natural; begin if toPos > theCollection.count then borneTo := theCollection.count; else borneTo := toPos; end if; if fromPos < theCollection.cells'FIRST then borneFrom := theCollection.cells'FIRST; else borneFrom := fromPos; end if; for i in borneFrom..borneTo loop add(result, get(theCollection,i)); end loop; return result; end get; procedure forAll(theCollection : collection.object) is begin for i in 1..theCollection.count loop action(get(theCollection,i)); end loop; end forAll; procedure sort(theCollection : in out collection.object) is repere: integer range theCollection.cells'FIRST-1.. theCollection.cells'LAST; nombre: expertSystem.reference; begin for i in theCollection.cells'FIRST+1..theCollection.count-1 loop nombre := theCollection.cells(i); repere := i - 1; while (repere /= theCollection.cells'FIRST-1) and then (nombre < theCollection.cells(repere)) loop theCollection.cells(repere+1).idClass := theCollection.cells(repere).idClass; repere := repere - 1; end loop; theCollection.cells(repere+1) := nombre; end loop; end sort; package body iterator is function open(theCollection : collection.object) return iter is begin if theCollection.count = 0 then return 0; else return 1; end if; end open; function get(theCollection : collection.object; i : iter) return expertSystem.reference is idx: integer; begin idx := INTEGER(i); if idx > theCollection.count then raise illegalAccess; end if; return theCollection.cells(idx); exception when CONSTRAINT_ERROR => raise illegalAccess; end get; function next(theCollection : collection.object; i : iter) return iter is idx: integer; begin idx := INTEGER(i) + 1; if idx > theCollection.count then return 0; else return iter(idx); end if; exception when CONSTRAINT_ERROR => raise illegalAccess; end next; function atEnd(theCollection : collection.object ; i : iter) return boolean is begin return i = 0; end atEnd; end iterator; end collection;