Re: Generic Collection
- From: Georg Bauhaus <rm.tsoh+bauhaus@xxxxxxxxxxxxxxxxxx>
- Date: Tue, 08 May 2007 23:00:23 +0200
On Tue, 2007-05-08 at 12:29 -0700, andrew wrote:
I cannot say for sure if the "is a" relations aren't entirely
artificial. It seems to me it would work either way. The difference
for me is that I cannot visualize the composition you mentioned.
As you noted, I meant that "a tuple is a collection of attributes"
doesn't necessarily imply inheritance relationship; TUPLE doesn't have
to inherit from a type COLLECTION_OF_ATTRIBUTES.
I think there are various possibilities; RDB2 (below RDB) shows
types that have components of other types (that is, are composed :-)
but are otherwise unrelated.
Package RDB desclares "is a" relations in the sense you describe
by making the DB types be "a collection of" objects of "smaller"
types.
So what you are saying is that the type Item in my example is the
parameter you are talking about?
Erh, I guess so.
with Ada.Containers.Hashed_Sets;
with Data;
package RDB is
use Ada;
type DP is access Data.T'class;
function compare(a, b: DP) return BOOLEAN;
function hash(element: DP) return Containers.HASH_TYPE;
subtype ATTRIBUTE is DP;
package Attributes is new Containers.Hashed_Sets
(ELEMENT_TYPE => ATTRIBUTE,
hash => hash,
equivalent_elements => compare);
subtype TUPLE is Attributes.SET;
function hash(element: TUPLE) return Containers.HASH_TYPE;
package Tuples is new Containers.Hashed_Sets
(ELEMENT_TYPE => TUPLE,
hash => hash,
equivalent_elements => Attributes."=",
"=" => Attributes."=");
subtype TABLE is Tuples.SET;
function hash(element: TABLE) return Containers.HASH_TYPE;
package Tables is new Containers.Hashed_Sets
(ELEMENT_TYPE => TABLE,
Hash => hash,
equivalent_elements => Tuples."=",
"=" => Tuples."=");
-- ...
end RDB;
with Ada.Containers.Hashed_Sets;
with Data;
package RDB2 is
use Ada;
type DP is access Data.T'class;
function compare(a, b: DP) return BOOLEAN;
function hash(element: DP) return Containers.HASH_TYPE;
subtype ATTRIBUTE is DP;
package Attributes is new Containers.Hashed_Sets
(ELEMENT_TYPE => ATTRIBUTE,
hash => hash,
equivalent_elements => compare);
type TUPLE is
record
-- ...
columns: Attributes.SET;
end record;
function compare(a, b: TUPLE) return BOOLEAN;
function hash(element: TUPLE) return Containers.HASH_TYPE;
package Tuples is new Containers.Hashed_Sets
(ELEMENT_TYPE => TUPLE,
hash => hash,
equivalent_elements => compare);
type TABLE is
record
-- ...
rows: Tuples.SET;
end record;
function compare(a, b: TABLE) return BOOLEAN;
function hash(element: TABLE) return Containers.HASH_TYPE;
package Tables is new Containers.Hashed_Sets
(ELEMENT_TYPE => TABLE,
Hash => hash,
equivalent_elements => compare);
type SCHEMA is
record
-- ...
relations: Tables.SET;
end record;
end RDB2;
.
- Follow-Ups:
- Re: Generic Collection
- From: andrew
- Re: Generic Collection
- References:
- Generic Collection
- From: andrew
- Generic Collection
- Prev by Date: Re: Newbie Needs Ada Advice
- Next by Date: Re: Newbie Needs Ada Advice
- Previous by thread: Generic Collection
- Next by thread: Re: Generic Collection
- Index(es):
Relevant Pages
|