/** * Initialize a stem instance. * * @param name The name of the stem (optional) */ StemClass::StemClass(RexxString *name) { // get the name as a real string...we default to a null string. name = optionalStringArgument(name, GlobalNames::NULLSTRING, ARG_ONE); stemName = name; value = name; // initialize the tail table so it knows who owns it. tails.init(this); // no explicit value at this point dropped = true; }
// in behaviour RexxString *RexxString::bitAnd(RexxString *string2, RexxString *pad) { char PadChar; /* pad character */ const char *String1; /* string 1 pointer */ const char *PadString; /* padded string part */ const char *String2; /* string 2 pointer */ sizeB_t String1Len; /* string 1 length */ sizeB_t String2Len; /* string 2 length */ sizeB_t MinLength; /* length of shorter string */ sizeB_t PadLength; /* length to pad */ sizeB_t MaxLength; /* longest length */ RexxString *Retval; /* return value */ const char *Source; /* source string pointer */ char *Target; /* target string pointer */ /* get string we will be doing bit */ /* stuff to... */ string2 = optionalStringArgument(string2, OREF_NULLSTRING, ARG_ONE); ProtectedObject p(string2); String2Len = string2->getBLength(); /* get the string length */ String2 = string2->getStringData(); /* get the string data pointer */ /* get the pad character */ PadChar = optionalPadArgument(pad, (char)0xff, ARG_TWO); String1 = this->getStringData(); /* point to the first string */ String1Len = this->getBLength(); /* get the length */ if (String1Len <= String2Len) { /* string 1 shorter or equal? */ MinLength = String1Len; /* string 1 is the shorter */ MaxLength = String2Len; /* string 2 is the longer */ PadString = String2; /* padding is done on string2 */ Source = String1; /* operate from string 1 */ } else { MinLength = String2Len; /* string 2 is the shorter */ MaxLength = String1Len; /* string 1 is the longer */ PadString = String1; /* padding is done on string1 */ Source = String2; /* operate from string 2 */ } PadLength = MaxLength - MinLength; /* get the padding length */ /* Duplicate Longer */ Retval = raw_string(MaxLength); Target = Retval->getWritableData(); /* point to the tArget */ memcpy(Target, PadString, MaxLength);/* now copy in the longer one */ while (MinLength-- != 0) { /* while shorter has data */ /* and in each character */ *Target = *Target & *Source++; Target++; /* step the target */ } while (PadLength-- != 0) { /* while pad needed */ /* and in a pad character */ *Target = *Target & PadChar; Target++; /* step the target */ } return Retval; /* return result string */ }