modules/up/src/rpsl/rpsl/schema.cc

/* [<][>]
[^][v][top][bottom][index][help] */

FUNCTIONS

This source file includes following functions.
  1. Schema
  2. searchClass
  3. printClassStats
  4. searchKeyword
  5. searchAttrSyntax
  6. searchTypedef
  7. searchProtocol
  8. searchRPAttr
  9. searchSource
  10. searchCountry
  11. validNICHandle

//  $Id: schema.cc,v 1.1.1.1 2000/03/10 16:32:23 engin Exp $
//
//  Copyright (c) 1994 by the University of Southern California
//  All rights reserved.
//
//  Permission to use, copy, modify, and distribute this software and its
//  documentation in source and binary forms for lawful non-commercial
//  purposes and without fee is hereby granted, provided that the above
//  copyright notice appear in all copies and that both the copyright
//  notice and this permission notice appear in supporting documentation,
//  and that any documentation, advertising materials, and other materials
//  related to such distribution and use acknowledge that the software was
//  developed by the University of Southern California, Information
//  Sciences Institute. The name of the USC may not be used to endorse or
//  promote products derived from this software without specific prior
//  written permission.
//
//  THE UNIVERSITY OF SOUTHERN CALIFORNIA DOES NOT MAKE ANY
//  REPRESENTATIONS ABOUT THE SUITABILITY OF THIS SOFTWARE FOR ANY
//  PURPOSE.  THIS SOFTWARE IS PROVIDED "AS IS" AND WITHOUT ANY EXPRESS OR
//  IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
//  WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE,
//  TITLE, AND NON-INFRINGEMENT.
//
//  IN NO EVENT SHALL USC, OR ANY OTHER CONTRIBUTOR BE LIABLE FOR ANY
//  SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES, WHETHER IN CONTRACT, TORT,
//  OR OTHER FORM OF ACTION, ARISING OUT OF OR IN CONNECTION WITH, THE USE
//  OR PERFORMANCE OF THIS SOFTWARE.
//
//  Questions concerning this software should be directed to 
//  ratoolset@isi.edu.
//
//  Author(s): Cengiz Alaettinoglu <cengiz@ISI.EDU>

#include "config.h"

#include <cstring>
#include <cstdio>
#include "gnu/std.h"

#include "object.hh"
#include "schema.hh"

Schema::~Schema()  {
/* [<][>][^][v][top][bottom][index][help] */
   //   if (dictionary)
   //   delete dictionary;
}

AttrClass* Schema::searchClass(const char *name) {
/* [<][>][^][v][top][bottom][index][help] */
   for (int i = 0; i < lastClass; ++i)
      if (!strcasecmp(name, classes[i]->name)) {
         classes[i]->touch();
         classes[i]->reset();
         return classes[i];
      }

   return NULL;
}

void Schema::printClassStats() {
/* [<][>][^][v][top][bottom][index][help] */
   for (int i = 0; i < lastClass; ++i)
      cout << classes[i]->name << " " << classes[i]->ref_cnt << "\n";
}

int Schema::searchKeyword(const char *word) { // return token_id or -1
/* [<][>][^][v][top][bottom][index][help] */
   for (int i = 0; keywords[i]._name; i++)
      if (!strcasecmp(keywords[i]._name, word)) {
         if (!is_context_active || keywords[i].is_reserved)
            return keywords[i].token_id;
         else
            break;
      }

   return -1;
}

int Schema::searchAttrSyntax(const char *word) { // return token_id or -1
/* [<][>][^][v][top][bottom][index][help] */
   for (int i = 0; attrSyntax[i]._name; i++)
      if (!strcasecmp(attrSyntax[i]._name, word)) {
         if (!is_context_active || attrSyntax[i].is_reserved)
            return attrSyntax[i].token_id;
         else
            break;
      }

   return -1;
}

RPType* Schema::searchTypedef(const char *name) {
/* [<][>][^][v][top][bottom][index][help] */
   AttrIterator<AttrTypedef> itr(dictionary, "typedef");
   const AttrTypedef *tdef;

   for (tdef = itr.first(); tdef; tdef = itr.next())
      if (! strcasecmp(tdef->name, name))
         return tdef->type;

   return NULL;
}

const AttrProtocol* Schema::searchProtocol(const char *name) {
/* [<][>][^][v][top][bottom][index][help] */
   AttrIterator<AttrProtocol> itr(dictionary, "protocol");
   const AttrProtocol *prot;

   for (prot = itr.first(); prot; prot = itr.next())
      if (! strcasecmp(prot->name, name))
         return prot;

   return (AttrProtocol *) NULL;
}

const AttrRPAttr *Schema::searchRPAttr(const char *word) { 
/* [<][>][^][v][top][bottom][index][help] */
   // return token_id or -1
   if (!dictionary)
      return NULL;

   AttrIterator<AttrRPAttr> itr(dictionary, "rp-attribute");
   const AttrRPAttr *attr;

   for (attr = itr.first(); attr; attr = itr.next())
      if (!strcasecmp(attr->name, word))
         return attr;

   return (AttrRPAttr *) NULL;
}

int Schema::searchSource(const char *name) { // return 0 or 1
/* [<][>][^][v][top][bottom][index][help] */
   int i = 0;
   while(sources[i]){
     //printf("DEBUG: source: %s\n",sources[i]);
     if(strcasecmp(sources[i++],name) == 0){
       return 1;
     }
   }
   return 0;
}

int Schema::searchCountry(const char *name) { // return 0 or 1
/* [<][>][^][v][top][bottom][index][help] */
   int i = 0;
   while(countries[i]){
     if(strcasecmp(countries[i++],name) == 0){
       return 1;
     }
   }
   return 0;
}

int Schema::validNICHandle(const char *name) { // return 0 or 1
/* [<][>][^][v][top][bottom][index][help] */
   int i = 0;
   if(!strchr(name,'-') || strncmp(name,"AUTO-",strlen("AUTO-")) == 0){
      return 1;
   }else{
     while(nicsuffixes[i]){
       printf("DEBUG: nicsuffix: %s\n",nicsuffixes[i]);
       if(strcasecmp(nicsuffixes[i++],strchr(name,'-')+1) == 0){
         return 1;
       }
     }
   }
   return 0;
}


/* [<][>][^][v][top][bottom][index][help] */