Thanks everyone, I have ended up going with the list of integers
method, not as neat but will work fairly easily

Tim Hughes
mailto:[email protected]




On Fri, Jan 15, 2010 at 1:55 AM, Mark Slee <[email protected]> wrote:
> That won't work properly either, forward declarations are not allowed in 
> Thrift.
>
> The reason for this is in the thread David referenced -- Thrift elements are 
> not nullable because in C++ we store actual objects rather than 
> references/pointers.
>
> The simplest thing to do here is probably to simplify the Node object to just 
> reference domains by id. You probably don't need/want to always incur the 
> full overhead of storing a full list of rich Domain objects in every Node.
>
> struct Domain {
>  5: Node node;
> }
>
> typedef list<i32> Domains; // Store a list of integer pointers to the Domains 
> by id
> struct Node {
>  5: Domains domains;
> }
>
> -----Original Message-----
> From: Rory McGuire [mailto:[email protected]]
> Sent: Wednesday, January 13, 2010 12:43 AM
> To: [email protected]
> Subject: Re: Using a type before it has been defined
>
> You could try this.
>
> struct Node {}
>
> struct Domain {
>    1: i32 id,
>    2: string name,
>    3: string hb_time,
>    4: i32 state,
>    5: Node node,
> }
> typedef list<Domain> Domains
>
> struct Node {
>    1: i32 id,
>    2: string name,
>    3: string hb_time,
>    4: i32 running_state,
>    5: Domains domains,
> }
>
> typedef list<Node> Nodes
> typedef i32 IdNum
>
> service Virt {
>    Node getNode(1:i32 id),
>    IdNum saveNode(1:Node node),
>    Domain getDomain(1:i32 id),
>    Domains getDomainByNode(1:Node node),
>    Node getNodeOfDomain(1:i32 id),
>    Nodes getAllNodes(),
> }
>
>
>
> On 08 Jan 2010, at 8:28 AM, David Reiss wrote:
>
>> Short answer: no.  See this thread for details: 
>> http://markmail.org/thread/4pwhw5d254zrphv5
>>
>> Tim Hughes wrote:
>>> I am wondering if the following concept is possible in some way,
>>> other
>>> than the way i am doing it obviously. It is a bit recursive and is
>>> giving an issue when compiling. The error is:
>>>
>>> Type "Domains" has not been defined
>>>
>>>
>>> and the thrift code is:
>>>
>>> struct Node {
>>>    1: i32 id,
>>>    2: string name,
>>>    3: string hb_time,
>>>    4: i32 running_state,
>>>    5: Domains domains,
>>> }
>>>
>>>
>>> struct Domain {
>>>    1: i32 id,
>>>    2: string name,
>>>    3: string hb_time,
>>>    4: i32 state,
>>>    5: Node node,
>>> }
>>>
>>> typedef list<Domain> Domains
>>> typedef list<Node> Nodes
>>> typedef i32 IdNum
>>>
>>> service Virt {
>>>    Node getNode(1:i32 id),
>>>    IdNum saveNode(1:Node node),
>>>    Domain getDomain(1:i32 id),
>>>    Domains getDomainByNode(1:Node node),
>>>    Node getNodeOfDomain(1:i32 id),
>>>    Nodes getAllNodes(),
>>> }
>>>
>>>
>>>
>>>
>>> Tim Hughes
>>> mailto:[email protected]
>
>

Reply via email to