예제 #1
0
파일: Cpp.cs 프로젝트: blockspacer/niveum
        public IEnumerable <String> GetTypePredefinition(TypeDef t)
        {
            var    Name = t.DefinitionName();
            var    GenericParameterLine = GetGenericParameterLine(t.GenericParameters());
            String MetaType             = "class";

            if (t.OnPrimitive)
            {
                return(new List <String> {
                });
            }
            else if (t.OnAlias || t.OnRecord || t.OnTaggedUnion || t.OnClientCommand || t.OnServerCommand)
            {
                MetaType = "class";
            }
            else if (t.OnEnum)
            {
                return(new List <String> {
                });
            }
            if (t.OnClientCommand)
            {
                var c          = t.ClientCommand;
                var RequestRef = GetSuffixedTypeRef(c.Name, c.Version, "Request");
                var ReplyRef   = GetSuffixedTypeRef(c.Name, c.Version, "Reply");
                var Request    = new RecordDef {
                    Name = RequestRef.Name, Version = RequestRef.Version, GenericParameters = new List <VariableDef> {
                    }, Fields = c.OutParameters, Attributes = c.Attributes, Description = c.Description
                };
                var Reply = new TaggedUnionDef {
                    Name = ReplyRef.Name, Version = ReplyRef.Version, GenericParameters = new List <VariableDef> {
                    }, Alternatives = c.InParameters, Attributes = c.Attributes, Description = c.Description
                };
                return(TypePredefinition(Request.DefinitionName(), MetaType, t.GenericParameters()).Concat(TypePredefinition(Reply.DefinitionName(), MetaType, t.GenericParameters())));
            }
            else if (t.OnServerCommand)
            {
                var c        = t.ServerCommand;
                var EventRef = GetSuffixedTypeRef(c.Name, c.Version, "Event");
                var Event    = new RecordDef {
                    Name = EventRef.Name, Version = EventRef.Version, GenericParameters = new List <VariableDef> {
                    }, Fields = c.OutParameters, Attributes = c.Attributes, Description = c.Description
                };
                return(TypePredefinition(Event.DefinitionName(), MetaType, t.GenericParameters()));
            }
            else
            {
                return(TypePredefinition(Name, MetaType, t.GenericParameters()));
            }
        }