Что такое код hw_objrec2array

Содержание

hw_objrec2array

hw_objrec2array — Convert attributes from object record to object array

Описание

Converts an object_record into an object array.

Список параметров

The object record.

An associative array with the attribute name as its key and the value being one of HW_ATTR_LANG or HW_ATTR_NONE.

Возвращаемые значения

Returns an array. The keys of the resulting array are the attributes names. Multi-value attributes like ‘Title’ in different languages form its own array. The keys of this array are the left part to the colon of the attribute value. This left part must be two characters long.

Other multi-value attributes without a prefix form an indexed array. If the optional parameter is missing the attributes ‘Title’, ‘Description’ and ‘Keyword’ are treated as language attributes and the attributes ‘Group’, ‘Parent’ and ‘HtmlAttr’ as non-prefixed multi-value attributes. By passing an array holding the type for each attribute you can alter this behaviour.

Смотрите также

  • hw_array2objrec() — Convert attributes from object array to object record

hw_objrec2array

hw_objrec2array — Convert attributes from object record to object array

Описание

Converts an object_record into an object array.

Список параметров

The object record.

An associative array with the attribute name as its key and the value being one of HW_ATTR_LANG or HW_ATTR_NONE.

Возвращаемые значения

Returns an array. The keys of the resulting array are the attributes names. Multi-value attributes like ‘Title’ in different languages form its own array. The keys of this array are the left part to the colon of the attribute value. This left part must be two characters long.

Other multi-value attributes without a prefix form an indexed array. If the optional parameter is missing the attributes ‘Title’, ‘Description’ and ‘Keyword’ are treated as language attributes and the attributes ‘Group’, ‘Parent’ and ‘HtmlAttr’ as non-prefixed multi-value attributes. By passing an array holding the type for each attribute you can alter this behaviour.

Смотрите также

  • hw_array2objrec() — Convert attributes from object array to object record

hw_objrec2array

Convert attributes from object record to object array

Description

Converts an object_record into an object array.

Parameters

The object record.

An associative array with the attribute name as its key and the value being one of HW_ATTR_LANG or HW_ATTR_NONE.

Return Values

Returns an array. The keys of the resulting array are the attributes names. Multi-value attributes like ‘Title’ in different languages form its own array. The keys of this array are the left part to the colon of the attribute value. This left part must be two characters long.

Other multi-value attributes without a prefix form an indexed array. If the optional parameter is missing the attributes ‘Title’, ‘Description’ and ‘Keyword’ are treated as language attributes and the attributes ‘Group’, ‘Parent’ and ‘HtmlAttr’ as non-prefixed multi-value attributes. By passing an array holding the type for each attribute you can alter this behaviour.

hw_objrec2array

Руководство по PHP
Пред. След.

hw_objrec2array

(PHP 3 >= 3.0.3, PHP 4, PECL)

hw_objrec2array — Convert attributes from object record to object array

Description

Converts an object_record into an object array. The keys of the resulting array are the attributes names. Multi-value attributes like ‘Title’ in different languages form its own array. The keys of this array are the left part to the colon of the attribute value. This left part must be two characters long. Other multi-value attributes without a prefix form an indexed array. If the optional parameter is missing the attributes ‘Title’, ‘Description’ and ‘Keyword’ are treated as language attributes and the attributes ‘Group’, ‘Parent’ and ‘HtmlAttr’ as non-prefixed multi-value attributes. By passing an array holding the type for each attribute you can alter this behaviour. The array is an associated array with the attribute name as its key and the value being one of HW_ATTR_LANG or HW_ATTR_NONE .

Что такое код hw_objrec2array

(PHP 3>= 3.0.3, PHP 4)

hw_Objrec2Array — конвертирует атрибуты из записи объекта в массив объекта.

Описание

array hw_objrec2array (string object_record [, array format])

Конвертирует object_record в массив объекта. Ключами результирующего массива являются имена атрибутов. Многозначные атрибуты, вроде ‘Title’ на различных языках, формируют собственный массив. Ключи этого массива являются левой от двоеточия частью значений атрибута. Эта левая часть обязана иметь длину в два символа. Другие многозначные атрибуты без префикса образую индексный массив. Если необязательный параметр отсутствует, атрибуты ‘Title’, ‘Description’ и ‘Keyword’ рассматриваются как атрибуты языка, а атрибуты ‘Group’, ‘Parent’ и ‘HtmlAttr’ — как беспрефиксные многозначные атрибуты. Передавая массив, содержащий тип каждого атрибута, вы можете изменить это поведение. Этот массив является ассоциативным массивом с именами атрибутов в качестве ключей и с одним из значений: HW_ATTR_LANG или HW_ATTR_NONE.


Назад Оглавление Вперёд
hw_New_Document Вверх hw_Output_Document

Если Вы не нашли что искали, то рекомендую воспользоваться поиском по сайту:

Что такое код hw_objrec2array

(PHP 3>= 3.0.3, PHP 4 )

hw_objrec2array — Convert attributes from object record to object array

Description array hw_objrec2array ( string object_record [, array format] )

Converts an object_record into an object array. The keys of the resulting array are the attributes names. Multi-value attributes like ‘Title’ in different languages form its own array. The keys of this array are the left part to the colon of the attribute value. This left part must be two characters long. Other multi-value attributes without a prefix form an indexed array. If the optional parameter is missing the attributes ‘Title’, ‘Description’ and ‘Keyword’ are treated as language attributes and the attributes ‘Group’, ‘Parent’ and ‘HtmlAttr’ as non-prefixed multi-value attributes. By passing an array holding the type for each attribute you can alter this behaviour. The array is an associated array with the attribute name as its key and the value being one of HW_ATTR_LANG or HW_ATTR_NONE .

Что такое код hw_objrec2array

Hyperwave был разработан IICM в Гразе (Graz). Первоначально пакет назывался Hyper-G и был изменен на Hyperwave после коммерциализации (где-то в 1996).

Hyperwave не является свободно распространяемым ПО. Текущая версия, 4.0, доступна www.hyperwave.com. Существует 30-дневная версия.

Hyperwave — это информационная сиситема, похожая на базы данных ( HIS , Hyperwave Information Server). Она напраавлена на хранение документов и управление ими. Документом может быть любая часть данных, которая может быть сохранена в файле. Каждый документ сопровождается своей объектной записью. Объектная запись содержит мета-данные документа. Мета-данные — это список атрибутов, который может быть расширен пользователем. Постоянные атрибуты всегда назначаются сервером Hyperwave, остальные могут меняться пользователем.

Помимо документов, все содержащиеся в документах гиперссылки также сохраняются в виде объектных записей. Гиперссылки, содержащиеся в документе, при его вставке в базу данных удаляются и сохраняются в виде отдельных объектов. объектные записи ссылок содержат информацию о начале и конце ссылки. Для восстановления оригинала документа вым нужно будет получить «плоский» докумет, без ссылок, список ссылок и заново вставить их в документ. Для этого предназаначены функции hw_pipedocument() и hw_gettext() . Преимущества выделения ссылок из документа очевидны. Как только документ, на который указывает ссылка, изменит свое имя, соответствующая ссылка также может быть легко изменена. Документ, содержащий ссылки, не подвержен изменениям. Вы даже можете добавить в документ ссылку, не изменяя его.

Говорят, что hw_pipedocument() и hw_gettext() выполняют вставку ссылок в документ автоматически, однако быстро сказка сказывается, да не просто дело делается. Вставка ссылок предполагает неизменную иерархию документов. На веб-сервере существует иерархия, полученная от файловой системы, но Hyperwave имеет свою собственную иерархию и имена не отражают позицию объекта в этой иерархии. Поэтому оздание ссылок прежде всего требует маппинга имен из иерархии Hyperwave в соотвествующие имена иерархии веб. Фундаментальное отличие между Hyperwave и Веб заключается в том, что в Hyperwave имя и иерархия — суть разные понятия. Имя не содержит никакой информации о положении объекта в иерархии. В Веб имя содержит и информацию о том, гед объект расположен иерархически. Это указывает на два возможных пути маппинга. В URL можно отражать иерархию Hyperwave и имя объекта или только имя. С цель сделать вещи проще, второй вариант более применим. Объект Hyperwave с именем ‘my_object’ мапится в ‘http://host/my_object’ безотносительно к его положению в иерархии Hyperwave. Объект с именем ‘parent/my_object’ может быть порожден ‘my_object’ в иерархии Hyperwave, однако в пространстве имен Веб оно проявится как противоположное и пользователь может быть неприятно удивлен. Это может быть предотвращено только путем оригинального именования объектов.

Применение этого решения порождает вторую проблему. Как вы запускаете php3? URL http://host/my_object не вызовет ни одного скрипта php3 до тех пор, пока вы не укажете вашему веб-скрверу переписать ее подобным образом: ‘http://host/php3_script/my_object’ и переменная $PATH_INFO должна быть равна скрипту ‘php3_script’, и возвращется объект с именем ‘my_object’ от Hyperwave сервера. Это только один недостаток, который может быть исправлен легко. Переписывание URL не дает доступа к другим документам веб-сервера. Скрипт php3 для поиска в Hyperwave сервере принципиально невозможен. По этой причине вам необходимо по меньшей мере два переназначения правила для исключения постоянных URLов, начинающихся с http://host/Hyperwave. Это — основное разделение пространства имен между Hyperwave и веб серверами.

На основе вышеизложенных механизмов ссылки вставляются в документ.

Это получается более сложно, если php3 не запущено как скрипт module/CGI, а как самостоятельное приложение, т.е. дампит содержимое Hyperwave сервера на CD-ROM. В этом случае имеет смысл сохранять иерархию Hyperwave и мапить ее на файловую систему. Это может вызвать конфликты с именамаи объектов если оини отражают свою собственную иерархию (если имена включают символ «/»). Однако, «/» может быть заменен на другой символ, типа «_», и все вроде встенет на свои места.

Сетевой протокол соединяется с Hyperwave сервером HG-CSP (Hyper-G Client/Server Protocol). Он основан на сообщениях, инициирующих определенный события, например получекния объектной записи. Вранних версиях Hyperwave сервера предлагалось два родных клиента (Harmony, Amadeus) для связи с сервером. Оба они исчезли после коммерциализации Hyperwave. На замену пришло нечто, называемое wavemaster. Wavemaster — это нечто протоколоподобное, конвертирующее HTTP в HG-CSP . Идея состоит в том, чтобы все администрирование базами данных и визуализация документов должно осуществляться через Веб-интерфейс. Wavemaster обеспечивает множество плейсхолдеров (placeholders) для постоянных операций по насторйке интерфейса. Эти плейсхолдеры называются языком PLACE . PLACE-у недостает множества преимуществ настоящих языков программирования, и любые расширения — это только увеличение списка плейсхолдеров. Это дает мне основание к использованию JavaScript, который, IMHO, не делает жизнь легче.

Добавление поддержки Hyperwave в PHP3 было введено с целью заполнить пробелы языков програмирования в управлении интерфейсов. Оно выполлняет все сообщения, определенные в HG-CSP , и более сложныве команды по получению завершенных документов.

Hyperwave имеет свою собственную терминологию для именования различных порций информации. Это было заимствовонно и расширенно. Практически все функции оперируют с одним из следующих типов данны:

object ID: уникально целое значение для каждого объекта в Hyperwave сервере. Это также одни из атрибутов объектной записи (ObjectID). ИД объектов часто используются в качестве входных параметров для спецификации объекта.

object record: строка с парами атрибут-значение в фоме атрибут=значение. пары одделены одна от друкой символом возврата каретки. ОБъектная запись может быть просто переконвертирована в объектный массив: hw_object2array() . Несколько функций (их имена заканчиваются на obj) возвращают объектные записи.

object array: ассоциативный массив со всеми атрибутами объекта. Ключ — имя атрибута. Если атрибут встречается в объектной записи несколько раз, это ведет к появлению другого индекса или индексного массива. Атрибуты, определнные в языке, будут иметь множство ключей, аббревиатур языка в ассоциативном массиве. Все другие множественные атрибуты формируют индексные массивы. Функции php3 никогда не возвращают объектных массивов.

hw_document: это совершенно новый тип данных, который описывает наличный документ, напимер HTML, PDF и др. Он несколько оптимизированн под HTML, но может быть использован и с другими форматами.

Несколько функций, возвращающих массивы объектных записей также возвращают ассоциативный массив со статистической информацией о нем. Этот массив — последний элемент массива объектных записей. Статистический массив содержит следующие поля:

Число объектных записей с атрибутом PresentationHints, установленным в Hidden. CollectionHead

Число объектных записей с атрибутом PresentationHints, установлденным в CollectionHead. FullCollectionHead

Число объектных записей с атрибутом PresentationHints, установленным в FullCollectionHead. CollectionHeadNr

Индекс в массиве объектных записей с атрибутом PresentationHints, установленным в CollectionHead. FullCollectionHeadNr

Индекс в массиве объектных записей с атрибутом PresentationHints, установленным в FullCollectionHead. Total

Общее число объектных записей. Интеграция с Apache

Модуль Hyperwave лучьше всего использовать, когда PHP3 скомпилированн в как модуль Apache. В этом случае основной Hyperwave сервер может быть скрыт от пользователя почти полностью, если Apache использует свой движок. Это объясняют следующие инструкции.

С тех пор, как PHP3 с Hyperwave поддерживают встраивание в Апач, предполагается, что родное решение Hyperwave — wavemaster — автоматически замещается. Т.е. Апач примет на себя функции веб-интерфейса к Hyperwave. Это не есть необходимость, но конфигурация упрощается. Идея достаточно проста. Перво-наперво вам необходим PHP3-скрипт, который оценивает переменную PATH_INFO и рассматривает ее значение как имя Hyperwave объекта. Пусть скрипт называется ‘Hyperwave’. URL http://your.hostname/Hyperwave/name_of_object возвратит Hyperwave объект с именем ‘name_of_object’. Реакция скрипта зависит от типа объекта. Если это коллекция, он возможно вернет список наследников. Если это документ, он возвратит mime-тип и содержание. Небольшое улучшение может быть достигнуто, если используется движок перезаписи Апача. С точки зрения пользователя, это более прямой путь, если URL http://your.hostname/name_of_object будет возвращать объект. Правило перезаписи достаточно простое:

для возврвта самого объекта

для разрешения проблемы поиска

для идентификации вас

для установки профиля

один для каждой дополнительной функции, как то показа атрибутов объекта. показа информации о пользователе, показа статуса сервера и др.

Замечания

Еще несколько заечаний:

Функция hw_InsertDocument расщеплена на hw_InsertObject() и hw_PutDocument() .

Имена некоторых функций пока еще не подтверждены.

Мольшинство функций требуют текущее соединение как первый параметр. Это ведет к достаточно большому количеству лишнего набора, что в большинстве случев излищне, поскольку существует только одно соединение. Соединение по умолчанию предоставляет улучшенный вариант решения.

hw_Changeobject

Описание

int hw_changeobject (int connection, int object_to_change, string commands);

Команда позволяет удалить, добавить или модифицировать индивидуальные атрибуты объектной записи. Объекты указываются идентификатором оюъекта, object_to_change ; команды придерживаются следующего синитаксиса:

Возвращает True при отсутствии ошибок, иначе False.

hw_Children

Описание

array hw_children (int connection, int objectID);

Возвращает массив идентификаторов объектов. Каждый иденитификатор — часть коллекции с идентификатором objectID . Массив содержит всех наследников, документы и коллекции.

hw_ChildrenObj

Описание

array hw_childrenobj (int connection, int objectID);

Возвращает массив объектных записей. Каждая запись — часть коллекции с идентификатором objectID . Массив содержит всех наследников, документы и коллекции.

hw_Close

Описание

int hw_close (int connection);

Возвращет false, если соединение не является действующим, в противном случае — true. Closes закрывает соединение с Hyperwave сервером с указанным номером соединения connection.

hw_Connect

Описание

int hw_connect (string host, int port, string username, string password);

Открывает соединение с Hyperwave сервером и возвращает номер соединение при успешном открытиии, или False, ели слединение не может быть установлено. Каждый аргумент должен быть «закавыченой» строкой, исключая номер порта. Аргумент username и password опциональны и могут не указываться. В случае ошибки идентификации, сервер завершит работу. Проще использовать идентификацию как пользователь anonymous. Функция возращает индекс соединения, необходимы для других функций Hyperwave. Вы можете открыть несколько соединений. Помните, что пароли не шифруются.

hw_Cp

Описание

int hw_cp (int connection, array object_id_array, int destination id);

Копирует объекты с идентификаторами, указанными во втором параметре в коллекцию с идентификатором destination id .

Возвращается число скопированных объектов.

hw_Deleteobject

Описание

int hw_deleteobject (int connection, int object_to_delete);

Удаляет объект с идентификатором, указанным во втором параметре. Будут удалены все экземпляры объекта.

При отсутствии ошибок возвращает true, инача — false.

hw_DocByAnchor

Описание

int hw_docbyanchor (int connection, int anchorID);

Возвращает идентификатор оъекта документа, который относится к якорю anchorID .

hw_DocByAnchorObj

Описание

string hw_docbyanchorobj (int connection, int anchorID);

Возвращает объектную запись объекта документа, относящегося к якорю anchorID .

hw_DocumentAttributes

Описание

string hw_documentattributes (int hw_document);

Возвращает объектную запись документа.

hw_DocumentBodyTag

Описание

string hw_documentbodytag (int hw_document);

Возвращает тег BODY для документа. Если документ в формате HTML, тег BODY должен быть напечатен перед документом.

hw_DocumentSize

Описание

int hw_documentsize (int hw_document);

Возвращает размер документа в байтах.

hw_ErrorMsg

Описание

string hw_errormsg (int connection);

Возвращает строку, содержащую последнее сообщени об ошибке или ‘No Error’. Если возвратилось False, функция не выполнилась. Сообщение относится к последней команде.

hw_EditText

Описание

int hw_edittext (int connection, int hw_document);

Загружет текстовый документ на сервер. Объектная запись документа не должна модифицироваться, пока документ редактируется. Эта функция работает только с чисто текстовыми документами. Она не отрывает специальных соединений для данных, поэтому управление соединением во время передачи данных блокируется.

hw_Error

Описание

int hw_error (int connection);

Возвращет номер последней ошибки. Если 0 — ошибок не было. Ошибка относится к последней команде.

hw_Free_Document

Описание

int hw_free_document (int hw_document);

освобождает память, занятую hw-документом.

hw_GetParents

Описание

array hw_getparentsobj (int connection, int objectID);

Возвращает индексированный массив идентификаторов объектов. Каждый ИД объекта относится к родителям объекта с идентификатором objectID .

hw_GetParentsObj

Описание

array hw_getparentsobj (int connection, int objectID);

Возвращает индексированный массив объектных записей плюс ассоциативный массив со статистической информацией об объектных записях. Ассоциативный массив — последний член возвращенного массива. Каждая объектная запись относится к родителю объекта с ИД objectID .

hw_GetChildColl

Описание

array hw_getchildcoll (int connection, int objectID);

Возвращает массив идентификаторов оюъектов. Каждый ИД объекта относится к наследной коллекции, коллекции с идентификатором objectID . Функция не возвращает наследуемые документы.

hw_GetChildCollObj

Описание

array hw_getchildcollobj (int connection, int objectID);

Возвращает массив объектных записей. Каждая запись относится к наследной коллекции, коллекции с идентификатором objectID . Функция не возвращает наследуемые документы.

hw_GetSrcByDestObj

Описание

array hw_getsrcbydestobj (int connection, int objectID);

Возвращает объектные записи всех якорных точек объекта с ИД objectID . Объект может быть как документом, так и якорем.

hw_GetObject

Описание

array hw_getobject (int connection, int objectID);

Возвращает объектную запись объекта с идентификатором objectID .

hw_GetAndLock

Описание

string hw_getandlock (int connection, int objectID);

Возвращает объектную запись объекта с ИД objectID . Объект также запирается, поэтому другие позователи не имеют к нему доступа, пока объект не будет разблокирован.

hw_GetText

Описание

int hw_gettext (int connection, int objectID, int rootID);

Возвращается документ с идентификатором объекта objectID . Если документ имеет якоря, которые можно вставить, то они будут сразу вставлены. Опциональный параметр rootID определяет, как ссылки будут вставляться в документ. По умолчанию подставляется 0, что означает конструирование ссылок из имен объктов назначения ссылок. Это применимо для веб-приложений. Если ссылка указывает на объект с именем ‘internet_movie’, ссылка HTML будет выглядеть как . Настоящее положение исходного объекта и объекта назначения в иерархии документа полностью игнорируется. Вы будете вынуждены установить ваш браузер, переписать URL приблизительно так: example ‘/my_script.php3/internet_movie’. ‘my_script.php3’ обработает $PATH_INFO и выдаст документ.

Если rootID не равен 0, ссылка конструируется из всех имен, начиная с объекта с ИД rootID , разделенных слешами от текущего объекта. Если для предидущего примера документ ‘internet_movie’ расположен в ‘a-b-c-internet_movie’, где ‘-‘ — разделители между уровнями иерархии, и исходный документ расположен по пути ‘a-b-d-source’, результирующая HTML-ссылка будет: . Это используется, если вы хотите утянуть се содержание сервера на диск и мапить иерархию докмента на файловую систему.

Эта функция работает только с чисто текстовыми документами. Она не отрывает специальных соединений для данных, поэтому управляющее соединение во время передачи данных блокируется.

hw_GetObjectByQuery

Описание

array hw_getobjectbyquery (int connection, string query, int max_hits);

Ищет объекты по всему серверу и возвращает массив идентификаторов объектов. Максимальное число найденных димитируется в max_hits . Если max_hits установлен в -1, то максимальное число ответов не ограниченно.

hw_GetObjectByQueryObj

Описание

array hw_getobjectbyqueryobj (int connection, string query, int max_hits);

Ищет объекты по всему серверу и возвращает массив объектных записей. Максимальное число найденных димитируется в max_hits . Если max_hits установлен в -1, то максимальное число ответов не ограниченно.

hw_GetObjectByQueryColl

Описание

array hw_getobjectbyquerycoll (int connection, int objectID, string query, int max_hits);

Ищет объект в коллекции с идентификатором objectID и возвращает массив идентификаторов объектов. Максимальное число найденных димитируется в max_hits . Если max_hits установлен в -1, то максимальное число ответов не ограниченно.

hw_GetObjectByQueryCollObj

Описание

array hw_getobjectbyquerycollobj (int connection, int objectID, string query, int max_hits);

Ищет объект в коллекции с идентификатором objectID и возвращает массив объектных записей. Максимальное число найденных димитируется в max_hits . Если max_hits установлен в -1, то максимальное число ответов не ограниченно.

hw_GetChildDocColl

Описание

array hw_getchilddoccoll (int connection, int objectID);

Возвращает массив идентификатров объектов наследуемых документов коллекции.

Смотри также hw_GetChildren() , hw_GetChildColl() .

hw_GetChildDocCollObj

Описание

array hw_getchilddoccollobj (int connection, int objectID);

Возвращает массив идентификатров объектов наследуемых документов коллекции.

hw_GetAnchors

Описание

array hw_getanchors (int connection, int objectID);

Возвращает массив идентификаторов объектов для якорей документа с ИД objectID .

hw_GetAnchorsObj

Описание

array hw_getanchorsobj (int connection, int objectID);

Возвращает массив объектных записей для якорей документа с ИД objectID .

hw_Mv

Описание

int hw_mv (int connection, array object id array, int source id, int destination id);

Перемещает объект с объектным идентификатром, указанным во втором параметре, из коллекции с идентификатором source id в коллекцию с идентификатором destination id . Если исходный ИД равен 0, объекты будут «отвязаны» от исходной коллекции. Если это последний экземпляр этого объекта, он будет удален.

Возвращется число перемещенных объектов.

hw_ >hw_Identify — идентификация пользователя

Описание

int hw_identify (string username, string password);

Идентификация пользователя с именем username и паролем password . Идентификация имеет силу только для текущей сессии. Я не думаю, что данная функция так уж часто используется. В большинстве случаев будет проще проводить идентификацию при установлении соединения.

hw_InCollections

Описание

array hw_incollections (int connection, array object_id_array, array collection_id array, int return_collections);

Проверяет, является ли множество объектов (документов или коллекций), определенное в object_id_array , частью коллекций, определенных в коллекции id_array . Если четвертый параметр return_collections равен 0, подмножество идентификаторов объектов, которое является частью коллекций (т.е. документы или коллекции, которые являются наследниками одной или более коллекций идентификаторов коллекции или их подколлекций, рекурсивно) возвращается как массив. Когда четвертый праметр равен 1, однако, множество соллекций, которые имеют наследников в этом подмножестве, возвращается как массив. Это позволяет пользователю, например, подчеркнуть часть иерархии коллекции, которая содержит находки предидущего запроса, в графическом виде.

hw_Info

Описание

string hw_info (int connection);

Возвращает сведения о текущем соединении. Возвращаемая строка имеет следующий формат: , ,

hw_InsColl

Описание

int hw_inscoll (int connection, int objectID, array object_array);

Вставить новую коллекцию с атрибутами как в object_array в коллекцию с идентификатором objectID .

hw_InsDoc

Описание

int hw_insdoc (int connection, int parentID, string object_record, string text);

Вставить новый документ с атрибутами как в object_array в коллекцию с идентификатором objectID . Эта функци может добавить как отдельную объектную запись, так и чистый ascii текст из text , если text получен. Если вы хотите добавить документ в общем, используйте hw_insertdocument() .

hw_InsertDocument

Описание

int hw_putdocument (int connection, int parent_id, int hw_document);

Загружает документ в коллекцию parent_id . Перед этим документ должен быть создан hw_NewDocument() . Удостоверьтесь, что объектная запись нового документа содержит следующие атрибуты: Type, DocumentType, Title и Name. Возможно, вы захотите также установить MimeType.

hw_New_Document

Описание

int hw_new_document (string document_data, string object_record, int document_size);

Возвращает новый hw-документ с данными, установленными по document_data и объектной записью object_record . Длина данных документа document_data передается в document_size . Эта функция не добавляет документ в Hyperwave сервер.

hw_Objrec2Array

Описание

array hw_objrec2array (string object_record);

Преобразует object_record в объектный массив.

hw_OutputDocument

Описание

int hw_outputdocument (int hw_document);

Печатает документ без тега BODY.

hw_pConnect

Описание

int hw_pconnect (string host, int port, string username, string password);

Возвращает индекс соединения в случае удачи, или false, если соединение не может быть установлено. Открывает устойчивое соединение с Hyperwave сервером. Каждый аргумент должен быть «заавыченной» строкой, исключая номер порта. Аргументы username и password опциональны и могут быть опущены. В случае ошибки идентификации, сервер будет остановлен. Проще применять вход пользователя anonymous. В ыможете открыть множество устойчивых соединений.

hw_PipeDocument

Описание

int hw_pipedocument (int connection, int objectID);

Возвращает hw-документ с идентификатором objectID . Если документ имеет якоря, которые можно вставить, то данная операция произойдет автоматически. Документ передается через специальное соединение для данных, поэтому управляющее соединение не блокируется.

hw_Root

Описание

Возвращает объектный идентификатор для гиперкоренной коллекции. Обычно это 0. Наследная коллекция от гиперкорневой — корневая, на сервере, с которым установлено соединение.

hw_Unlock

Описание

int hw_unlock (int connection, int objectID);

Разблокирует документ для доступа другим пользователям.

Ускоряем JavaScript-код с использованием типа данных Set

Автор материала, перевод которого мы сегодня публикуем, говорит, что уверен в том, что многие JavaScript-разработчики пользуются, в основном, такими типами данных, как Number , String , Object , Array и Boolean . В большинстве случаев этого вполне достаточно. Но если нужно сделать код как можно более быстрым и масштабируемым, применение этих типов данных не всегда оправдано.

В этом материале мы поговорим о том, как, пользуясь типом данных Set , предоставляющим возможность работать с коллекциями уникальных значений, сделать код быстрее. Особенно это актуально для кода крупномасштабных проектов. У типов Array и Set много общего, но использование типа данных Set способно дать программисту такие возможности, ярко проявляющиеся во время выполнения программ, которых нет у типа Array .

Чем различаются типы данных Array и Set?

Главной особенностью типа данных Array (мы будем называть объекты этого типа «массивами») заключается в том, что массивы — это индексированные коллекции значений. Это означает, что данные в массивах хранятся с использованием индексов.

В отличие от массивов, объекты типа Set (мы будем называть их «коллекциями») представляют собой коллекции, содержащие данные в формате ключ/значение. Вместо использования индексов коллекции хранят элементы, пользуясь ключами. Элементы, хранящиеся в коллекции, можно перебирать в порядке их добавления в коллекцию, при этом коллекция не может хранить одинаковые элементы. Другими словами, все элементы коллекции должны быть уникальными.

В чём заключаются основные сильные стороны коллекций?

Если сравнить коллекции и массивы, то у коллекций можно обнаружить некоторые преимущества перед массивами, особенно заметные в ситуациях, в которых важна производительность программ:

  • Поиск элементов. Методы массивов indexOf() и includes() , используемые для поиска элементов и проверки того, имеется ли в массиве некий элемент, работают медленно.
  • Удаление элементов. В коллекции элемент можно удалить, опираясь на его значение. В массиве эквивалентом подобного действия будет использование метода splice() , основанное на индексе элемента. Как и в случае с поиском элементов, удаление элементов с использованием индексов это медленная операция.
  • Вставка элемента. Гораздо быстрее добавить элемент в коллекцию, чем, используя методы наподобие push() и unshift() , в массив.
  • Работа со значением NaN . Метод indexOf() нельзя использовать для поиска значения NaN в массиве, в то время как с помощью метода коллекции has() можно выяснить, имеется ли в ней NaN .
  • Удаление дублирующихся элементов. Объекты типа Set хранят только уникальные значения. Если вам нужно избежать сохранения в некоей структуре данных дублирующихся элементов, то в этом заключается их значительное преимущество перед массивами. При работе с массивами для удаления дублирующихся элементов пришлось бы писать дополнительный код.

Полный список встроенных методов объектов типа Set можно найти здесь.

О временной сложности алгоритмов

Методы, которые массивы используют для поиска элементов, имеют линейную временную сложность — O(N). Другими словами, время поиска элемента пропорционально размеру массива.

В отличие от массивов, методы, используемые коллекциями для поиска, удаления и добавления элементов, имеют временную сложность O(1). Это означает, что размер коллекции практически не оказывает влияния на время работы таких методов.

Здесь можно почитать подробности о временной сложности алгоритмов.

Насколько коллекции быстрее массивов?

Хотя на показатели производительности JavaScript-кода сильно влияют самые разные факторы, в частности, они зависят от системы, на которой запускают код, от используемой среды выполнения кода, от размера обрабатываемых данных, я надеюсь, результаты моих тестов дадут вам возможность сравнить массивы и коллекции с практической точки зрения, и понять, насколько коллекции быстрее массивов. Сейчас мы рассмотрим три простых теста и проанализируем их результаты.

▍Подготовка к тестам

Прежде чем выполнять какие-либо тесты, давайте создадим массив с миллионом элементов и такую же коллекцию. Ради простоты мы будем пользоваться циклом, первым значением счётчика которого будет 0, а последним — 999999:

▍Тест №1: проверка наличия элемента в массиве и в коллекции

Для начала выполним проверку наличия элемента 123123 в массиве и в коллекции, заранее зная, что такой элемент в этих структурах данных есть.

Вот каковы результаты этого теста:

Коллекция в 7.54 раза быстрее массива.

▍Тест №2: вставка элемента

Теперь испытаем добавление элементов в массивы и в коллекции.

Вот что получилось:

Коллекция в 6.73 раза быстрее массива.

▍Тест №3: удаление элемента

Теперь давайте удалим элемент из каждой структуры данных (например — тот, который добавляли в предыдущем испытании). У массивов нет встроенного метода для удаления элементов, поэтому мы создадим вспомогательную функцию для того, чтобы поддерживать наш код в приличном состоянии:

А вот код теста:

В результате получилось следующее:

В данном случае коллекция оказалась в 74.13 раза быстрее массива!

В целом можно отметить, что производительность кода можно значительно увеличить, используя коллекции вместо массивов. Рассмотрим несколько практических примеров.

Пример №1: удаление дублирующихся значений из массива

Если вам нужно быстро удалить из массива дублирующиеся значения, его можно преобразовать в коллекцию. Это, пожалуй, самый простой способ избавиться от повторяющихся значений:

Пример №2: задача с интервью в Google

В одном моём материале я рассматривал четыре варианта ответа на вопрос, который задавал интервьюер из Google. Интервью проводилось с использованием C++, но если бы вместо этого языка применялся бы JavaScript, в решении задачи обязательно использовалась бы структура данных Set .

Если вам хочется более глубоко разобраться в ответе на этот вопрос — почитайте вышеупомянутую статью. Здесь я просто покажу готовое решение.

▍Задача

Дан неотсортированный массив целых чисел и значение sum . Напишите функцию, которая возвращает true в том случае, если в результате сложения двух любых элементов этого массива получится значение sum . Если таких элементов в массиве нет — функция должна возвратить false .

Получается, например, что если нам дан массив [3, 5, 1, 4] и значение sum , равное 9 , то функция должна возвратить true , так как 4+5=9 .

▍Решение

К решению этой задачи можно подойти, используя следующую идею: нужно перебирать массив, создавая по мере его перебора структуру данных Set , в которую будут добавляться значения, дополняющие найденные значения до значения sum .

Разберём эту идею на примере вышеприведённого массива. Когда мы встречаем 3 , мы можем добавить в коллекцию число 6 , так как нам известно, что нужно найти два числа, которые в сумме равны 9 . Затем, каждый раз, когда мы сталкиваемся с новым значением из массива, мы можем свериться с коллекцией, и проверить, есть ли оно там. Когда мы встретим число 5 , мы добавим в коллекцию 4 . А когда, наконец, доберёмся до числа 4 , то обнаружим его в коллекции и сможем вернуть true .

Вот как может выглядеть решение этой задачи:

А вот — более сжатый вариант решения:

Так как временной сложностью метода Set.prototype.has() является O(1), использование структуры данных Set для хранения чисел, дополняющих числа, найденные в массиве, до заданного значения, позволяет найти решение за линейное время (O(N)).

Если бы решение зависело бы от метода Array.prototype.indexOf() или от метода Array.prototype.includes() , временная сложность каждого из которых равняется O(N), то общей временной сложностью алгоритма было бы O(N 2 ). В результате он стал бы гораздо медленнее.

Итоги

Если раньше вы не встречались с типом данных Set в JavaScript, то, надеемся, теперь вы, получив представление о нём, сможете с пользой применить его в своих проектах.

Уважаемые читатели! Как вы применили бы структуру данных Set в своём коде?

Что такое код hw_objrec2array

(PHP 3>= 3.0.3, PHP 4)

hw_Objrec2Array — конвертирует атрибуты из записи объекта в массив объекта.

Описание

array hw_objrec2array (string object_record [, array format])

Конвертирует object_record в массив объекта. Ключами результирующего массива являются имена атрибутов. Многозначные атрибуты, вроде ‘Title’ на различных языках, формируют собственный массив. Ключи этого массива являются левой от двоеточия частью значений атрибута. Эта левая часть обязана иметь длину в два символа. Другие многозначные атрибуты без префикса образую индексный массив. Если необязательный параметр отсутствует, атрибуты ‘Title’, ‘Description’ и ‘Keyword’ рассматриваются как атрибуты языка, а атрибуты ‘Group’, ‘Parent’ и ‘HtmlAttr’ — как беспрефиксные многозначные атрибуты. Передавая массив, содержащий тип каждого атрибута, вы можете изменить это поведение. Этот массив является ассоциативным массивом с именами атрибутов в качестве ключей и с одним из значений: HW_ATTR_LANG или HW_ATTR_NONE.

Что такое код hw_objrec2array

(PHP 3>= 3.0.3, PHP 4 )

hw_Objrec2Array — convert attributes from object record to object array

Description array hw_objrec2array ( string object_record [, array format])

Converts an object_record into an object array. The keys of the resulting array are the attributes names. Multi-value attributes like ‘Title’ in different languages form its own array. The keys of this array are the left part to the colon of the attribute value. This left part must be two characters long. Other multi-value attributes without a prefix form an indexed array. If the optional parameter is missing the attributes ‘Title’, ‘Description’ and ‘Keyword’ are treated as language attributes and the attributes ‘Group’, ‘Parent’ and ‘HtmlAttr’ as non-prefixed multi-value attributes. By passing an array holding the type for each attribute you can alter this behaviour. The array is an associated array with the attribute name as its key and the value being one of HW_ATTR_LANG or HW_ATTR_NONE

Илон Маск рекомендует:  LongDayNames - Переменная Delphi
Понравилась статья? Поделиться с друзьями:
Кодинг, CSS и SQL