Клиппер 5. Справочник

содержит результат работы, тем не


    содержит результат работы, тем не менее при выключенной блокировке,
    возвращается еще и результирующее значение. Возвращаемая строка и ее
    копия некоторое время занимают рабочую память одновременно, и наиболее
    неблагоприятным случаем является запрос двух смежных блоков с
    размерами близкими к 64 Кбайтам.
 
    Обойти подобную ситуацию можно вызовом CSETREF(.T.). При этом функции,
    принимающие параметры по ссылке, не будут использовать память для
    возвращаемого значения, т.е будут вести себя как процедуры, что в
    случае длинных строк позволит сэкономить до 64 Кбайтов памяти.
 
    Функции, управляемые CSETREF():
 


    ADDASCII()          BLANK()                 CHARADD()
    CHARAND()           CHARMIRR()              CHARNOT()
    CHAROR()            CHARRELREP()            CHARREPL()
    CHARSORT()          CHARSWAP()              CHARXOR()
    CRYPT()             JUSTLEFT()              JUSTRIGHT()
    POSCHAR()           POSREPL()               RANGEREPL()
    REPLALL()           REPLLEFT()              REPLRIGHT()
    TOKENLOWER()        TOKENUPPER()            WORDREPL()
    WORDSWAP()
 
  Примечания
 
  . При включении блокировки возврата значения с помощью CSETREF(.T.)
    перечисленные выше функции возвращают значение NIL.
 
  Примеры
 
  . Выключение блокировки возврата значений:
 
    CSETREF(.F.)
 
    cStr1 := "HAGBDCFE"
    cStr2 := CHARSORT(@cStr1)
    ? cStr1, cStr2              // "ABCDEFGH" (cStr1 и cStr2 одинаковы)
 
  . Включение блокировки возврата значений:
 
    CSETREF(.T.)
 
    cStr1 := "HAGBDCFE"
    cStr2 := CHARSORT(@cStr1)
    ? cStr1                     // "ABCDEFGH". Отсортированная cStr1
    ? cStr2                     // NIL
 
  . Иллюстрация запроса большого количества памяти:
 
    cStr1 := SPACE(32000)       // Создается большая строка
 
    CSETREF(.F.)

Содержание раздела