| /********************************************************************** |
| * File: sortflts.cpp (Formerly sfloats.c) |
| * Description: Code to maintain a sorted list of floats. |
| * Author: Ray Smith |
| * Created: Mon Oct 4 16:15:40 BST 1993 |
| * |
| * (C) Copyright 1993, Hewlett-Packard 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. |
| * |
| **********************************************************************/ |
| |
| #include "mfcpch.h" |
| #include "sortflts.h" |
| #include "notdll.h" |
| |
| ELISTIZE (SORTED_FLOAT) |
| /********************************************************************** |
| * SORTED_FLOATS::add |
| * |
| * Add a new entry to the sorted lsit of floats. |
| **********************************************************************/ |
| void SORTED_FLOATS::add( //add new entry |
| float value, |
| inT32 key) { |
| SORTED_FLOAT *new_float = new SORTED_FLOAT (value, key); |
| |
| if (list.empty ()) |
| it.add_after_stay_put (new_float); |
| else { |
| it.move_to_first (); |
| while (!it.at_last () && it.data ()->entry < value) |
| it.forward (); |
| if (it.data ()->entry < value) |
| it.add_after_stay_put (new_float); |
| else |
| it.add_before_stay_put (new_float); |
| } |
| } |
| |
| |
| /********************************************************************** |
| * SORTED_FLOATS::remove |
| * |
| * Remove an entry from the sorted lsit of floats. |
| **********************************************************************/ |
| |
| void SORTED_FLOATS::remove( //remove the entry |
| inT32 key) { |
| if (!list.empty ()) { |
| for (it.mark_cycle_pt (); !it.cycled_list (); it.forward ()) { |
| if (it.data ()->address == key) { |
| delete it.extract (); |
| return; |
| } |
| } |
| } |
| } |
| |
| |
| /********************************************************************** |
| * SORTED_FLOATS::operator[] |
| * |
| * Return the floating point value of the given index into the list. |
| **********************************************************************/ |
| |
| float |
| SORTED_FLOATS::operator[] ( //get an entry |
| inT32 index //to list |
| ) { |
| it.move_to_first (); |
| return it.data_relative (index)->entry; |
| } |