197 lines · 3.1 KB · Objective-C
RawDownload
 /* * Portable Object Compiler (c) 1997.  All Rights Reserved. * $Id: setseq.m,v 1.1.1.1 2000/06/07 21:09:25 stes Exp $ */ /* * This library is free software; you can redistribute it and/or modify it * under the terms of the GNU Library General Public License as published  * by the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the * GNU Library General Public License for more details. * * You should have received a copy of the GNU Library General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */ #include "config.h"#include <assert.h>#include <stdlib.h>#include "setseq.h" @implementation SetSequence- (objsetseq_t) objsetseqvalue{  return &value;} static void objsetseq_init (objsetseq_t self, id set){  self->set = [set objsetvalue];  self->offset = 0;} + over:set{  id newObj = [super new];  objsetseq_init ([newObj objsetseqvalue], set);  return newObj;} - copy{  return [super copy];} - free{  return [super free];} static int size (objset_t self){  return self->count;} static int objsetseq_size (objsetseq_t self){  return size (self->set);} static id at (objset_t self, int i){  assert (0 <= i && i < self->capacity);  return (self->ptr) [i];} - (unsigned) size{  return (unsigned) objsetseq_size ([self objsetseqvalue]);} static int ptrmatch (id * p, int i, int n){  while (i < n)    if (p [i])      return i;    else      i++;  return -1;} static int match (objset_t self, int i){  return ptrmatch (self->ptr, i, self->capacity);} static id next (objsetseq_t self){  int i = match (self->set, self->offset);  if (i == -1)    {      return nil;    }  else    {      id obj = at (self->set, i);      self->offset = i + 1;      return obj;    }} - next{  return next ([self objsetseqvalue]);} static id peek (objsetseq_t self){  int i = match (self->set, self->offset);  if (i == -1)    {      return nil;    }  else    {      return at (self->set, i);    }} - peek{  return peek ([self objsetseqvalue]);} static int ptrprev (id * p, int i){  while (--i)    if (p [i])      return i;  return -1;} static int prev (objset_t self, int i){  return ptrprev (self->ptr, i);} static id objsetseq_prev (objsetseq_t self){  int i = prev (self->set, self->offset);  return (i == -1) ? nil : at (self->set, i);} - previous{  return objsetseq_prev ([self objsetseqvalue]);} static id objsetseq_first (objsetseq_t self){  int i = match (self->set, 0);  return (i == -1) ? nil : at (self->set, i);} - first{  return objsetseq_first ([self objsetseqvalue]);} static int last (objset_t self){  return prev (self, self->capacity);} static id objsetseq_last (objsetseq_t self){  int i = last (self->set);  return (i == -1) ? nil : at (self->set, i);} - last{  return objsetseq_last ([self objsetseqvalue]);} @end 

Keyboard shortcuts

General

Show keyboard shortcuts
?
Focus the current search
/

Issues and pull requests

Open filters
f

Issues, pull requests and Inbox

Select next item
j↓
Select previous item
k↑
Open selected item
Enter
Dismiss filters or clear selection
Esc

Repository code

Go to file
t