/***********************************************************************/ /* Open Visualization Data Explorer */ /* (C) Copyright IBM Corp. 1989,1999 */ /* ALL RIGHTS RESERVED */ /* This code licensed under the */ /* "IBM PUBLIC LICENSE - Open Visualization Data Explorer" */ /***********************************************************************/ #include #include #include "groupClass.h" static Series _NewSeries(struct series_class *class) { Series s = (Series) _dxf_NewGroup((struct group_class *)class); if (!s) return NULL; return s; } Series DXNewSeries() { return _NewSeries(&_dxdseries_class); } Group _dxfSeries_SetMember(Series s, char *name, Object value) { if (!s->group.typed && !_dxf_SetType((Group)s, value)) return NULL; return _dxfGroup_SetMember((Group)s, name, value); } Group _dxfSeries_SetEnumeratedMember(Series s, int n, Object value) { if (!s->group.typed && !_dxf_SetType((Group)s, value)) return NULL; return _dxfGroup_SetEnumeratedMember((Group)s, n, value); } Series DXSetSeriesMember(Series s, int n, double position, Object value) { if (!s->group.typed && !_dxf_SetType((Group)s, value)) return NULL; if (!DXSetFloatAttribute((Object)value, "series position", position)) return NULL; return (Series) _dxf_SetEnumeratedMember((Group)s, n, position, value); } Object DXGetSeriesMember(Series s, int n, float *position) { return _dxf_GetEnumeratedMember((Group)s, n, position, NULL); } /* * DXCopy. DXWarning: this code is essentially the same as the * code for Group_Copy, until the loop at the end that does the copy. * If you change anything here, check that code also. */ Object _dxfSeries_Copy(Series old, enum copy copy) { Series new; new = DXNewSeries(); if (!new) return NULL; /* XXX - check return code and delete new */ return (Object) _CopySeries(new, old, copy); } static Series _CopySeries(Series new, Series old, enum copy copy) { int i; float position; Object val; /* copy superclass */ if (!_dxf_CopyObject((Object)new, (Object)old, copy)) return NULL; /* done? */ if (copy==COPY_ATTRIBUTES) return new; /* * XXX - should COPY_ATTRIBUTES copy the type also? Since * there is no way to reset it, it is inconvenient if it does so. * It seems unlikely that anyone would want to create an empty * series and copy the type. */ new->group.typed = old->group.typed; new->group.type = old->group.type; new->group.category = old->group.category; new->group.rank = old->group.rank; if (old->group.shape) { new->group.shape = (int *) DXAllocate(old->group.rank * sizeof(*(old->group.shape))); for (i=0; igroup.rank; i++) new->group.shape[i] = old->group.shape[i]; } else new->group.shape = NULL; /* copy the members */ for (i=0; val = DXGetSeriesMember(old, i, &position); i++) { if (copy!=COPY_HEADER) { val = DXCopy(val, copy); if (!val) return NULL; } DXSetSeriesMember(new, i, position, val); } return new; }