00001 /******************************************************************************
00002 * swkey.cpp - code for base class 'SWKey'. SWKey is the basis for all
00003 * types of keys for indexing into modules (e.g. verse, word,
00004 * place, etc.)
00005 */
00006
00007 #include <swkey.h>
00008 #include <utilfuns.h>
00009 #include <string.h>
00010
00011 static const char *classes[] = {"SWKey", "SWObject", 0};
00012 SWClass SWKey::classdef(classes);
00013
00014 /******************************************************************************
00015 * SWKey Constructor - initializes instance of SWKey
00016 *
00017 * ENT: ikey - text key
00018 */
00019
00020 SWKey::SWKey(const char *ikey)
00021 {
00022 index = 0;
00023 persist = 0;
00024 keytext = 0;
00025 error = 0;
00026 stdstr(&keytext, ikey);
00027 init();
00028 }
00029
00030 SWKey::SWKey(SWKey const &k)
00031 {
00032 index = k.index;
00033 persist = k.persist;
00034 userData = k.userData;
00035 keytext = 0;
00036 error = k.error;
00037 stdstr(&keytext, k.keytext);
00038 init();
00039 }
00040
00041 void SWKey::init() {
00042 myclass = &classdef;
00043 }
00044
00045 SWKey *SWKey::clone() const
00046 {
00047 return new SWKey(*this);
00048 }
00049
00050 /******************************************************************************
00051 * SWKey Destructor - cleans up instance of SWKey
00052 */
00053
00054 SWKey::~SWKey() {
00055 if (keytext)
00056 delete [] keytext;
00057 }
00058
00059
00060 /******************************************************************************
00061 * SWKey::Persist - Gets whether this object itself persists within a
00062 * module that it was used to SetKey or just a copy.
00063 * (1 - persists in module; 0 - a copy is attempted
00064 *
00065 * RET: value of persist
00066 */
00067
00068 char SWKey::Persist() const
00069 {
00070 return persist;
00071 }
00072
00073
00074 /******************************************************************************
00075 * SWKey::Persist - Set/gets whether this object itself persists within a
00076 * module that it was used to SetKey or just a copy.
00077 * (1 - persists in module; 0 - a copy is attempted
00078 *
00079 * ENT: ipersist - value which to set persist
00080 * [-1] - only get
00081 *
00082 * RET: value of persist
00083 */
00084
00085 char SWKey::Persist(signed char ipersist)
00086 {
00087 if (ipersist != -1)
00088 persist = ipersist;
00089
00090 return persist;
00091 }
00092
00093
00094 /******************************************************************************
00095 * SWKey::Error - Gets and clears error status
00096 *
00097 * RET: error status
00098 */
00099
00100 char SWKey::Error()
00101 {
00102 char retval = error;
00103
00104 error = 0;
00105 return retval;
00106 }
00107
00108
00109 /******************************************************************************
00110 * SWKey::setText Equates this SWKey to a character string
00111 *
00112 * ENT: ikey - other swkey object
00113 */
00114
00115 void SWKey::setText(const char *ikey) {
00116 stdstr(&keytext, ikey);
00117 }
00118
00119
00120 /******************************************************************************
00121 * SWKey::copyFrom Equates this SWKey to another SWKey object
00122 *
00123 * ENT: ikey - other swkey object
00124 */
00125
00126 void SWKey::copyFrom(const SWKey &ikey) {
00127 // not desirable Persist(ikey.Persist());
00128 setText((const char *)ikey);
00129 }
00130
00131
00132 /******************************************************************************
00133 * SWKey::getText - returns text key if (char *) cast is requested
00134 */
00135
00136 const char *SWKey::getText() const {
00137 return keytext;
00138 }
00139
00140
00141 /******************************************************************************
00142 * SWKey::compare - Compares another VerseKey object
00143 *
00144 * ENT: ikey - key to compare with this one
00145 *
00146 * RET: > 0 if this key is greater than compare key
00147 * < 0
00148 * 0
00149 */
00150
00151 int SWKey::compare(const SWKey &ikey)
00152 {
00153 return strcmp((const char *)*this, (const char *)ikey);
00154 }
00155
00156
00157 /******************************************************************************
00158 * SWKey::setPosition(SW_POSITION) - Positions this key if applicable
00159 */
00160
00161 void SWKey::setPosition(SW_POSITION p) {
00162 switch (p) {
00163 case POS_TOP:
00164 // *this = "";
00165 break;
00166 case POS_BOTTOM:
00167 // *this = "zzzzzzzzz";
00168 break;
00169 }
00170 }
00171
00172
00173 /******************************************************************************
00174 * SWKey::increment - Increments key a number of entries
00175 *
00176 * ENT: increment - Number of entries to jump forward
00177 *
00178 * RET: *this
00179 */
00180
00181 void SWKey::increment(int) {
00182 error = KEYERR_OUTOFBOUNDS;
00183 }
00184
00185
00186 /******************************************************************************
00187 * SWKey::decrement - Decrements key a number of entries
00188 *
00189 * ENT: decrement - Number of entries to jump backward
00190 *
00191 * RET: *this
00192 */
00193
00194 void SWKey::decrement(int) {
00195 error = KEYERR_OUTOFBOUNDS;
00196 }
1.2.15