1 /*
   2  * CDDL HEADER START
   3  *
   4  * The contents of this file are subject to the terms of the
   5  * Common Development and Distribution License, Version 1.0 only
   6  * (the "License").  You may not use this file except in compliance
   7  * with the License.
   8  *
   9  * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
  10  * or http://www.opensolaris.org/os/licensing.
  11  * See the License for the specific language governing permissions
  12  * and limitations under the License.
  13  *
  14  * When distributing Covered Code, include this CDDL HEADER in each
  15  * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
  16  * If applicable, add the following below this CDDL HEADER, with the
  17  * fields enclosed by brackets "[]" replaced with your own identifying
  18  * information: Portions Copyright [yyyy] [name of copyright owner]
  19  *
  20  * CDDL HEADER END
  21  */
  22 /*
  23  *      db_vers_c.x
  24  *
  25  * Copyright 2005 Sun Microsystems, Inc.  All rights reserved.
  26  * Use is subject to license terms.
  27  */
  28 
  29 %#pragma ident  "%Z%%M% %I%     %E% SMI"
  30 
  31 #if RPC_HDR
  32 %#ifndef _DB_VERS_H
  33 %#define _DB_VERS_H
  34 #endif /* RPC_HDR */
  35 
  36 %/* 'vers' is the version identifier.  */
  37 
  38 %
  39 %#include "nisdb_rw.h"
  40 %
  41 #if RPC_HDR || RPC_XDR
  42 #ifdef USINGC
  43 struct vers {
  44         u_int vers_high;
  45         u_int vers_low;
  46         u_int time_sec;
  47         u_int time_usec;
  48         __nisdb_rwlock_t vers_rwlock;
  49 };
  50 #endif /* USINGC */
  51 #endif /* RPC_HDR */
  52 
  53 #ifndef USINGC
  54 #ifdef RPC_HDR
  55 %class vers {
  56 %  unsigned int vers_high;     /* major version number, tracks checkpoints */
  57 %  unsigned int vers_low;      /* minor version number, tracks updates. */
  58 %  unsigned int time_sec;      /* time stamp */
  59 %  unsigned int time_usec;
  60 %  STRUCTRWLOCK(vers);
  61 % public:
  62 %/* No argument constructor.  All entries initialized to zero. */
  63 %  vers() {
  64 %       vers_high = vers_low = time_sec = time_usec = 0;
  65 %       INITRW(vers);
  66 %  }
  67 %
  68 %/* Constructor that makes copy of 'other'. */
  69 %  vers( vers *other );
  70 %
  71 %/* Constructor:  create version with specified version numbers */
  72 %  vers( unsigned int high, unsigned int low) {
  73 %       vers_high = high; vers_low = low; time_sec = time_usec = 0;
  74 %       INITRW(vers);
  75 %  } 
  76 %
  77 %/* Creates new 'vers' with next higher minor version.
  78 %   If minor version exceeds MAXLOW, bump up major version instead.
  79 %   Set timestamp to that of the current time. */
  80 %  vers* nextminor();
  81 %
  82 %/* Creates new 'vers' with next higher major version.
  83 %   Set timestamp to that of the current time. */
  84 %  vers* nextmajor();
  85 %
  86 %/* Set this 'vers' to hold values found in 'others'. */
  87 %  void assign( vers *other );
  88 %
  89 %/* Predicate indicating whether this vers is earlier than 'other' in
  90 %   terms of version numbers. */
  91 %  bool_t earlier_than( vers *other );
  92 %
  93 %/* Print the value of this 'vers' to specified file. */
  94 %  void print( FILE *file );
  95 %
  96 %/* Zero out this vers. */
  97 %  void zero();
  98 %
  99 %/* Predicate indicating whether this vers is equal to 'other'. */
 100 %  bool_t  equal( vers *other);
 101 %
 102 %/* Locking methods */
 103 %
 104 %  int acqexcl(void) {
 105 %       return (WLOCK(vers));
 106 %  }
 107 %
 108 %  int relexcl(void) {
 109 %       return (WULOCK(vers));
 110 %  }
 111 %
 112 %  int acqnonexcl(void) {
 113 %       return (RLOCK(vers));
 114 %  }
 115 %
 116 %  int relnonexcl(void) {
 117 %       return (RULOCK(vers));
 118 %  }
 119 %};
 120 #endif /* RPC_HDR */
 121 #endif /* USINGC */
 122 
 123 #if RPC_HDR
 124 %#endif /* VERS_H */
 125 #endif /* RPC_HDR */