Canola  0.8.D001
lib/number/z/constructor_copy.cc
Go to the documentation of this file.
00001 //
00002 // canola - canon canola 1614p emulator
00003 // Copyright (C) 2012 Peter Miller
00004 //
00005 // This program is free software; you can redistribute it and/or modify
00006 // it under the terms of the GNU General Public License, version 3, as
00007 // published by the Free Software Foundation.
00008 //
00009 // This program is distributed in the hope that it will be useful,
00010 // but WITHOUT ANY WARRANTY; without even the implied warranty of
00011 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
00012 // General Public License for more details.
00013 //
00014 // You should have received a copy of the GNU General Public License along
00015 // with this program. If not, see <http://www.gnu.org/licenses/>.
00016 //
00017 
00018 #include <lib/ac/assert.h>
00019 #include <lib/ac/string.h>
00020 
00021 #include <lib/number/z.h>
00022 
00023 
00024 number_z::number_z(const number_z &rhs) :
00025     digits_used(0),
00026     digits_allocated(0),
00027     digits(0)
00028 {
00029     if (rhs.digits_used)
00030     {
00031         digits_used = 0;
00032         digits_allocated = 16;
00033         while (digits_allocated < rhs.digits_used)
00034             digits_allocated <<= 1;
00035         digits = new digit_t [digits_allocated];
00036         while (digits_used < rhs.digits_used)
00037         {
00038             digits[digits_used] = rhs.digits[digits_used];
00039             ++digits_used;
00040         }
00041         memset(digits + digits_used, 0, digits_allocated - digits_used);
00042     }
00043     assert(is_valid());
00044 }
00045 
00046 
00047 // vim: set ts=8 sw=4 et :