/* Copyright 1996 Acorn Computers Ltd * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ /* Chain manipulation routines. */ #if 0 #define debugchain #endif #include #include "debug.h" #ifndef __chains_h #include "chains.h" #endif void chain_remove_link( chain_link *link ) { link->forwards->backwards = link->backwards; link->backwards->forwards = link->forwards; } void chain_insert_before_link( chain_link *link, void *wrapper, chain_link *before_this ) { link->backwards = before_this->backwards; link->forwards = before_this; before_this->backwards->forwards = link; before_this->backwards = link; link->wrapper = (char *)wrapper - (char *)link; } void chain_insert_after_link( chain_link *link, void *wrapper, chain_link *after_this ) { link->backwards = after_this; link->forwards = after_this->forwards; after_this->forwards->backwards = link; after_this->forwards = link; link->wrapper = (char *)wrapper - (char *)link; } /* NOT USED void chain_insert_after_header( chain_link *link, void *wrapper, chain_header *header ) { chain_insert_after_link( link, wrapper, (chain_link *)(&header->forwards) ); } */ void chain_insert_before_header( chain_link *link, void *wrapper, chain_header *header ) { chain_insert_before_link( link, wrapper, (chain_link *)(&header->header_indicator) ); } void chain_initialise_header( chain_header *header ) { header->forwards = (chain_link *)(&header->header_indicator); header->header_indicator = NULL; header->backwards = (chain_link *)(&header->forwards ); }